微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在JMeter中测量线程的开始到结束时间

如何解决如何在JMeter中测量线程的开始到结束时间

我一直试图弄清楚如何衡量JMeter中的线程(虚拟用户)完全完成所花费的时间。我现在不必担心响应时间。我尝试加载测试的API以异步方式工作。我请求开始工作,给了我一个工作ID,然后使用该工作ID检查该工作的状态,直到完成为止。我很想知道每个作业需要多长时间才能完成,即作业何时开始(创建线程)以及作业何时完成(线程完成工作)。

我已经看到一些人建议在类似的情况下使用Transaction Controller,但是除非引起我的误解,否则它会为我提供“交易”中所有请求的总响应时间,这对我没有帮助

这是我到目前为止在JMeter中设置的内容

enter image description here

实际上效果很好,我最初提出了提交作业并提取作业ID的请求。在while循环中,我每隔10秒(恒定计时器)使用提取的id检查作业的状态,直到作业完成。

这是5个并发用户的汇总报告的样子,我还可以使标签相同,以便对其进行进一步压缩,但是这些信息都不能告诉我线程花费了多长时间。从样本数量中,我可以推测出一半的线程大约需要10秒钟才能完成,其余的线程可以乘以10秒(休眠计时器),并大致估算出完成所需的时间,但这很难做到(或至少需要大量时间)。我真的希望JMeter开箱即用,可以以很好的报告格式为我提供这些信息。

enter image description here

我还看到一些建议,即获取此类信息的唯一方法是解析日志,只是想知道是否有人解决了类似的问题。

解决方法

您的问题包含答案,只需测量即可

  1. JSR223 Sampler添加到线程组的开头,并将以下代码放入“脚本”区域:

    SampleResult.setIgnore()
    vars.putObject('startTime',System.currentTimeMillis())
    

    第一行告诉JMeter不要存储JSR223采样器结果(因为我相信您不需要这样做),第二行将当前时间戳保存到${startTime} JMeter Variable

  2. 在线程组的末尾添加另一个JSR223 Sampler,并在其中使用以下代码:

    SampleResult.setIgnore()
    def end = System.currentTimeMillis()
    def start = vars.getObject('startTime')
    log.info('Thread ' + (ctx.getThreadNum() + 1) + ' elapsed time: ' + (end - start))
    

    在这里,我们获得作业结束后的当前时间戳,并将其从第一个JSR223采样器中的前一个时间戳存储中减去。增量将打印到j meter.log file,但是您可能希望将其存储到另一个JMeter变量中,并通过Sample Variables属性将其公开给结果,以便将其添加到.jtl结果文件中

演示:

enter image description here

请参阅Top 8 JMeter Java Classes You Should Be Using with Groovy,以详细了解这些SampleResultvarsctx速记的含义

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。