如何在Jmeter中强制运行仅控制器一次

时间:2018-10-10 10:13:20

标签: jmeter performance-testing load-testing

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

我已经使用一次控制器继承了脚本,如下所示:

Script

如果我将线程数设置为10以在一秒钟内增加到10并运行一分钟,我希望“仅一次”控制器中发出的Samples(请求)数量显示为1。我只希望这些请求运行一次,然后再请求使用设置数据。

为什么然后在运行时,在“仅一次控制器”中设置的请求中将示例显示为10:

aggregate report

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

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

setUp Thread Group

谢谢

2 个答案:

答案 0 :(得分:1)

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

  

“仅逻辑控制器”告诉JMeter仅每个线程一次

处理JMeter内部的控制器。

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

  

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

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

答案 1 :(得分:0)

根据Once Only Controller文档:

  

“仅逻辑控制器”告诉JMeter每个线程仅对其内部的控制器进行一次处理,并在测试计划的进一步迭代期间将其下的所有请求传递给它。

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

由于您有10个线程,所以10个线程中的每个线程将执行一次请求。

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

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

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