K6是否支持串行运行带依赖的场景及场景间数据传递?
K6 依赖串行场景实现及单API独立统计方案
- K6 没有原生的场景间依赖调度能力,你查到的
startTime配置仅能实现近似串行:本质是手动给后序场景设置足够靠后的启动时间,等待前序场景跑完再启动,既不能自动感知前序场景的实际运行完成状态,也不支持直接在场景配置层面传递前序场景的输出数据,一旦前序场景运行超时,后序场景仍会按预设时间启动,可靠性没法保证。 - 要实现严格串行+前序输出作为后序输入,有两种可落地的方式:
- 利用K6内置生命周期做流程控制:把依赖前置的逻辑放在
setup()阶段执行,这个阶段的代码会在所有VU、所有业务场景启动前完整运行,执行完成后的返回值会作为固定参数透传给后续所有场景的执行逻辑,天然保证执行顺序,不需要手动算时间差。 - 拆分多脚本做外层调度:把每个测试逻辑拆成独立的K6执行脚本,通过shell命令、CI流水线步骤做串行调度,前一个脚本执行完成后把需要传递的输出写入临时文件或者环境变量,作为入参传给下一个脚本,这种方式各测试逻辑完全隔离,不会出现指标混算的问题。
- 利用K6内置生命周期做流程控制:把依赖前置的逻辑放在
- 针对你要获取每个API独立测试汇总结果的核心诉求,不需要硬拆独立场景,用K6原生的分组+标签能力就能实现:
对每个API的请求逻辑用group()函数做包裹,同时给请求打上独立的名称标签,K6最终输出统计报告时,会自动按分组、标签拆分统计维度,单独展示每个API的请求成功率、响应时间分位值、吞吐量等全量汇总指标。
参考实现代码如下:
import http from 'k6/http'; import { group } from 'k6'; export default function () { // 第一个接口:获取鉴权token,独立统计 group('get_auth_token', function () { const tokenResp = http.get('https://test.example.com/getToken', { tags: { api: 'get_auth_token' } }); // 存储返回值供后续依赖接口调用 this.token = tokenResp.json('data.token'); }); // 第二个接口:查询用户信息,依赖上一个接口返回的token,独立统计 group('get_user_info', function () { http.get('https://test.example.com/user/info', { headers: { Authorization: `Bearer ${this.token}` }, tags: { api: 'get_user_info' } }); }); }
执行上述脚本后,输出的统计结果会单独列出两个分组的所有指标数据,既满足了接口间的依赖传参、串行调用需求,也能拿到每个API独立的测试汇总结果,比靠startTime凑场景串行的方案稳定很多。
内容的提问来源于stack exchange,提问作者Vipin Menon
相关产品推荐
相关产品推荐

