JMeter中如何通过不同模块控制器触发测试片段内对应if条件的HTTP请求


JMeter测试片段按调用条件执行分支解决方案
你遇到的变量全局覆盖问题,核心是之前用的配置元件/监听器设置的变量都是全局生效,或者初始化阶段就固定了,改用线程级变量+Groovy条件的If控制器即可解决,具体操作步骤如下:
- 步骤1:给不同模块调用逻辑设置独立线程级变量
在调用END模块的链路前添加JSR223预处理程序,输入代码:vars.put("exec_flag", "END")
在调用START模块的链路前添加JSR223预处理程序,输入代码:vars.put("exec_flag", "START")
内置对象vars存储的变量仅对当前线程生效,不同线程、同线程不同调用阶段设置的变量不会互相覆盖,完全避免全局更新问题。 - 步骤2:测试片段内配置条件分支
在测试片段下新增两个If控制器,分别对应END和START的执行逻辑:- END分支If控制器:条件填写
"END".equals(vars.get("exec_flag")),勾选*将条件解释为变量表达式(使用Groovy)*选项,将END逻辑对应的所有HTTP请求放到该控制器下 - START分支If控制器:条件填写
"START".equals(vars.get("exec_flag")),同样勾选Groovy表达式选项,将START逻辑对应的所有HTTP请求放到该控制器下
- END分支If控制器:条件填写
注意事项
- 不要使用用户自定义变量配置元件传递标识,该类元件在测试计划启动阶段就完成全局初始化,无法随调用逻辑动态更新
- JSR223组件优先选择Groovy语言,执行效率远高于BeanShell,不会拖慢测试性能
内容的提问来源于stack exchange,提问作者deep kiran
相关产品推荐
相关产品推荐

