如何在正在运行的线程组中实现调度?

时间:2018-03-26 21:26:15

标签: java jmeter performance-testing jmeter-plugins

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

测试用例是500名用户在5分钟内完成该功能。

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

现在,我正在通过在登录后给予一些思考时间来处理这个问题,以减慢登录到我可以预测的稳定数字,然后在每个线程的开始时启动“功能”,如下所示:主调度员
+登录响应时间
+思考时间......

但这有点模糊。 有没有办法在已经运行的情况下“提升”任务?

2 个答案:

答案 0 :(得分:0)

我可以考虑两种选择。

第一个是两次使用随机时间。您可以使用0秒到300 - 1 [0-300)或使用millis [0-300000)的范围。然后根据这个ramdon时间睡觉线程。

这种方法可能更现实一些,因为例如,在给定间隔的特定秒中,您没有任何线程开始,而在其他特定秒中,您有2-3。这仍然应该在一般情况下保持平衡,因为你不会在开始时提出所有请愿。

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

答案 1 :(得分:0)

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

示例测试计划如下所示:

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

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