使用NBomber进行压测

NBomber提供了开环模型(控制请求到达速率)和闭环模型(控制并发用户数)两种负载仿真模式,并对应了多种具体的模拟方式。以下是对其核心方式和示例代码的总结:

📊 负载模型对比

为了让你快速了解两种核心模型的差异,我将它们的主要特性和适用场景总结如下表:

特性 开环模型 闭环模型
核心控制 控制请求到达的速率 控制并发虚拟用户的数量
行为特征 新请求持续到达,不关心系统当前处理的请求数 系统达到最大并发容量后,新用户需要排队等待
虚拟用户类型 短生命周期(执行一次后销毁) 长生命周期(在指定周期内持续循环执行)
适用场景 新闻网站、搜索引擎、CDN(请求独立、无状态) 电商、银行、GitHub等需要事务性流程(登录→操作→支付)的应用
选择建议 如果不确定,从闭环模型开始通常是更安全的选择

🔧 具体模拟方式与代码示例

根据你选择的模型,NBomber提供了不同的模拟方法。以下是每种方式的关键点与对应的C#代码示例:

开环模型(控制速率)

此类模拟会按照设定的时间间隔注入虚拟用户,每个用户只执行一次。

  1. Inject(固定速率注入)

    • 作用:在整个持续时间内,保持恒定的请求注入速率。
    • 示例代码:模拟每秒注入50个请求,持续30秒。
    Simulation.Inject(rate: 50, 
                      interval: TimeSpan.FromSeconds(1),
                      during: TimeSpan.FromSeconds(30))
    
  2. RampingInject(渐进速率注入)

    • 作用:在指定时间内,将注入速率从一个值平滑地增加或减少到另一个值。
    • 示例代码:前30秒将速率从0逐渐提升至50/秒,后30秒再从50降至20/秒。
    Simulation.RampingInject(rate: 50, during: TimeSpan.FromSeconds(30)),
    Simulation.RampingInject(rate: 20, during: TimeSpan.FromSeconds(30))
    

闭环模型(控制并发数)

此类模拟会创建并维持指定数量的“长运行”虚拟用户,它们在测试期间持续活动并循环执行场景步骤。

  1. KeepConstant(保持恒定并发)

    • 作用:在指定持续时间内,创建并保持固定数量的并发用户运行。
    • 示例代码:创建20个并发用户并让其持续运行30秒。
    Simulation.KeepConstant(copies: 20, during: TimeSpan.FromSeconds(30))
    
  2. RampingConstant(渐进并发)

    • 作用:在指定时间内,将并发用户数从一个值平滑地增加或减少到另一个值。
    • 示例代码:经典的压力测试“坡道”模式:30秒内用户数从0升至50,保持50用户运行30秒,最后30秒内从50降至0。
    Simulation.RampingConstant(copies: 50, during: TimeSpan.FromSeconds(30)),
    Simulation.KeepConstant(copies: 50, during: TimeSpan.FromSeconds(30)),
    Simulation.RampingConstant(copies: 0, during: TimeSpan.FromSeconds(30))
    
  3. IterationsForConstant(固定迭代次数)

    • 作用:启动固定数量的并发用户,并让它们持续执行,直到整个测试完成指定的总迭代次数
    • 特别提醒:此模拟不能与其他任何模拟类型混合使用。
    • 示例代码:启动100个并发用户,共同完成总计1000次迭代后停止。
    Simulation.IterationsForConstant(copies: 100, iterations: 1000)
    

💡 如何选择与使用建议

  • 模型选择:对于大多数需要模拟用户操作流程(如登录、浏览、下单)的Web应用、API服务,闭环模型更符合真实情况。开环模型则适用于模拟类似消息队列、独立API调用等无状态的、持续到达的请求流。
  • 组合使用:你可以在一次测试中组合多种模拟IterationsForConstant除外),来创建复杂的负载曲线,例如上文提到的“ ramp up - 保持 - ramp down”模式。
  • 混合测试:NBomber支持在单个测试中并行运行使用不同模型(开环和闭环)的场景,这非常有利于模拟真实世界中混合的流量模式。

希望这份总结能帮助你快速上手NBomber的负载仿真功能!如果你正在测试一个具体的系统,需要关于如何选择模型或组合模拟的建议,我很乐意提供更具体的思路。

https://nbomber.com/docs/getting-started/overview/
https://nbomber.com/docs/nbomber/load-simulation

posted @ 2026-01-16 17:13  流年灬似氺  阅读(1)  评论(0)    收藏  举报