尝试使用JMeter API生成JMeter测试计划(jmx):无法保存CSVDataSet元素

时间:2014-08-29 12:39:25

标签: jmeter

我正在使用JMeter API动态创建JMeter jmx文件。我能够在TestPlan中添加一个ThreadGroup,在ThreadGroup中添加一个JavaSampler。但是当我在Java Sampler中添加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 个答案:

答案 0 :(得分: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");

不确定为什么代码中没有使用setter,但这似乎是现在的方法

答案 1 :(得分:0)

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

这可能是您构建HashTree的方式中的一个问题,但除非您显示完整的代码,否则无法获得帮助。

顺便说一句,正如我在之前的回答中所说,你想要做的是根据输入参数构建不同的测试并不是一个好主意恕我直言,这种方法对于即将推出的JMeter版本将非常脆弱。

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