jmeter 线程数作为变量

问题描述 投票:0回答:2

我的性能测试需要线程数数据的正交组合。比如我要测试

/path_1
1, 2, ... n
线程下,然后
/path_2
1, 2, ... n
线程下,然后
/path_n
1, 2, ... n
线程下。
注意我想先为同一路径运行不同的线程,然后是另一条路径。

最简单的解决方案是将

thread_count
path
作为属性的 jmeter 计划,然后启动提供不同属性的 jmeter。 比如

jmeter.sh ... -Jthread_count=1 -Jpath='/path_1' 
jmeter.sh ... -Jthread_count=2 -Jpath='/path_1' 
jmeter.sh ... -Jthread_count=1 -Jpath='/path_2' 
jmeter.sh ... -Jthread_count=2 -Jpath='/path_2' 

但我想充分利用 jmeter 的内置机制。理想情况下,我只需要在某个地方配置我的线程和路径列表,无论是在文件中还是在某些脚本中作为 json,Jmeter 都会为我增加线程和路径组合执行。

我做了两个实验。

  • 实验一:csv数据集配置
    添加如下所示的 csv 配置
thread_count,voice
1,path_1
2,path_1
1,path_2
2,path_2

然后添加线程组,指定

number of threads
=
${thread_count}

但是不工作,甚至根本不运行。 csv配置中的

sharing mode
之类的属性似乎表明它不能用于控制线程。

  • 实验 2:foreach 控制器

thread group下,添加一个JSR223 Sampler,代码如下:

vars.put("thread_count_1","1");
vars.put("thread_count_2","2");
vars.put("path_1","path_1");
vars.put("path_2","path_2");

添加 foreach 控制器,导出

thread_count
变量,然后添加一个嵌套的 foreach 控制器,导出
path
变量。 仍然无效,foreach 控制器导出的变量无法控制线程数。

有人可以建议如何使用 jemter 的内置机制来完成我的测试线程安排吗?

jmeter performance-testing jmeter-5.0
2个回答
1
投票
  1. 您不能使用 CSV 数据集配置来控制 current 线程组中的线程数,因为线程组在before 评估 CSV 数据集配置

  2. ForEach Controller 可能是一个可行的选择,假设您:

    • 放在setUp线程组

    • Convert JMeter Variables into JMeter Properties to wit:

      props.put("thread_count_1","1");
      props.put("path_1","path_1");
      

    然后使用__P()函数读取您选择的线程组中的属性值

  3. 您可能需要考虑直接从 JSR23 测试元素启动线程的选项,例如:

    ctx.getThreadGroup().addNewThread(0,ctx.getEngine())
    

0
投票

如果您正在寻找一种方法来设置线程组计数 - 那么您应该使用属性函数而不是变量函数。

然后像下面这样在线程组元素中传递变量

然后您可以使用 -J 选项覆盖变量的值,例如

-Jthreadgroup1=1 Jthreadgroup1=2 Jthreadgroup1=3

© www.soinside.com 2019 - 2024. All rights reserved.