JMeter如何并发运行两个线程组?认证与REST API协同测试方案
JMeter多线程组并行认证与API调用实现方案
一、实现认证线程组与API线程组并行执行的方法
- 调整线程组运行模式:
- 打开测试计划设置,勾选「Run Thread Groups Concurrently」,让两个线程组能同时启动运行。
- 认证线程组配置:
- 线程数设为1,循环次数选「永远」(或者根据token过期周期设置足够多的循环数)。
- 在Flow Control Action里设置延迟时间,比如token有效期1小时,就设3500秒(提前100秒刷新),确保token过期前能拿到新的。
- REST API线程组配置:
- 按测试需求设置线程数和循环次数就行,不用加额外延迟,它会自动用Inter Thread Communicator传递的最新token。
- 优化token传递逻辑:
- 把Inter Thread Communicator的「Share Mode」设为「All Thread Groups」,用唯一变量名(比如
current_access_token)存token。 - 在API线程组的HTTP请求头管理器里,直接写
Authorization: Bearer ${current_access_token},每次请求都会自动取最新的token值。
- 把Inter Thread Communicator的「Share Mode」设为「All Thread Groups」,用唯一变量名(比如
二、REST API认证的替代解决方案
- Cookie会话保持:如果API支持cookie认证,用HTTP Cookie Manager自动保存认证后的会话凭证,后续API请求直接复用,不用手动传token。
- 预生成批量token:要是token有效期长,提前生成一批有效token,用CSV Data Set Config加载到API线程组,每个线程用独立token,省掉频繁刷新的麻烦。
- JSR223元件自动刷新token:不用单独的认证线程组,在API请求前加JSR223 PreProcessor,检查token是否快过期,过期就自动刷新。示例代码:
def tokenExpiry = vars.get("token_expiry") as long def currentTime = System.currentTimeMillis() / 1000 // 提前5分钟刷新token if (!tokenExpiry || currentTime > tokenExpiry - 300) { // 构造刷新token的请求 def refreshSampler = new org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy() refreshSampler.setDomain("你的认证域名") refreshSampler.setPath("/refresh-token") refreshSampler.setMethod("POST") refreshSampler.addArgument("refresh_token", vars.get("refresh_token")) // 执行请求并获取响应 def response = ctx.getSamplerContext().getSampler().sample(refreshSampler) def json = new groovy.json.JsonSlurper().parseText(response.getResponseDataAsString()) // 更新token和过期时间变量 vars.put("current_access_token", json.access_token) vars.put("token_expiry", (currentTime + json.expires_in).toString()) } - Token Storage插件管理:用第三方插件统一管理token生命周期,自动处理刷新和分发,减少手动配置的工作量。
内容的提问来源于stack exchange,提问作者Akhil Vasudevan
相关产品推荐
相关产品推荐

