java - 从 Java 函数和属性运行 JMeter 脚本时不起作用

标签 java jmeter performance-testing

我正在尝试使用 Java 代码执行 JMeter 脚本

String jmeterHome = "D:/tmp/apache-jmeter-3.3";
StandardJMeterEngine jmeter = new StandardJMeterEngine();
JMeterUtils.loadJMeterProperties(jmeterHome + "/jmeter.properties");
JMeterUtils.setJMeterHome(jmeterHome);
JMeterUtils.initLocale();

SaveService.loadProperties();

File script = new File(jmeterHome + "/http_localhost.jmx");
HashTree testPlanTree = SaveService.loadTree(script);

Summariser summer = null;
String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
if (summariserName.length() > 0) {
    summer = new Summariser(summariserName);
}       

String logFile = jmeterHome + "/file.jtl";
ResultCollector logger = new ResultCollector(summer);
logger.setFilename(logFile);
testPlanTree.add(testPlanTree.getArray()[0], logger);

jmeter.configure(testPlanTree);
jmeter.run();

在 JMeter GUI 的“线程组”配置中,我将“线程数”设置为“${__P(xxx,20)}”。它在 GUI 上运行良好 - 我可以使用默认值“20”执行脚本。但上面的代码并没有启动任何线程。 Java 代码打印出它正在尝试启动零个线程。

我见过Jmeter functions don't executing when calling from java code我的项目中确实有以下依赖项

        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_java</artifactId>
            <version>3.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_http</artifactId>
            <version>3.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_functions</artifactId>
            <version>3.3</version>
        </dependency>

最佳答案

您的代码错误,您没有引用正确的 jmeter.properties 路径。

工作示例:

    String jmeterHome = "/data/jmeter/jmeters/apache-jmeter-3.3/";
    StandardJMeterEngine jmeter = new StandardJMeterEngine();
    JMeterUtils.setJMeterHome(jmeterHome);
    JMeterUtils.loadJMeterProperties(jmeterHome + "bin/jmeter.properties");
    JMeterUtils.initLocale();

    SaveService.loadProperties();

    File script = new File("/data/jmeter/workspace/JMeterFromJava/scenario/localhost.jmx");
    HashTree testPlanTree = SaveService.loadTree(script);

    Summariser summer = null;
    String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
    if (summariserName.length() > 0) {
        summer = new Summariser(summariserName);
    }       

    String logFile = "/data/jmeter/workspace/JMeterFromJava/results/file.jtl";
    ResultCollector logger = new ResultCollector(summer);
    logger.setFilename(logFile);
    testPlanTree.add(testPlanTree.getArray()[0], logger);

    jmeter.configure(testPlanTree);
    jmeter.run();

2017 年 9 月 29 日编辑:

您向 bugzilla 提交了一个显示问题的演示项目。它有助于理解您的问题。

状态: - 如果应用程序作为主应用程序运行,则代码可以工作 - 如果 AppTest 从 Eclipse 运行,则代码可以工作 - 但是通过 mvn clean install 运行时代码失败

失败是由于以下代码造成的:

关于java - 从 Java 函数和属性运行 JMeter 脚本时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46429778/

相关文章:

java - 在 RPT 运行期间,驱动程序报告它不再从工作台接收消息

java - AEM OSGI 3rd 方依赖项, bundle 未激活

performance - 如何比较 2 个不同 JMeter 自动运行的输出?

java - 带有路径参数和命令对象的 Springdoc-OpenAPI

java - 从可配置的 JAR 运行 JMeter

jmeter - 如果jMeter的Controller抛出StackOverflowError

xml - 如何不在 Jmeter 中附加旧的 Result.xml 文件?

selenium - 在 docker 容器内使用 selenium hub 有什么限制吗?

java - 在JAVA中用字符 '{'定义字符串

java - 如果网站关闭(超时),如何获取服务器的状态?