JMeter中100个线程组统一配置调度器起止时间的方法
自动化配置JMeter所有线程组的调度器时间区间
当然可以!手动给100个线程组挨个配置调度器起止时间确实是个效率极低的活儿,这里有几个实用的自动化方案帮你一次性搞定所有线程组的时间配置:
方案一:使用全局变量统一管理时间
这是最直观的方法,只需定义一次时间,所有线程组自动引用:
- 打开你的测试计划,在测试计划级别添加两个用户自定义变量,比如命名为
start_time和end_time,值分别设为你需要的时间(例:2018/03/20 12:55:15和2018/03/20 13:55:15) - 逐个打开线程组的调度器配置,把「启动时间」和「结束时间」的输入框内容替换为
${start_time}和${end_time} - 后续要修改时间时,只需在测试计划的变量里改一次,所有线程组会自动同步更新。如果需要动态传入时间(比如CI/CD场景),还可以用JMeter属性结合命令行启动:
jmeter -Jstart_time="2018/03/20 12:55:15" -Jend_time="2018/03/20 13:55:15" -n -t your_test_plan.jmx
此时线程组里的时间配置要改成${__P(start_time,)}和${__P(end_time,)},这样就能直接读取命令行传入的属性值。
方案二:用Groovy脚本批量设置线程组调度器
如果已经有100个线程组不想挨个改变量引用,可以用Groovy脚本一键批量配置:
- 在测试计划的最顶层添加一个
JSR223 PreProcessor(确保它在所有线程组之前执行) - 粘贴以下Groovy代码,修改
startTime和endTime的值为你的目标时间:
import org.apache.jmeter.threads.ThreadGroup def startTime = "2018/03/20 12:55:15" def endTime = "2018/03/20 13:55:15" // 遍历测试计划下的所有线程组 ctx.getTestPlan().getTestElementList().each { element -> if (element instanceof ThreadGroup) { ThreadGroup threadGroup = (ThreadGroup) element // 启用调度器 threadGroup.setScheduler(true) // 设置起止时间 threadGroup.setStartTime(startTime) threadGroup.setEndTime(endTime) // 可选:如果需要设置持续时间,取消下面注释(注意:持续时间和结束时间二选一) // threadGroup.setDuration(3600) } }
- 当测试计划加载时,这个脚本会自动遍历所有线程组,启用调度器并设置好指定的起止时间,完全不用手动操作每个线程组。
注意事项
- 确保时间格式和JMeter要求一致:
yyyy/MM/dd HH:mm:ss,格式错误会导致调度器无法正常工作 - 使用Groovy脚本时,JMeter 3.0及以上版本默认支持Groovy,无需额外配置
- 如果线程组嵌套在逻辑控制器下,脚本需要调整遍历逻辑(比如递归查找所有子节点里的线程组),不过一般测试计划的线程组都是直接在测试计划下的,上面的脚本足够用
内容的提问来源于stack exchange,提问作者Sumit Narayan
相关产品推荐
相关产品推荐

