jmeter - 我有 JSR233 侦听器,在 JMeter 非 gui 模式下似乎被忽略了
问题描述
我在 HTTP 请求下有 JSR233 侦听器,它存储所有响应时间值,创建数组,然后对数组进行排序以找到 90% 行,然后在达到最终 90% 行阈值时标记最后一个事务/请求通过或失败。一切都在 GUI 中完美运行,但我正在使用 Docker Image 在 Gitlab CI 中运行这个测试,看起来这个 JSR233 脚本在 10 次中被忽略了 8 次,但有 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 不会“忽略”任何东西,您可以通过以下方式自行仔细检查:
将__counter() 函数放入 JSR223 侦听器的“参数”字段中,例如:
${__counter(FALSE,)}
将此行添加为脚本的第一行:
println('Executing listener #' + ((Parameters as int) -1))
您应该在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 次(实际顺序可能因您的加速设置而异)
关于您的代码本身,请注意,如果您有 > 1 个虚拟用户,您所谓的“代码”将由于这些竞争条件而失败或产生无效结果,并且requests
值rt*
是全局的
属性与变量不同。变量是线程本地的;属性对所有线程都是通用的
推荐阅读
- python - Python 我无法在 youtube 上发表评论
- html - 嵌套时使用css舍入图像边框不起作用
- java - Elasticsearch 建模最佳实践
- c# - 摘要列表
.添加不适用于基本构造函数 - apache-spark - 如何通过 Spark SQL 创建具有指定位置的托管配置单元表?
- encoding - Azure 函数 - ServiceBusTrigger - 异常绑定消息
- c - 结构函数返回的垃圾值
- javascript - 带有递增大写字母的 Adobe Acrobat 展览标签邮票
- javascript - 如何将变量附加到for循环外的另一个变量中?
- grails - Grails GORM 强制更新语句,即使 GORM 认为实例不脏