如何在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
相关产品推荐
相关产品推荐

