多线程组场景下通过JMeter启动STS失效问题求助
多线程组场景下JMeter启动Simple Table Server(STS)的正确方案
核心问题分析
你遇到的问题本质是STS只能启动一个实例(默认占用9191端口),如果多个线程组同时执行启动命令,会触发端口占用冲突,最终只有一个实例能正常运行,其余线程组无法连接。
正确实现步骤
- 添加setUp Thread Group(测试计划右键→添加→线程(用户)→setUp Thread Group),这个线程组会在所有普通线程组启动前仅执行一次,是做全局初始化操作的最优选择。
- 在setUp Thread Group下添加JSR223采样器,写入带端口检查的启动代码,避免重复启动:
// 检查STS默认端口9191是否已被占用 def port = 9191 def socket = new Socket() try { socket.connect(new InetSocketAddress("localhost", port), 1000) socket.close() log.info("STS already running on port ${port}") } catch (ConnectException e) { // 端口未占用,启动STS def cmd = "C:/Windows/System32/cmd.exe /c start C:/jmeter/bin/simple-table-server.cmd" Runtime.getRuntime().exec(cmd) log.info("Started STS successfully") // 等待STS启动完成,可根据机器性能调整等待时长 sleep(3000) }
- 所有普通线程组直接使用STS即可,无需再单独执行启动逻辑。
额外优化建议
- 如果需要测试结束后自动关闭STS,可添加tearDown Thread Group,在其中执行关闭命令:
// 关闭STS进程 Runtime.getRuntime().exec("taskkill /f /im java.exe /fi \"windowtitle eq SimpleTableServer\"")
- 确认JMeter的bin目录下存在
simple-table-server.cmd文件,路径配置要准确。 - 等待STS启动的时间可根据实际机器性能调整,避免普通线程组启动时STS还未就绪。
内容的提问来源于stack exchange,提问作者Hasel
相关产品推荐
相关产品推荐

