【问题标题】:How to implement scheduling inside a running thread group?如何在正在运行的线程组内实现调度?
【发布时间】:2025-12-14 17:10:01
【问题描述】:

我正在测试登录后发生的某个“功能”。

测试用例是 500 个用户在 5 分钟内使用该功能。

我可以在登录后添加一个同步计时器,以确保所有 500 个线程都已登录,但随后它将一次完成所有 500 个“功能”任务,而不是 5 分钟,这会使应用程序崩溃(它认为有DDoS 攻击并关闭)。

现在,我正在通过在登录后给予一些思考时间来处理这个问题,以减慢登录到我可以预测的稳定数字,然后在每个线程的轮次启动“功能”,按计划:
main调度器
+ 登录响应时间
+ 思考时间...

但这有点模糊。 有没有办法在已经运行的任务中“加速”?

【问题讨论】:

  • 您需要更清楚地了解吞吐量,如果您知道要查看多少吞吐量,请在要完成的活动之上使用吞吐量控制器。

标签: java jmeter performance-testing jmeter-plugins


【解决方案1】:

我可以考虑两种选择。

第一个是两次使用随机时间。您将使用从0 秒到300 - 1 的范围,即[0-300) 或使用millis [0-300000)。然后根据这个 ramdon 时间休眠线程。

这种方法可能更现实一点,因为例如,在给定间隔的特定秒内,您没有任何线程启动,而在其他特定秒内,您有 2-3 个线程。总的来说,这仍然应该很好地平衡,因为您不会在一开始就提出所有请愿书。

第二个是统一启动线程。在配置期间(登录和触发线程之前),您可以使用AtomicInteger 之类的东西,使用new AtomicInteger(0) 对其进行初始化并调用getAndIncrement() 来分配线程的位置,在[0-500) 范围内,然后当您触发线程 sleep 300.0 * id / 500.0 毫秒以执行任务/请愿。

【讨论】:

    【解决方案2】:

    默认情况下,JMeter 尽可能快地执行请求,您可以使用 Constant Throughput Timer 将执行“限制”到所需的吞吐量(每分钟请求)速率。

    示例测试计划如下所示:

    • 线程组
      • 登录
        • 同步定时器
      • 功能性
        • 恒定吞吐量计时器

    恒定吞吐量计时器遵循JMeter Scoping Rules,因此您可以将其应用于单个采样器或一组采样器。

    【讨论】: