如何用Gatling实现先调用API再并发调用另一API(最多5次)?
实现先调用API再并发请求的测试场景
针对你需要先调用一个API,再用其响应结果并发调用另一个API(最多5次)的需求,下面分主流测试工具给出具体实现方案:
一、使用k6实现
k6的脚本原生支持Promise并发,适合快速实现这类场景:
import http from 'k6/http'; import { check } from 'k6'; export default function () { // 1. 调用第一个API并提取响应数据 const firstRes = http.get('https://your-first-api.com/get-data'); check(firstRes, { '第一个API请求成功': r => r.status === 200, }); const firstParam = firstRes.json().targetId; // 根据实际响应结构提取参数 // 2. 构造5个并发请求的Promise数组 const concurrentTasks = []; const maxTimes = 5; for (let i = 0; i < maxTimes; i++) { // 用第一个API的参数构造第二个API的请求 concurrentTasks.push( http.get(`https://your-second-api.com/do-something?ref=${firstParam}&idx=${i}`) ); } // 3. 等待所有并发请求完成并验证结果 const results = Promise.all(concurrentTasks); results.forEach((res, idx) => { check(res, { `第${idx+1}次并发请求成功`: r => r.status === 200, }); }); }
运行这个脚本时,5个第二个API的请求会同时发起,而非串行执行。
二、使用JMeter实现
JMeter需要借助并行控制器或多线程组来实现并发:
方案1:用Parallel Controller(推荐)
- 添加线程组(线程数设为1,确保第一个API只调用一次)
- 线程组下添加HTTP请求,配置第一个API的地址,完成后用JSON提取器(或正则提取器)把需要的参数存为变量,比如
${target_param} - 线程组下添加Parallel Controller(需通过JMeter插件管理器安装)
- 在Parallel Controller下添加循环控制器,设置循环次数为5
- 循环控制器下添加HTTP请求,配置第二个API地址,使用变量
${target_param}作为请求参数
方案2:用双线程组
- 第一个线程组(线程数1):调用第一个API,用BeanShell后置处理器把参数存到全局属性:
props.put("global_param", vars.get("target_param"));
- 第二个线程组(线程数5):配置第二个API请求,使用全局参数
${__P(global_param,)},并把线程组的“启动延迟”设为0,这样5个线程会同时发起请求
三、使用Postman实现
Postman可以通过脚本在第一个请求完成后并发发送多个请求:
- 在第一个API请求的
Tests标签中,提取响应参数并存入环境变量:
pm.environment.set("ref_id", pm.response.json().id);
- 同样在
Tests标签中,编写并发请求脚本:
const maxCount = 5; const requestList = []; const baseUrl = "https://your-second-api.com/process"; const refId = pm.environment.get("ref_id"); for (let i = 0; i < maxCount; i++) { requestList.push( pm.sendRequest({ url: `${baseUrl}?ref=${refId}&num=${i}`, method: "GET" }) ); } // 等待所有请求完成并打印结果 Promise.all(requestList).then(responses => { responses.forEach((res, idx) => { console.log(`并发请求${idx+1}状态码: ${res.code}`); }); });
运行这个Collection时,第一个API执行完后会立刻并发发送5个第二个API的请求。
内容的提问来源于stack exchange,提问作者serverfaces
相关产品推荐
相关产品推荐

