JMeter技术问询:混合串行并行线程组及动态线程组实现
JMeter测试计划问题解答
1. 单个测试计划中实现部分线程组串行、部分并行
可以实现,核心通过全局属性标记+线程组执行条件控制来达成:
- 测试计划默认不勾选「Run Thread Groups Consecutively」(线程组默认并行),先让创建用户的线程组优先执行
- 在创建用户的线程组末尾添加
JSR223 Sampler,执行代码标记用户创建完成:props.put("userCreated", "true") - 对需要在用户创建后才执行的线程组(如创建org的线程组),添加
Test Action控制器,设置Condition为:${__jexl3(props.get("userCreated") == "true",)} - 需要并行运行的线程组(如发送高并发请求的线程组),同样添加上述
Test Action控制器,它们会在用户创建完成后同时启动,实现部分串行+部分并行的效果。
2. 根据创建的org数量动态定义线程组
可以通过JMeter的Groovy API在运行时动态生成线程组,步骤如下:
- 先在创建org的线程组中,用正则表达式提取器把每个org的标识(如ID)保存为
org_1、org_2这类变量,并将org总数存入全局属性:def orgCount = vars.get("matchNr") // matchNr是正则提取器返回的匹配数量 props.put("orgCount", orgCount) - 添加
JSR223 Sampler,编写Groovy代码动态创建线程组,示例:def orgCount = Integer.parseInt(props.get("orgCount")) def testPlan = ctx.getTestPlan() // 创建动态线程组 def dynamicTG = new org.apache.jmeter.threads.ThreadGroup() dynamicTG.setName("Org Request Thread Group") dynamicTG.setNumThreads(orgCount) // 线程数与org数量一致 dynamicTG.setRampUp(1) // 快速启动所有线程 dynamicTG.setSamplerController(new org.apache.jmeter.control.LoopController()) // 创建请求采样器(以HTTP请求为例) def httpSampler = new org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy() httpSampler.setDomain("你的目标域名") httpSampler.setPath("你的请求路径") httpSampler.setMethod("POST") // 绑定当前线程对应的org ID httpSampler.addArgument("orgId", "${__V(org_${__threadNum})}") // 将采样器添加到线程组控制器 dynamicTG.getSamplerController().addTestElement(httpSampler) // 将动态线程组加入测试计划 testPlan.addThreadGroup(dynamicTG) // 重新配置测试引擎使新线程组生效 ctx.getEngine().configure(testPlan) - 注意:这段代码需在所有org创建完成后执行,确保
orgCount和org_*变量已生成。
跟踪子用户并修改参数值
通过JMeter全局属性存储所有子用户(org)信息,方便后续修改:
- 在创建org的线程组中,将所有org信息存入全局属性的List:
def orgList = [] def count = Integer.parseInt(vars.get("matchNr")) for (int i=1; i<=count; i++) { orgList.add(vars.get("org_" + i)) } props.put("orgList", orgList) - 需要修改参数时,在任意
JSR223 Sampler中读取List并修改对应属性,示例:def orgList = props.get("orgList") // 修改第一个org的自定义参数 props.put("org_1_custom_param", "新值") - 在请求采样器中直接引用修改后的属性即可,如
${__P(org_1_custom_param,)}。
内容的提问来源于stack exchange,提问作者Vaibhav Saxena
相关产品推荐
相关产品推荐

