JMeter并不真正支持即时更改侦听器测试元素的文件名,因为侦听器会 在 任何变量 之前 初始化。推荐的方式是:
- 在JMeter之外 获取Terradata会话ID ,即使用BTEQ或同等功能
通过-J命令行参数将值传递给JMeter,例如:
jmeter -Jsession_id_1=1234 -n -t /path/to/testplan.jmx
在需要时通过__P()函数引用会话ID值
${__P(session_id_1,)}
如果出于任何原因您仍然需要在JMeter测试脚本中执行此操作,则可以使用以下解决方案,但是请记住以下几点:
- 您需要从“摘要报告”侦听器的“文件名”输入中删除 所有内容 。只是让它空白。
- 确保下面的代码仅执行 一次 且只有一个线程。
所以:
- 添加JSR223 PostProcessor中的一个子
query1
采样和 之后 的Session PreProcessor
- 选择
groovy
在“语言”下拉列表 将以下代码放入JSR223 PostProcessor“脚本”区域:
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jmeter.reporters.ResultCollector;
import org.apache.jorphan.collections.HashTree;
import org.apache.jorphan.collections.SearchByClass;import java.lang.reflect.Field;
import java.lang.reflect.Method;StandardJMeterEngine engine = ctx.getEngine();
Field test = engine.getClass().getDeclaredField(“test”);
test.setAccessible(true);
HashTree testPlanTree = (HashTree) test.get(engine);SearchByClass summaryReportsSearch = new SearchByClass(ResultCollector.class);
testPlanTree.traverse(summaryReportsSearch);
Collection summaryReports = summaryReportsSearch.getSearchResults();
ResultCollector summaryReport = summaryReports.iterator().next();Class [] fileNameParam = new Class[1];
fileNameParam[0] = String.class;Method setFileName = summaryReport.getClass().getDeclaredMethod(“setFilenameProperty”, fileNameParam);
setFileName.setAccessible(true);
setFileName.invoke(summaryReport, new String(vars.get(“session_id_1”)));Method init = summaryReport.getClass().getDeclaredMethod(“initializeFileOutput”);
init.setAccessible(true);
init.invoke(summaryReport);
如果您使用的是JMeter
3.0,则将groovy捆绑在一起。对于以前的JMeter版本,您将需要手动安装Groovy语言支持,请查看Beanshell,JSR223和Java
JMeter脚本:您一直在等待的性能!有关groovy引擎安装说明和脚本编写最佳实践的文章。



