Gatling带峰值负载模型:如何实现周期性高低负载切换测试
Gatling交替高低负载测试实现方案
完全可以实现,你可以通过Gatling自带的负载注入DSL快速实现该高低负载交替的测试场景。
实现思路
- 核心使用Gatling的
constantUsersPerSec(控制每秒新增用户数)或incrementConcurrentUsers(控制并发用户数)注入器控制负载量级 - 把「低负载运行 + 高负载运行」作为1个完整周期,循环执行直到总时长达到1小时
- 下述实现默认单段低负载、单段高负载的持续时长均为1分钟,可根据实际需求调整参数
完整实现代码示例(每秒新增用户数模式)
import io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.duration._ class AlternatingLoadTest extends Simulation { // 替换为你的测试目标HTTP配置 val httpProtocol = http .baseUrl("https://你的测试服务地址") .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") .acceptEncodingHeader("gzip, deflate") .userAgentHeader("Gatling Test Client") // 替换为你的实际业务测试场景 val testScenario = scenario("高低负载交替测试") .exec( http("测试请求") .get("/test/path") .check(status.is(200)) ) // 可自定义请求间隔 .pause(2.seconds) // 负载参数配置 val lowLoadPerSec = 3 // 低负载每秒新增用户数 val highLoadPerSec = 10 // 高负载每秒新增用户数 val singleStageDuration = 1.minute // 单段负载(低/高)持续时长 val totalTestDuration = 1.hour // 测试总时长 // 计算需要循环的周期数:总时长 / (低负载时长+高负载时长) val cycleNumber = (totalTestDuration.toSeconds / (singleStageDuration.toSeconds * 2)).toInt setUp( testScenario.inject( // 平铺所有周期的负载配置 List.fill(cycleNumber)( List( constantUsersPerSec(lowLoadPerSec) during singleStageDuration, constantUsersPerSec(highLoadPerSec) during singleStageDuration ) ).flatten ) ).protocols(httpProtocol) }
并发用户数模式实现(可选)
如果你需要的是并发用户总量稳定在3/10,而非每秒新增指定用户数,可将注入逻辑替换为以下内容:
setUp( testScenario.inject( List.fill(cycleNumber)( List( // 提升到低负载并发量 incrementConcurrentUsers(lowLoadPerSec) times 1 separatedBy 0.seconds, // 保持低负载 nothingFor(singleStageDuration), // 提升到高负载并发量 incrementConcurrentUsers(highLoadPerSec - lowLoadPerSec) times 1 separatedBy 0.seconds, // 保持高负载 nothingFor(singleStageDuration), // 清空当前周期的并发用户,进入下一轮 incrementConcurrentUsers(-highLoadPerSec) times 1 separatedBy 0.seconds ) ).flatten ) ).protocols(httpProtocol)
参数调整说明
- 若需要调整两次高负载之间的低负载运行时长,只需修改低负载段的
during/nothingFor参数,同时对应调整cycleNumber的计算逻辑即可 - 可直接修改
lowLoadPerSec、highLoadPerSec等参数适配其他负载量级的测试需求
内容的提问来源于stack exchange,提问作者Magnus Jensen
相关产品推荐
相关产品推荐

