我的性能测试需要线程数和数据的正交组合。比如我要测试
/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 都会为我增加线程和路径组合执行。
我做了两个实验。
thread_count,voice
1,path_1
2,path_1
1,path_2
2,path_2
然后添加线程组,指定
number of threads
= ${thread_count}
但是不工作,甚至根本不运行。 csv配置中的
sharing mode
之类的属性似乎表明它不能用于控制线程。
在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 的内置机制来完成我的测试线程安排吗?
您不能使用 CSV 数据集配置来控制 current 线程组中的线程数,因为线程组在before 评估 CSV 数据集配置
ForEach Controller 可能是一个可行的选择,假设您:
放在setUp线程组
Convert JMeter Variables into JMeter Properties to wit:
props.put("thread_count_1","1");
props.put("path_1","path_1");
然后使用__P()函数读取您选择的线程组中的属性值
您可能需要考虑直接从 JSR23 测试元素启动线程的选项,例如:
ctx.getThreadGroup().addNewThread(0,ctx.getEngine())