如何让JMeter中Thread1执行完控制器所有取样器后再启动Thread2
JMeter线程顺序执行配置方案
你的需求是让线程组内的线程依次完整执行Login→permission→logout事务流程,即前一个线程完成所有取样器后,下一个线程才启动。可以通过以下两种方式实现:
方法一:使用临界区控制器(推荐,无需脚本)
- 在原有线程组下添加临界区控制器(Critical Section Controller)
- 将包含三个取样器的事务控制器,整体移动到临界区控制器内部
- 保持临界区控制器默认配置即可
临界区控制器会保证同一时间只有一个线程进入执行,因此每个线程都会完整跑完整个事务流程后,下一个线程才会启动执行,完全符合预期顺序。
方法二:通过BeanShell脚本控制线程执行顺序
如果需要更灵活的控制逻辑,可以用脚本实现:
- 在事务控制器的最前端添加BeanShell PreProcessor,插入以下代码:
int threadNum = ctx.getThreadNum(); int finishedThreads = Integer.parseInt(vars.get("finishedThreads") == null ? "0" : vars.get("finishedThreads")); while (threadNum > finishedThreads) { Thread.sleep(1000); finishedThreads = Integer.parseInt(vars.get("finishedThreads") == null ? "0" : vars.get("finishedThreads")); } - 在事务控制器的最后一个取样器(logout)下方添加BeanShell PostProcessor,插入以下代码:
int threadNum = ctx.getThreadNum(); vars.put("finishedThreads", String.valueOf(threadNum + 1)); - 在线程组配置中勾选**“延迟创建线程直到需要”**
该脚本通过全局变量记录已完成的线程数,让后续线程等待前序线程执行完成后再启动。
内容的提问来源于stack exchange,提问作者Moni
相关产品推荐
相关产品推荐

