如何在jmeter脚本中添加计时器,我们可以在第一次调用时启动计时器,轮询状态,在第一个请求完成后停止计时器,并添加Assert

xcitsw88  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(135)

我正在对生成报告进行负载测试,要求报告应在10分钟内生成。
它包括一个用于生成报告的HTTP post请求,然后有一个状态检查调用,该调用不断检查第一个请求的状态。一旦第一个请求的状态更改为完成,则报告生成成功。
基本上,我希望在第一个请求开始时启动计时器,并在状态完成后停止计时器,如果时间小于10分钟,则需要添加Assert,否则测试通过。
我尝试了多种方法,比如使用Transaction控制器,并将所有请求添加到该控制器下,但这并没有给予总和,而是给出了该控制器下所有请求的平均响应时间。
此外,我还尝试了beanshell侦听器,提取每个请求的响应时间,并将它们全部添加进去...

var responseTime;
props.put("responseTime", sampleResult.getTime());
log.info(" responseTime :::" + props.get("responseTime"));

log.info("time: "+ sampleResult.getTime());
props.put("responseTime", (sampleResult.getTime()+props.get("responseTime")));
log.info("new responseTime :::" + props.get("responseTime"));

但是,我对添加这些请求的响应时间不感兴趣,相反,我只需要知道从触发报告到报告显示完成状态所经过的时间。
所有的jmeter计时器都在增加延迟,我不想增加延迟,而不是我需要它作为一个计时器。
任何帮助都是非常感谢的。
谢谢你

pexxcrt2

pexxcrt21#

从JMeter 3.1开始,建议使用JSR223测试元素和Groovy语言编写脚本,主要是due to performance reasons,因此我将在Grovy中提供一种可能的解决方案
1.将JSR223 PostProcessor添加为启动报告生成的HTTP请求的子项,并在其中放置以下代码:

vars.putObject('start', System.currentTimeMillis())

1.在检查状态后添加JSR223采样器,并在其中放置以下代码:

def now = System.currentTimeMillis()
def start = vars.getObject('start')

def elapsed = now - start

if (elapsed >= 600000) {
    SampleResult.setSuccessful(false)
    SampleResult.setResponseMessage('Report generation took: ' + (elapsed / 1000 / 60) + ' minutes instead of 10')
}

设置示例:

相关问题