如何在JMeter脚本内配置日志与结果文件路径(无需命令行参数)
问题描述
我当前通过以下命令行执行JMeter脚本:
"C:\Users\Anton Starodub\Desktop\Soft\apache-jmeter-5.5\bin\jmeter" -n -t "path\test_script.jmx" -l "path\jmeter.jtl" -j "path\Results\jmeter.log"
我希望无需在命令行中指定日志与结果文件路径,而是在脚本内部设置jmeter.log和jmeter.jtl的存储路径,仅通过命令行传递RESULT_DIR参数:
"C:\Users\Anton Starodub\Desktop\Soft\apache-jmeter-5.5\bin\jmeter" -n -t "path\test_script.jmx" -J RESULT_DIR="path"
随后在脚本内处理RESULT_DIR参数,将日志与结果文件存储到该目录。我尝试使用System.setProperty("jmeter.logfile", path);但未生效,请问是否可通过Groovy或Java实现该需求?
解决方案
可以通过Groovy脚本实现需求,核心是调整日志系统初始化时机,以及动态修改结果收集器的输出路径:
一、配置日志文件路径(jmeter.log)
JMeter启动阶段就会初始化日志系统,直接调用System.setProperty时机太晚,需要重新初始化日志配置:
- 在测试计划最顶部添加JSR223 Test Element(优先选这个,无需作为采样器执行),语言选择Groovy,勾选「Compile script if available」
- 写入以下脚本:
// 获取命令行传入的RESULT_DIR参数 def resultDir = System.getProperty("RESULT_DIR") if (resultDir) { // 拼接完整日志路径 def logPath = new File(resultDir, "jmeter.log").getAbsolutePath() // 设置系统属性 System.setProperty("jmeter.logfile", logPath) // 重新初始化日志系统,让新路径生效 org.apache.jmeter.util.JMeterUtils.initLogging() }
二、配置结果文件路径(jmeter.jtl)
通过Groovy找到测试计划中的结果收集器,动态修改其输出路径:
- 在日志配置脚本之后,添加另一个JSR223 Test Element,语言选择Groovy
- 写入以下脚本:
def resultDir = System.getProperty("RESULT_DIR") if (resultDir) { // 拼接完整结果文件路径 def jtlPath = new File(resultDir, "jmeter.jtl").getAbsolutePath() // 遍历测试计划中所有的结果收集器 def resultCollectors = ctx.getTestPlan().getChildren().findAll { it instanceof org.apache.jmeter.reporters.ResultCollector } // 批量修改输出路径 resultCollectors.each { collector -> collector.setFilename(jtlPath) } }
三、最终启动命令
使用你期望的精简命令即可:
"C:\Users\Anton Starodub\Desktop\Soft\apache-jmeter-5.5\bin\jmeter" -n -t "path\test_script.jmx" -J RESULT_DIR="path"
内容的提问来源于stack exchange,提问作者Anton.S
相关产品推荐
相关产品推荐

