【问题标题】:Get the initial expected test duration or end time of a Concurrency Thread Group at the beginning of the script在脚本开头获取并发线程组的初始预期测试持续时间或结束时间
【发布时间】:2023-03-18 04:02:02
【问题描述】:

在 Jmeter 中,我将 Concurrency Thread Group${__tstFeedback(ThroughputShapingTimer,1,10,10)}Throughput Shaping Timer 结合使用,以在整个测试期间动态更改目标吞吐量。 p>

我想要一个 JSR223 测试元素(断言或 PostProcessor,这有关系吗?)在其中编写自定义逻辑以不记录某些特定错误但只有当它发生在测试脚本结束,我不想硬编码时间值

例如,如果我在计划运行时间的最后 2 分钟内收到 java.net.SocketException,我不想记录它,但我确实想在其余时间记录它。 为此,我想我需要一些方法来获取自测试开始以来测试应该结束的日期,对其进行评估并从中减去 2 分钟,然后将当前时间与该时间进行比较,然后如果当前时间更长,然后开始执行一些逻辑以从日志记录中排除结果。

更新:在“正常”或“默认”线程组中,我注意到我可以这样做以获得初始持续时间:

String groupDuration = ctx.getThreadGroup().getDuration();
log.info(groupDuration)

但对于并发线程组,它的工作方式不一样。

如果有任何信息可以帮助我实现这一目标,我将不胜感激。

【问题讨论】:

  • 在您的计划反馈函数中,允许的最大线程数设置为 10。最好将 允许的最大线程数设置为更高的值. (例如 1000)。 JMeter 只会在需要保持所需吞吐量时创建线程。 ${__tstFeedback(tst-name,1,1000,10)}Documentation

标签: jmeter jmeter-plugins jmeter-5.0 jsr223 threadgroup


【解决方案1】:

如果您的Concurrency Thread Group 配置有Throughput Shaping TimerSchedule Feedback Function,则计划的测试持续时间可通过吞吐量整形计时器通过property exposed 获得。

props.get('elementName_totalDuration')

元素将导出以下属性,您可以通过 __P 函数访问或在 JSR223 测试元素中使用 props.get("property name")

elementName_totalDuration - 总持续时间为 “持续时间,秒”列

elementName 将是您的吞吐量整形计时器的名称

注意 您应该将 Hold Target Rate Time 设置为等于或大于吞吐量整形计时器计划中指定的总持续时间的值。因此,将此值设置为非常高的值,以避免在吞吐量整形计时器中的预定持续时间之前完成测试。例如设置目标保持率 t0 1440 分钟。

将并发线程组与吞吐量整形定时器和反馈函数一起使用

当此线程组与吞吐量整形计时器一起使用时,您可以将目标并发值替换为对 tstFeedback 函数的调用,以动态维护实现目标 RPS 所需的线程数。使用此方法时,请将并发线程组加速时间和加速步骤计数字段留空,但请确保将 保持目标速率时间设置为等于或大于吞吐量整形计时器计划中指定的总持续时间的值

【讨论】:

    【解决方案2】:

    对于dynamic thread groups 及其衍生产品,您可以使用以下函数:

    ctx.getThreadGroup().getHold()
    

    如果需要判断是分分钟还是秒可以用

    ctx.getThreadGroup().getUnitStr()
    

    例子:

    有关 JMeter 中 Groovy 脚本的更多信息:Apache Groovy - Why and How You Should Use It

    【讨论】:

      【解决方案3】:

      您可以在测试后使用Filter Results Tool过滤结果

      如果你想移除加速阶段,你可以使用偏移过滤器

      使用--end-offset 120参数(秒)

      【讨论】:

      • 如果我理解正确的话,这个工具需要存在一个 .jtl 输入文件进行处理,然后它会根据命令行中给出的参数输出输入文件的编辑版本。然后这个新文件可以用来生成 jmeter 报告。你能确认我的理解是正确的吗?
      • @JustNatural 基本可以,输入输出可以是csv
      • 那么这需要一个额外的手动步骤。是否可以在测试脚本的末尾以某种方式调用生成更新日志文件的命令以自动执行初始文件的转换?如果是,怎么做?
      • @JustNatural 是的,您可以在批处理文件/脚本中同时调用两者
      • @JustNatural 这是一个不同的问题,你可以用谷歌搜索或提出新问题
      猜你喜欢
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 2021-09-06
      相关资源
      最近更新 更多