我正在尝试使用
从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>
答案 0 :(得分:0)
您的代码错误,您没有引用正确的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提交了一个显示问题的演示项目。它有助于理解你的问题。
状态: - 如果App作为主应用程序运行,则代码有效 - 如果从Eclipse运行AppTest,代码可以正常工作 - 但是当通过mvn clean install
运行时代码失败了失败是由于这段代码:
答案 1 :(得分:0)
小解决方法:
final List<String> classPathUrls = new ArrayList<>();
for (final URL url : URLClassLoader.class.cast(this.getClass().getClassLoader()).getURLs()) {
classPathUrls.add(url.getPath());
}
final String classPath = StringUtils.join(classPathUrls, ";");
JMeterUtils.setProperty("search_paths", classPath);
答案 2 :(得分:0)
在Java代码中使用Jmeter函数时,Jmeter尝试将Java类路径中与函数相关的类与'search_path'中的类进行比较(从jars中读取类)。因此,只有在两个路径中都存在所需的函数类时,Jmeter函数才起作用( Jmeter的每个函数都有单独的类)。
这就是为什么我们需要确保在pom中添加'ApacheJMeter_functions' jar(将在类路径中添加 )以及jmeter函数jar的路径设置为'search_path'。两者应具有相同的版本。
您可以参考this link了解更多详情
答案 3 :(得分:-1)
JMeter的问题是它希望在类路径中有一个名为“ApacheJMeter_functions.jar”的库,即使文件是二进制相等也不能是“ApacheJMeter_functions-3.3.jar”