【问题标题】:Jmeter Run Thread Groups Consecutively vs No of ThreadsJmeter连续运行线程组与线程数
【发布时间】:2016-09-02 23:24:04
【问题描述】:

以下 Jmeter 测试架构有什么区别?

--Test Plan(Run Thread Groups Consecutively not checked)
    --Thread Group 1(No of Threads(users) : 1, Ramp up Period(in Seconds) : 1, Loop count: 1)
    --Thread Group 2(No of Threads(users) : 1, Ramp up Period(in Seconds) : 1, Loop count: 1)
    --Thread Group 3(No of Threads(users) : 1, Ramp up Period(in Seconds) : 1, Loop count: 1)
    --Thread Group 4(No of Threads(users) : 1, Ramp up Period(in Seconds) : 1, Loop count: 1)
    --Thread Group 5(No of Threads(users) : 1, Ramp up Period(in Seconds) : 1, Loop count: 1)
    --Thread Group 6(No of Threads(users) : 1, Ramp up Period(in Seconds) : 1, Loop count: 1)
    --Thread Group 7(No of Threads(users) : 1, Ramp up Period(in Seconds) : 1, Loop count: 1)
    --Thread Group 8(No of Threads(users) : 1, Ramp up Period(in Seconds) : 1, Loop count: 1)
    --Thread Group 9(No of Threads(users) : 1, Ramp up Period(in Seconds) : 1, Loop count: 1)
    --Thread Group 10(No of Threads(users) : 1, Ramp up Period(in Seconds) : 1, Loop count: 1)

--Test Plan(Run Thread Groups Consecutively not checked)
    --Thread Group 1(No of Threads(users) : 10, Ramp up Period(in Seconds) : 1, Loop count: 1)

--Test Plan(Run Thread Groups Consecutively not checked)
    --Thread Group 1(No of Threads(users) : 2, Ramp up Period(in Seconds) : 1, Loop count: 1)
    --Thread Group 2(No of Threads(users) : 2, Ramp up Period(in Seconds) : 1, Loop count: 1)
    --Thread Group 3(No of Threads(users) : 2, Ramp up Period(in Seconds) : 1, Loop count: 1)
    --Thread Group 4(No of Threads(users) : 2, Ramp up Period(in Seconds) : 1, Loop count: 1)
    --Thread Group 5(No of Threads(users) : 2, Ramp up Period(in Seconds) : 1, Loop count: 1)

在我的场景中,我想对我的解决方案进行负载测试,其中我有不同的用户执行不同的测试用例。在这里,用户一次执行相同操作的机会很小。所以我为我的测试用例使用不同的线程组。随着我的场景增加线程组中的 No of Threads(users) 对我来说并不合乎逻辑。所以我在我的测试计划中取消了连续运行线程组,但不确定它是否真的进行并发测试。

【问题讨论】:

    标签: jmeter


    【解决方案1】:

    如果您选中连续运行线程组,那么线程组将连续启动。这意味着 JMeter 将首先启动线程组 01,然后是线程组 02,......,依此类推.这里可以选择指示 JMeter 串行而​​不是并行运行 线程组

    因此,如果您在测试计划中取消选中连续运行线程组,它将在您的测试中产生并发

    【讨论】:

    • 是的,我知道。如果我增加线程数,那么相同的测试也将并行运行多次。这两者有什么区别??
    • 基本区别是当“Checked”连续运行线程组时,JMeter会执行第一个线程组中的线程并结束测试并然后启动下一个线程组并执行该线程组中的那些线程等等..
    • 哦,不,我不是那个意思。如果我取消选中 Run Thread Groups Consecutively,它将并行运行线程。另一方面,如果我增加线程组中的线程数,它也会并行启动多个用户。这两者有什么区别?
    • 请看一下我的第一个和第二个测试计划。这两者有什么区别?
    • 对于第一种情况,来自 10 个不同线程组的 10 个线程将并行运行。但是,如果您使用一个线程组并且在此下使用“线程数(用户)= 10”,那么这 10 个线程将不会同时启动。这完全取决于您为一个线程组下的这 10 个线程提供的 Ramp Up 时间。如果您将 Ramp up time =10 秒,那么这 10 个线程将在 10 秒内启动。如果您设置值为“1 秒”,那么这 10 个线程将在 1 秒内启动。这完全取决于您提供的加速时间
    【解决方案2】:

    案例 1 中,您保证从执行开始就具有 10 个线程的并发性。

    案例 2中,1 秒后达到 10 个线程的并发,速率为每 100 毫秒 1 个线程(假设在此时间内没有线程完成执行)。

    案例 3 混合了两种选择:立即启动 5 个线程,1 秒后再启动 5 个线程,因此 1 秒后达到 10 个线程的并发。

    请注意,当我说“达到并发”​​时,我指的是 JMeter 方面。根据脚本的设置,稍后可能会达到服务器的并发性。

    同样重要的是你有“循环计数:1”。如果所有用户长时间(分钟/小时)运行该单个循环迭代,或者线程组内有一个循环控制器,则 3 个选项之间的差异对于统计而言是微不足道的。但是如果该迭代很短(几秒到几分钟),或者每个线程中的每个操作都是唯一的,那么在选项 2 和 3(尤其是 2)的情况下,您的统计数据将是有缺陷的,因为在较早开始的线程上的许多操作将在达到 10 个线程并发之前执行,反之亦然。

    【讨论】:

    • 案例 2 为什么是 9 秒?
    • @TanjimRahman:每个线程将在前一个线程后 1 秒启动,因此第一个线程将立即启动,第二个线程将在 1 秒后启动,第三个线程将在 2 秒后启动,以此类推;线程 10 将在 9 秒后启动。所以 9 秒后你将有 10 个线程在运行
    • 但是按照link;对于案例 2,10 个线程应在 1 秒内启动。
    • 好的,由于某种原因,您在第二种情况下延迟 10(即每个线程 1 秒)。但是,是的,总共 1 秒的延迟几乎看不到(每个线程 100 毫秒)
    【解决方案3】:

    JMeter 的作用如下:

    • 对于每个线程组,它会在“加速”期间启动线程
    • 线程开始执行采样器倒置或根据Logic Controllers
    • 当线程没有要执行的采样器或循环迭代时 - 它正在被关闭

    因此,您可能会遇到第一个线程已经完成所有操作并被关闭而第 10 个线程尚未启动的情况。

    如果您想保证并发性 - 在Thread Group 级别提供足够的循环。您也可以使用 Ultimate Thread Group ,它具有一些额外的功能来灵活定义用户到达率和可视化预期并发。

    顺便说一句,即使在同一个线程组中使用Throughput Controller,你也可以让不同的虚拟用户执行不同的场景。有关可能方法的详细说明,请参阅Running JMeter Samplers with Defined Percentage Probability 文章。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多