使用 k6 进行性能测试的开放模型和闭合模型

发布: (2026年2月24日 GMT+8 08:35)
6 分钟阅读
原文: Dev.to

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 课程!

K6 性能测试 ✨

0 浏览
Back to Blog

相关文章

阅读更多 »

小事,大影响

!尾随逗号示例https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s...