当前位置: 首页 > 测试知识 > 软件测试Gatling负载模型:rampUsers、constantUsersPerSec、nothingFor的用法
软件测试Gatling负载模型:rampUsers、constantUsersPerSec、nothingFor的用法
2025-12-10 作者cwb 浏览次数38

Gatling负载模型通过inject方法定义,rampUsers、constantUsersPerSec和nothingFor是构建这些模型的基础分别代表了线性增长、恒定压力和控制延迟三种基本负载模式。


1. rampUsers

rampUsers用于在指定的时间段内,将总用户数从0线性增加到目标值。每个用户只会在整个测试中被启动一次,执行完其场景后退出。

行为:用户启动速率是恒定的。例如,rampUsers(100) during (50 seconds)意味着平均每0.5秒启动一个用户(100用户 / 50秒),持续50秒。50秒后,所有100个用户都已被启动,之后不再有新的用户加入。

用途:这是最常用的模型之一,用于系统热身或模拟负载平缓上升的阶段,避免在测试开始时对系统产生瞬时冲击。它通常作为多阶段测试的起始阶段。


2. constantUsersPerSec

constantUsersPerSec用于在整个持续时间内,维持一个恒定的每秒用户到达速率。即无论系统响应快慢,都按照固定节奏尝试启动新用户。

行为:该注入器会持续不断地尝试在每一秒内启动指定数量的用户。例如,constantUsersPerSec(20) during (1 minute)会尝试在1分钟内,每秒都启动20个用户。如果单个用户场景的执行时间很长,系统内的活跃用户数(并发数)会持续累积增长。

用途:模拟一个稳定的、持续的用户访问流量,常用于压力测试的“稳定期”,用于评估系统在恒定压力下的性能表现、资源消耗和稳定性。


3. nothingFor

nothingFor是一个控制性指令,用于在注入策略中插入一段绝对的空闲期,在此期间不启动任何新用户。

行为:纯粹地等待。例如,nothingFor(30 seconds)会让Gatling在运行到此时暂停30秒,然后再执行后续的注入步骤。

用途:主要用于分隔不同的负载阶段,或者用于在测试开始后、正式施压前,等待一个特定的外部条件(如等待缓存预热、等待另一系统就绪)。


区别:rampUsers和rampUsersPerSec

一个常见的混淆点在于rampUsers和另一个方法rampUsersPerSec的区别:

rampUsers(totalUsers) during (duration):控制的是总用户数。它关心的是“在给定时间内,总共启动多少个用户”。用户到达速率是计算得出的(总用户数/时间)。

rampUsersPerSec(rate1) to (rate2) during (duration):控制的是用户到达速率的变化。它关心的是“用户到达速率如何从A点变化到B点”。例如,rampUsersPerSec(1) to (10) during (1 minute) 表示在1分钟内,每秒启动的用户数从1个线性增加到10个。


组合应用

在实际的复杂测试中,这三个基础方法几乎总是被组合使用,来模拟真实的用户访问模式。下面是一个模拟“系统上线后用户逐渐涌入、形成稳定访问、最后经历峰值冲击”的示例:


scala

import io.gatling.core.Predef._

import scala.concurrent.duration._


setUp(

  myScenario.inject(

    // 阶段1:初始延迟,等待监控就绪

    nothingFor(5 seconds),

    // 阶段2:在2分钟内,逐步增加100个用户(热身期)

    rampUsers(100) during (2 minutes),

    // 阶段3:保持每秒5个用户的稳定到达率,持续5分钟(稳定期)

    constantUsersPerSec(5) during (5 minutes),

    // 阶段4:在30秒内,再快速增加500个用户(峰值冲击)

    rampUsers(500) during (30 seconds),

    // 阶段5:峰值后,继续保持较高但稳定的压力10秒

    constantUsersPerSec(20) during (10 seconds)

  )

)


rampUsers控制总量的线性增长,constantUsersPerSec控制恒定的到达流量,而nothingFor控制阶段间的节奏。


文章标签: 软件测试 测试工具 负载测试 软件负载测试
咨询软件测试