K6测试中iterations与vus含义、配置规则及场景参数设置疑问
K6 vus与iterations参数常见问题解答
1. 两个参数的明确定义
vus:虚拟用户数,即同时并发执行测试脚本的独立用户数量,每个VU会独立循环执行default函数中的逻辑,直到测试终止条件被触发,你之前的理解是正确的。iterations:全局总迭代次数,指整个测试生命周期内,所有VU总共需要执行default函数的次数,注意这是所有VU共享的总次数,不是单个VU的执行次数。
2. 你当前的配置是否正确?是否需要保留iterations?
你的测试目标是100个用户持续访问5分钟,当前配置是错误的。
K6中如果同时配置了duration和iterations,会遵循“先触发先终止”的规则:要么跑满指定时长,要么跑完指定总迭代数,哪个先满足测试就立刻停止。你当前配置iterations:20,总迭代数只有20次,远小于100个VU的数量,测试启动后20个VU各执行1次请求就会结束,全程只有几秒,完全达不到跑满5分钟的目标。
你的场景不需要配置iterations,仅保留vus:100和duration:'300s'即可满足需求,正确配置如下:
import http from 'k6/http'; export let options = { vus: 100, duration: '300s' }; export default function () { http.get('https://test.k6.io/contacts.php'); }
iterations参数仅用于固定总执行次数的场景,比如你需要验证“总共跑1万次接口请求的性能表现,不管耗时多久”,这类场景才需要配置iterations,通常和duration二选一使用即可。
3. 不同iterations配置的效果差异
首先解释为什么iterations不建议小于vus:当总迭代数小于VU数量时,必然有部分VU没有机会被调度执行任何请求,你设置的并发数完全无法生效,既浪费资源,测试结果也没有参考价值。
不同配置的具体效果:
iterations:20:总迭代只有20次,仅20个VU各执行1次请求,剩下80个VU全程闲置,测试瞬间结束,完全达不到100并发持续压测5分钟的目标。iterations:100:总迭代100次,刚好每个VU各执行1次请求,执行完测试就终止,依然只能跑几秒,和持续压测的需求不符。iterations:1000:总迭代1000次,平均每个VU执行10次,假设单接口响应耗时100ms,10次请求也仅需1秒多,测试还是会在几秒内结束,跑不满5分钟。- 移除iterations配置:测试会完全按照duration规则执行,100个VU会持续循环执行请求,整整跑满300秒,刚好匹配你的测试目标。
内容的提问来源于stack exchange,提问作者Đình Bình
相关产品推荐
相关产品推荐

