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

如何在k6中按指定时长与请求量执行多阶段接口请求?

如何在k6中按指定时长与请求量执行多阶段接口请求?

Hey,这个需求刚好可以用k6的**场景(scenarios)**功能来实现,它能让你独立控制不同接口的负载规则,完美匹配你要的“分阶段+指定请求数+时间重叠”的需求。

核心思路是定义两个独立的场景,分别对应你的两个接口:

  • 第一个场景:持续60秒,总共发送100次请求到第一个接口;
  • 第二个场景:延迟30秒启动,持续30秒,总共发送150次请求到第二个接口。

下面是完整的可运行脚本示例,你只需要替换成自己的接口地址即可:

import http from 'k6/http';
import { sleep } from 'k6';

export const options = {
  scenarios: {
    first_endpoint_traffic: {
      executor: 'constant-arrival-rate', // 用固定请求速率执行器,精准控制总请求数
      rate: 100/60, // 每秒请求数:100请求 ÷ 60秒 ≈ 1.67
      timeUnit: '1s',
      duration: '60s', // 第一个接口的请求持续时长
      preAllocatedVUs: 5, // 预分配并发用户数,确保能承载请求速率
      maxVUs: 10, // 最大并发用户数,应对突发请求
      exec: 'hitFirstEndpoint', // 指定执行第一个接口的请求函数
    },
    second_endpoint_traffic: {
      executor: 'constant-arrival-rate',
      rate: 150/30, // 每秒请求数:150请求 ÷ 30秒 = 5
      timeUnit: '1s',
      startTime: '30s', // 延迟30秒启动第二个接口的请求
      duration: '30s', // 第二个接口的请求持续时长
      preAllocatedVUs: 10,
      maxVUs: 20,
      exec: 'hitSecondEndpoint', // 指定执行第二个接口的请求函数
    },
  },
};

// 第一个接口的请求逻辑
export function hitFirstEndpoint() {
  http.get('https://your-first-endpoint.com'); // 替换为你的第一个接口URL
  sleep(0.1); // 可选的小延迟,根据接口响应情况调整
}

// 第二个接口的请求逻辑
export function hitSecondEndpoint() {
  http.get('https://your-second-endpoint.com'); // 替换为你的第二个接口URL
  sleep(0.1);
}

关键参数说明

  • constant-arrival-rate:这个执行器会严格按照设定的速率发送请求,能保证总请求数刚好符合你的要求(速率×时长=总请求数),比按并发用户数控制更精准。
  • startTime:给第二个场景设置30秒延迟,刚好在第一个场景运行到第30秒时启动,完美契合你“30秒后开始打第二个接口”的需求。
  • preAllocatedVUs 和 maxVUs:预分配足够的并发用户数,避免因为并发不足导致请求发送不及时,你可以根据接口的实际响应时间调整这两个值(如果接口响应慢,就适当调大)。

额外提示

如果你的接口是POST/PUT等其他方法,直接把http.get换成对应的http.post/http.put即可,记得传入请求体、请求头等必要参数。

备注:内容来源于stack exchange,提问作者Starbucks Admin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:29:12