使用 k6 进行性能测试的开放模型和闭合模型
Source: Dev.to
请提供您想要翻译的文章正文内容(除代码块和 URL 之外),我将把它翻译成简体中文并保持原有的 Markdown 格式。谢谢!
Source: …
基本概念
在性能测试中,模型定义了 系统在执行周期内如何控制虚拟用户(VUs)的到达和离开。
- 闭模型 – VU 的数量是固定的。每个 VU 只有在前一次迭代结束后才会启动下一次迭代。并发度保持不变。
- 开模型 – 新的 VU 以恒定速率到达,独立于已激活的 VU 正在做什么。这种行为更接近真实系统的情况,用户会持续不断地到达。
模型的选择会彻底改变计划测试的语义。在某些场景下,我们希望控制同时活跃的用户数量;而在另一些场景下,我们希望确保保持一定的请求速率(RPS),不论实现该速率需要多少用户。
封闭模型
脚本示例
export const options = {
scenarios: {
modelo_fechado: {
executor: 'constant-vus',
vus: 50,
duration: '1m',
},
},
};
export default function () {
// sua lógica de teste
}
后果: 如果系统变慢,请求速率会自动下降,因为 VU 必须等待响应后才会开始新一次迭代。活跃用户池永远不会超过配置的上限。
何时使用
- 企业内部应用 – 固定的员工组同时访问系统。
- 受控会话系统 – 例如对每个账号有连接数限制的流媒体平台。
- 耐久性测试(Soak Tests) – 目标是在长时间内保持恒定负载,并观察系统随时间的表现。
可用执行器(封闭模型)
| Executor | 描述 |
|---|---|
constant-vus | 在整个测试期间保持固定数量的 VU。 |
ramping-vus | 逐步增加或减少 VU 的数量。 |
per-vu-iterations | 每个 VU 执行固定次数的迭代。 |
shared-iterations | 一个 VU 池共享固定总次数的迭代。 |
开放模型
脚本示例
export const options = {
scenarios: {
modelo_aberto: {
executor: 'constant-arrival-rate',
rate: 100, // 100 VUs por unidade de tempo
timeUnit: '1s',
duration: '1m',
preAllocatedVUs: 50, // VUs pré‑alocadas antes do início
maxVUs: 200, // número máximo de VUs que podem ser criados
},
},
};
export default function () {
// sua lógica de teste
}
行为: 如果系统变慢,k6 将需要更多 VU 来保持配置的速率。
何时使用
- 公共 REST API – 多个客户端持续发起请求。
- 电子商务和网站门户 – 用户独立到达。
- 峰值测试(Spike Tests) – 模拟流量的突发性和强度增加。
- 容量测试(Capacity Tests) – 了解系统在降级前每秒能承受多少请求。
可用执行器(开放模型)
| Executor | 描述 |
|---|---|
constant-arrival-rate | 保持每时间单位固定的迭代速率。 |
ramping-arrival-rate | 逐步增加或减少到达速率。 |
简要比较
| 特性 | 封闭模型 | 开放模型 |
|---|---|---|
| 受控对象 | 虚拟用户数 (VUs) | 迭代到达率 |
| 在慢速情况下的行为 | 请求率下降 | 为保持速率,虚拟用户数增加 |
| 逼真度 | 较低(适用于受控环境) | 较高,适用于有自然流量的 Web 系统 |
| 测试类型 | 冒烟、浸泡、负载、压力 | 负载、突发、容量 |
| k6 执行器 | constant-vus, ramping-vus, … | constant-arrival-rate, ramping-arrival-rate |
选择模型时的注意事项
许多团队仍然使用 闭式模型 来进行 所有 测试,因为它是默认设置且最容易配置。在拥有自然流量的 Web 系统中,这可能会掩盖严重的性能问题。
示例场景:
- 系统因负载过高开始响应缓慢。
- 闭式模型: 虚拟用户(VUs)等待响应,请求率会自动下降,减轻对应用的压力,产生一种错误的稳定印象。
- 开式模型: 新用户继续以配置的速率到达,暴露出应用的真实降级情况。
// Modelo fechado: a taxa de requisições cai quando o sistema fica lento
executor: 'constant-vus', vus: 100
// Modelo aberto: a pressão é mantida, e o sistema é exposto
executor: 'constant-arrival-rate', rate: 100, timeUnit: '1s'
生产系统
当并发用户数量是关键时,使用 封闭 模式;当请求到达率是关键因素时,使用 开放 模式。
喜欢这个内容并想了解更多关于 K6 性能测试的知识吗?
查看我的 Udemy 课程!