Java StandardJMeterEngine运行JMX时__time()失效及Gradle配置问题
场景与问题现象
- 嵌入在HTTP请求JSON体中的JMeter函数
${__time()},在JMeter GUI环境下运行测试可正常生效 - 通过Java调用
StandardJMeterEngine直接运行.jmx测试文件时,该函数无法正常解析生效 - 曾尝试的替代方案:在JMeter GUI中将该函数赋值给变量,再在JSON请求体中引用该变量,结果仍为仅GUI运行场景正常;Java引擎运行时接口返回
400 Bad Request,说明提交的请求体内容不符合格式要求 - JMeter GUI中使用的HTTP请求JSON Body示例:
{ "UniqID" : ${__time()} }
当前使用的Java调用代码片段
JMeterUtils.loadJMeterProperties("../bin/jmeter.properties"); JMeterUtils.setJMeterHome("../jMeter"); JMeterUtils.initLocale(); SaveService.loadProperties(); File jmxFile = new File(".../test.jmx"); HashTree testPlanTree = SaveService.loadTree(jmxFile); StandardJMeterEngine jMeterEngine = new StandardJMeterEngine(); jMeterEngine.configure(testPlanTree); jMeterEngine. jMeterEngine.run(); jMeterEngine.exit();
排障过程发现与核心需求
- 临时排障验证结果:从Gradle本地缓存路径(参考路径:
..\Users\.gradle\caches\modules-2\files-2.1\org.apache.jmeter\ApacheJMeter_functions\)将ApacheJMeter_functions.jar复制到代码中设置的JMeter Home路径下的../jMeter/lib/ext子目录后,函数即可正常生效 - 核心待解决问题:因无法将jar文件上传到Git仓库,需要仅通过Gradle依赖配置实现上述等价加载效果,无需手动将jar包放入JMeter Home目录
内容的提问来源于stack exchange,提问作者akash bondre
相关产品推荐
相关产品推荐

