【问题标题】:How to pause all thread groups in certain step until process is finished in other thread group - Jmeter如何在某个步骤中暂停所有线程组,直到其他线程组中的进程完成 - Jmeter
【发布时间】:2018-05-11 13:24:40
【问题描述】:

我有一个复杂的场景,我想在 Jmeter 测试计划中构建。 我有一个测试计划,其中包含一些我想同时开始运行的测试。 我创建了 3 个线程组,问题是我希望线程组 2 + 3 将在第 2 步中保持,直到线程组 1(外部进程)完成。 (外部过程是在我的系统中运行使用在步骤 1 + 2 中创建的数据的 jenkins 作业。如果 jenkins 没有完成,所有接下来的步骤 3 - 100 将失败) 复杂性是我希望所有线程都开始一起运行,线程组(=测试)2 + 3 将在第 2 步之后保持,并等待线程组 1 的外部进程完成,然后继续运行。这种情况可以在 Jmeter 中完成吗?没有在线程 2 + 3 中使用延迟? 请参阅我要创建的附件图片

** test2 + 3 中的步骤 1 + 2 必须在外部进程之前运行,步骤 3 必须在外部进程之后运行

[][测试计划]

[][完整的测试计划 - 测试 2+3 中的步骤 3 必须在外部进程之后运行]

【问题讨论】:

    标签: groovy jmeter


    【解决方案1】:

    请检查以下计划,我认为它应该可以工作:-

    线程组 1:- 在执行外部进程之前等待 5 秒的测试操作(仅用于模拟)。然后正则表达式从响应中获取一个值。在我的示例中,它在虚拟采样器(外部进程)响应中为“5”。然后我使用 JSR223 后期处理将其设置为属性。

    线程组 2 和 3:- 使用 While Controller 验证线程组 1 中设置的属性,如果没有,则等待 1 秒。如果您不希望“测试操作”在控制器下方等待,您可以使用其他一些采样器(例如 JSSR223)进行日志记录或虚拟。

    这样线程组会在while暂停,一旦获得属性值就继续。

    下面的标志方法尝试:-

    预处理器将值重置为其他值以进行 while 循环控制。

    根据上一个示例结果,使用 JSR223 设置属性。

    这是在while循环中使用的。

    【讨论】:

    • 嘿,阳光明媚。我仍然不明白为什么 if 条件。我不明白如何使用它?我希望所有线程都会暂停,直到第一个线程完成,那么在 IF 中使用什么?另一个问题,如果我在线程组中使用循环(不是所有线程组只是一个步骤)是一个问题吗?如果 ypu 可以逐步提到重现以及在 if 控制器中放入什么,我将再次感激不尽?
    • 您好 Bastian,对于两个线程之间的通信,我们可以使用线程间通信插件。我们从第一个线程(外部进程)获取一个变量,确保进程完成并将其传递给第二个线程。 “如果”条件是验证我们是否获得了 threadgrp1 所需的状态,然后仅在其他 threadgrp 中启动后续的 sampler/s。这是我尝试过的。我会检查是否有任何其他方法来解决它。循环将继续进行轮询..如果需要,那么没有问题,但您也可以使用等待..
    • 在您的场景中是否可以先运行外部进程threadgroup1,然后再运行其他线程组。如果是,您可以使用“setUp Thread Group”,这将只执行第一个线程组,其他线程组将同时执行。但是,如果您愿意,可以在两者之间暂停其他线程组,然后请忽略这一点。
    • 仍然不明白在 if 条件中放入什么。你能把if控制器的PIC放上去吗?你是怎么配置的?为什么有重复?这一切都在一个循环中吗?我只需要运行一次进程和每个线程组运行一次​​
    • 嗨巴斯蒂安,我使用了我在答案中给出的相同的 jmx (SynchronizationPluginsExample.jmx) 文件,并且我使用了相同的“如果”条件..没有任何改变。这是重复的,因为我在每个子线程组中使用了 4 个循环和 2 个线程。我的 jmx 具有 "if" "${__fifoPop(cookies,gotCookie)}" != "" 与示例 jmx 中提供的相同..
    【解决方案2】:

    经过努力,我在阳光帮助下找到的解决方案是使用 while 循环 + 系统属性。 我在第一个线程组标志中创建并从 0 开始。 flag 是系统变量,所以我使用 props.put("flag",flag) 命令。 在第二个线程组中,我使用了带有 ${__javaScript(props.get("_flag") == 0)} 的 while 循环 作为条件。 我使用了测试动作采样​​器,并将其放在 while 循环中,动作暂停和持续时间为 5000 毫秒 - 循环将每 5 秒检查一次标志。 完成工作后,我将系统变量 flag = 1 放入。循环被弯下

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多