如何从Java代码运行JMeter测试用例?
我已关注Blazemeter.com的示例Here
我的代码如下:
public class BasicSampler {
public static void main(String[] argv) throws Exception {
// JMeter Engine
StandardJMeterEngine jmeter = new StandardJMeterEngine();
// Initialize Properties, logging, locale, etc.
JMeterUtils.loadJMeterProperties("/home/stone/Workbench/automated-testing/apache-jmeter-2.11/bin/jmeter.properties");
JMeterUtils.setJMeterHome("/home/stone/Workbench/automated-testing/apache-jmeter-2.11");
JMeterUtils.initLogging();// you can comment this line out to see extra log messages of i.e. DEBUG level
JMeterUtils.initLocale();
// Initialize JMeter SaveService
SaveService.loadProperties();
// Load existing .jmx Test Plan
FileInputStream in = new FileInputStream("/home/stone/Workbench/automated-testing/apache-jmeter-2.11/bin/examples/CSVSample.jmx");
HashTree testPlanTree = SaveService.loadTree(in);
in.close();
// Run JMeter Test
jmeter.configure(testPlanTree);
jmeter.run();
}
}
但是我一直在控制台中收到以下消息,我的测试永远不会执行。
INFO 2014-09-23 12:04:40.492 [jmeter.e]():启用运行版后将启动监听器 INFO 2014-09-23 12:04:40.511 [jmeter.e]():要恢复到之前的行为,请定义jmeterengine.startlistenerslater = false
我还尝试从jmeter.properties文件中取消注释jmeterengine.startlistenerslater = false
答案 0 :(得分:2)
jmeter.log
文件中的内容(它应该位于项目的根目录中)。或者,请注释JMeterUtils.initLogging()
行以查看STDOUT中的完整输出CSVSample_user.csv
,因为它可能会解析为Using CSV DATA SET CONFIG CSVSample.jtl
文件是否在任何地方生成(默认情况下,它应该在项目的根目录中)?里面有什么?代码看起来不错,我很确定问题在于CSVSample_user.csv
文件的路径,并且您的日志中有java.io.FileNotFoundException
之类的内容。请仔细检查CSVSample.jmx文件是否包含有效的完整路径到CSVSample_user.csv。
更新评论中的答案
jmeter.log
文件应位于Eclipse工作区文件夹下CSVSample.jmx
有一个View Resulst in Table
侦听器,配置为在~/CSVSample.jtl
如果您想查看摘要生成器消息和“经典”.jtl报告,请在jmeter.configure(testPlanTree);
节之前添加下几行
Summariser summer = null;
String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
if (summariserName.length() > 0) {
summer = new Summariser(summariserName);
}
String logFile = "/path/to/jtl/results/file.jtl";
ResultCollector logger = new ResultCollector(summer);
logger.setFilename(logFile);
testPlanTree.add(testPlanTree.getArray()[0], logger);
答案 1 :(得分:0)
尝试使用库 - https://github.com/abstracta/jmeter-java-dsl。
支持将 JMeter 测试实现为 java 代码。
以下示例展示了如何实现和执行 REST API 测试。同样的方法也适用于其他类型的测试。
@Test
public void testPerformance() throws IOException {
TestPlanStats stats = testPlan(
threadGroup(2, 10,
httpSampler("http://my.service")
.post("{\"name\": \"test\"}", Type.APPLICATION_JSON)
),
//this is just to log details of each request stats
jtlWriter("test" + Instant.now().toString().replace(":", "-") + ".jtl")
).run();
assertThat(stats.overall().elapsedTimePercentile99()).isLessThan(Duration.ofSeconds(5));
}