首页 > 解决方案 > Jmeter 后处理器和控制器

问题描述

我有一个带有以下代码的后处理器。

import test.MFG
MFG mfgRepo = new MFG();
log.info("device {}","${deviceID}");
long crashTime= ${p1};
String deviceId1="${deviceID}";
log.info("the crashtime is {}",crashTime);

List<Map<String,Object>> dbItem = mfgRepo.getItemFromDB("TEST",deviceId1,crashTime);
log.info("The item is {}",dbItem.get(0).get("info"));

上面的 deviceID 和 p1 是在每个请求中变化的变量,例如 testdevice1,testdevice2... 而 p1 是不同的时间戳。当这些值在后处理器中运行时,只有第一个请求值在所有后处理器中被处理。我究竟做错了什么?如何在 while 控制器中实现相同的验证,该控制器将测试 dbItem.get(0).get("info") 对于并发线程组中发出的每个请求是否不为空。 在此处输入图像描述

标签: jmeter

解决方案


根据JSR223 采样器文档

JSR223 测试元素具有可以显着提高性能的特性(编译)。要从此功能中受益:

  • 使用脚本文件而不是内联它们。如果此功能在 ScriptEngine 上可用,这将使 JMeter 编译它们并缓存它们。
  • 或使用脚本文本并检查缓存已编译的脚本(如果有可用的属性)。

使用此功能时,请确保您的脚本代码不直接在脚本代码中使用 JMeter 变量或 JMeter 函数调用,因为缓存只会缓存第一个替换。而是使用脚本参数。

所以改变你的:

  • ${deviceID}"vars.get('deviceID')
  • ${p1}vars.get('p1') as long
  • 等等

wherevarsJMeterVariables类实例的简写,请参阅 JavaDoc 以获取可用函数和属性的完整描述,以及Top 8 JMeter Java Classes You Should Be Using with Groovy文章以获取有关使用此JMeter API简写以及可用于JSR223 测试元素的其他简写的更多信息


推荐阅读