我在 HTTP 请求下有 JSR233 侦听器,它存储所有响应时间值,创建数组,然后对数组进行排序以查找 90% 行,然后在达到最终 90% 行阈值时标记最后一个事务/请求通过或失败。
GUI 中的一切都运行完美,但我使用 Docker Image 在 Gitlab CI 中运行此测试,看起来这个 JSR233 脚本被忽略了十分之八,但有 2 次它也可以正常工作。
真的很困惑
它在 Windows 控制台 JMeter 非 GUI 中也表现得很奇怪,它可能会被忽略
String requests = props.get("requests");
long requestsSum = 0;
if (requests != null) {
requestsSum = Long.parseLong(props.get("requests"));
}
long thisRequest = sampleResult.getTime();
requestsSum++;
props.put("requests", String.valueOf(requestsSum));
props.put("rt"+String.valueOf(requestsSum), String.valueOf(thisRequest));
if ( requestsSum > 4 ) {
ArrayList strList = new ArrayList();
for (int i=1;i<6; i++){
strList.add(Integer.parseInt(props.get("rt"+String.valueOf(i))));
}
vars.putObject("ArrayListBeforeSorting",strList);
Collections.sort(strList);
vars.putObject("ArrayListAfterSorting",strList);
String HID = vars.get("ArrayListAfterSorting"); String[] words = HID.split(",");
log.info("ninetypercent line is: " + words[3]);
vars.put("NPL" , words[3]);
int ninetypercentline = Integer.parseInt(words[3].trim());
if ( ninetypercentline > 100 ) {
sampleResult.setSuccessful(false);
sampleResult.setResponseMessage("ninety percent line is reached");
}
}
JMeter 不会“忽略”任何内容,您可以通过以下方式自行仔细检查:
-
Putting __counter() 函数 https://jmeter.apache.org/usermanual/functions.html#__counter进入 JSR223 Listener 的“Parameters”字段,例如:
${__counter(FALSE,)}
-
添加此行作为脚本的第一行:
println('Executing listener #' + ((Parameters as int) -1))
您应该在中看到以下输出stdout https://en.wikipedia.org/wiki/Standard_streams#Standard_output_(stdout):
Executing listener #1
Executing listener #2
Executing listener #3
Executing listener #4
Executing listener #5
Executing listener #6
Executing listener #7
Executing listener #8
Executing listener #9
Executing listener #10
这意味着监听器已经执行了10次(实际顺序可能会有所不同,具体取决于您的情况)加速设置 https://www.blazemeter.com/blog/jmeter-ramp-up-the-ultimate-guide/)
关于您的代码本身,请注意,如果您有 > 1 个虚拟用户,您所谓的“代码”将失败或产生无效结果,因为竞争条件 https://en.wikipedia.org/wiki/Race_condition作为这些requests
, and rt*
值是global https://jmeter.apache.org/usermanual/functions.html
属性与变量不同。变量是线程的局部变量;属性对于所有线程都是通用的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)