【问题标题】:How to enforce run Once Only Controller in Jmeter如何在 Jmeter 中强制运行一次控制器
【发布时间】:2019-03-15 05:22:26
【问题描述】:

我是 Jmeter 的新手,希望能够只运行一次设置请求,其中设置了一些变量,然后我再为我在 Number of 中设置的尽可能多的用户运行一组进一步的请求用户线程组。向这些用户传递在 Once Only 控制器中创建的变量。

我继承了如下脚本,使用了仅一次的控制器:

如果我将线程数设置为 10 以在一秒内增加到 10 并运行一分钟,我希望一次性控制器中生成的样本(请求)数显示为 1。我只想要这些请求运行一次,然后请求使用设置数据。

那么,为什么当我运行时,我会在一次性控制器中设置的请求中看到样本为 10:

请记住,鉴于我是 Jmeter 的新手,可能存在一些基本的误解。

我找到了似乎是我需要的 setUp 线程组控制器。但是,这似乎不会将使用 JSON 提取器提取的变量传递到下一个线程组“负载测试”

谢谢

【问题讨论】:

    标签: jmeter performance-testing load-testing


    【解决方案1】:

    使用Once Only Controller 为每个线程运行特定的采样器

    Once Only Logic Controller 告诉 JMeter 只处理其中的控制器每个线程一次

    您可以将采样器添加到setUp Thread Group,以便在测试前执行一次

    在测试继续执行常规线程组之前执行。

    • 注意保持默认值(尤其是线程数 = 1)

    【讨论】:

    • 谢谢。我找到了 setUp Thread Group ,这就是我所需要的。但是,当放置在另一个线程组中时(请参阅修改后的问题和屏幕截图),它不再将变量传递给负载测试组中的后续测试
    • @Steerpike 您需要将变量复制到 JMeter 属性,例如使用 JSR223 采样器:props.put("varName", vars.get("varName")); 然后使用 ${__P(varName)} 获取它
    • 我正在使用后处理器进行复制; Json Extractor 并以这种方式存储变量。一旦我使用 setUp ThreadGroup 它不再传递变量。如果我在同一个线程组下使用仅一次控制器,那么它可以工作
    【解决方案2】:

    根据Once Only Controller 文档:

    Once Only Logic Controller 告诉 JMeter 在每个线程中只处理一次其中的控制器,并在通过测试计划的进一步迭代期间传递其下的任何请求。

    因此,无论您的线程组将有多少个循环,您的每个线程都只会执行一次 Only Controller 的子项。

    由于您有 10 个线程,因此 10 个线程中的每一个都会执行一次请求。

    如果您只想通过一个线程执行请求,无论线程组中有多少请求 - 我建议改为使用 If Controller

    1. 用 If 控制器替换仅一次控制器
    2. 使用以下条件:

      ${__groovy(ctx.getThreadNum() == 0 &&  vars.getIteration() == 1,)}
      

    【讨论】:

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