2014-08-29 165 views
0

我正在使用JMeter API动态创建JMeter jmx文件。我能够在ThreadGroup内的TestPlan和JavaSampler中添加一个ThreadGroup。但是当我在Java采样器中添加一个CSVDataSet元素时,它不能正确保存。尝试使用JMeter API生成JMeter测试计划(jmx):无法保存CSVDataSet元素

下面的代码被用于创建新的CSVDataSet元件

CSVDataSet csvDataSet = new CSVDataSet(); 
    csvDataSet.setName("CSV Data Set"); 
    csvDataSet.setComment("Sample CSV Data Set"); 
    csvDataSet.setDelimiter(","); 
    csvDataSet.setFileEncoding(""); 
    csvDataSet.setFilename("d:\\jmeter\\data.csv"); // variable 
    csvDataSet.setQuotedData(true); 
    csvDataSet.setRecycle(true); 
    csvDataSet.setShareMode(shareMode.all); 
    csvDataSet.setStopThread(false); 
    csvDataSet.setVariableNames("firstname, lastname, email"); // variable 
    csvDataSet.setEnabled(true); 

当此使用SaveService.saveTree,最后JMX不包含被设置的所有值保存。

<org.apache.jorphan.collections.HashTree> 
     <CSVDataSet testname="CSV Data Set Config" enabled="true"> 
     <stringProp name="TestPlan.comments">Sample CSV Data Set Config</stringProp> 
     </CSVDataSet> 
    <org.apache.jorphan.collections.HashTree/> 

如上所示,只添加测试名称,启用和注释。剩下的变量完全被忽略。

是否需要设置某些值才能获得所需的所有值? 或者这是JMeter中的错误?我使用版本2.11

基本代码是按照第4.3节从下面的链接 http://blazemeter.com/blog/5-ways-launch-jmeter-test-without-using-jmeter-gui

要我添加如上所示的代码。它被添加的方式是,

testPlanTree.add("testPlan", testPlan); 
    testPlanTree.add("loopController", loopController); 
    testPlanTree.add("threadGroup", threadGroup); 
    testPlanTree.add("httpSampler", httpSampler); 
    testPlanTree.add("csvDataSet", csvDataSet); 

    SaveService 
      .saveTree(testPlanTree, new FileOutputStream("d:\\test.jmx")); 

CSVDataSet块的输出如上所示。

回答

2

查看JMeter源代码后,似乎所有的属性都是使用setProperty函数设置的,而不是单独的setter函数。因此,将下面的代码正确地创建CSVDataSet元素。

csvDataSet.setProperty("delimiter", ","); 
    csvDataSet.setProperty("fileEncoding", ""); 
    csvDataSet.setProperty("filename", "d:\\data.csv"); 
    csvDataSet.setProperty("quotedData", true); 
    csvDataSet.setProperty("recycle", true); 
    csvDataSet.setProperty("shareMode", "shareMode.all"); 
    csvDataSet.setProperty("stopThread", false); 
    csvDataSet.setProperty("variableNames", "var1, var2, var3"); 

不知道为什么制定者没有在代码中使用,但是这似乎是要走的路现在

0

这显然不是JMeter中的一个bug,否则CSV数据集无法保存。

这可能是您构建HashTree的一个问题,但除非您显示完整的代码,否则无法获得帮助。顺便说一句,正如我在之前的回答中所说的那样,根据输入参数构建不同测试的方法并不是一个好主意,恕我直言,这种方法对即将到来的JMeter版本将非常脆弱。

JMeter提供了你应该遵循的方法。

+0

添加代码的要求。 – Avi 2014-09-01 18:32:19