You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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. 添加线程组(线程数设为1,确保第一个API只调用一次)
  2. 线程组下添加HTTP请求,配置第一个API的地址,完成后用JSON提取器(或正则提取器)把需要的参数存为变量,比如${target_param}
  3. 线程组下添加Parallel Controller(需通过JMeter插件管理器安装)
  4. 在Parallel Controller下添加循环控制器,设置循环次数为5
  5. 循环控制器下添加HTTP请求,配置第二个API地址,使用变量${target_param}作为请求参数

方案2:用双线程组

  1. 第一个线程组(线程数1):调用第一个API,用BeanShell后置处理器把参数存到全局属性:
props.put("global_param", vars.get("target_param"));
  1. 第二个线程组(线程数5):配置第二个API请求,使用全局参数${__P(global_param,)},并把线程组的“启动延迟”设为0,这样5个线程会同时发起请求

三、使用Postman实现

Postman可以通过脚本在第一个请求完成后并发发送多个请求:

  1. 在第一个API请求的Tests标签中,提取响应参数并存入环境变量:
pm.environment.set("ref_id", pm.response.json().id);
  1. 同样在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:58:24