Gatling 基础

Gatling 基于 Scala DSL 描述场景:scenario 与注入剖面(rampUsers、constantUsersPerSec)、check 校验、内建 HTML 报告;适合需要细腻注入曲线的 JVM 团队。

软件测试速查开发更新于 2026-10-13

Gatling 基础是什么

Gatling 是基于 JVM(Scala DSL)的开源负载测试工具:用 scenario 描述用户行为链,用注入剖面(injection profile)声明负载模型,配合 check 校验响应,运行后生成带分位数与失败分类的 HTML 报告。适合需要细腻注入曲线、且团队熟悉 JVM 生态的场景。

基本信息

描述语言Scala DSL:scenario、exec、check
负载模型注入剖面:atOnceUsers、rampUsers、constantUsersPerSec 等
校验check:状态码、响应时间、内容断言
全局断言setUp 里配置 assertions,如全局 p95 超过阈值即判定失败
报告内建 HTML 报告,含分位与失败分类
数据驱动feeder 注入参数化数据
运行方式命令行脚本或构建插件启动仿真
协议配置httpProtocol 集中配置 baseUrl 与公共头

最小场景示例

最小场景示例
val scn = scenario("ping")
  .exec(http("ping").get("/api/ping").check(status.is(200)))

setUp(
  scn.inject(rampUsers(50).during(60))
).protocols(httpProtocol)

// rampUsers:60 秒内逐步增加到 50 用户,避免起步冲击失真

典型使用场景

  • 接口压测:为关键接口设计场景与注入剖面。
  • 容量规划:用阶梯注入观察吞吐与延迟拐点。
  • 回归基线:固定剖面重复执行,对比分位数变化。
  • 失败分类分析:借助报告区分连接失败、超时与断言失败。
  • 持续集成:把短剖面接入流水线做冒烟压测。
  • 团队培训:用 Scala DSL 理解场景与负载模型的关系。

注入方法对照

注入方法含义适用
atOnceUsers立即启动指定用户数峰值冲击类验证
rampUsers持续时间内线性增加到指定用户数常规爬坡
constantUsersPerSec恒定每秒新增用户稳定到达率模型
rampUsersPerSec每秒用户数线性变化渐进加压找拐点
heavisideUsers按阶跃方式逐级增加用户简单阶梯加压
注入剖面是负载模型的声明式表达:选定剖面就等于选定了测量模型,模型差异要认真对待。
报告默认给分位与失败分类:结论以分位数和失败分类为准,别只看平均值。
feeder 的数据文件要版本化:压测数据变化会让两次结果失去可比性。
仿真即代码:场景、剖面、断言一起进版本库,发版前跑固定剖面,基线对比才有依据。
写操作场景提前准备专用数据并保证可重复:多轮压测互相干扰会掩盖真实问题。

易错点

  • 只看运行不看报告中的分位与失败分类,结论粗糙:先读报告再下结论。
  • 注入剖面与真实流量形态差异大,容量结论不可用:按线上到达率与峰值设计剖面。
  • 忽略压测机自身资源:JVM 侧 GC 与网络先饱和时,测不到被测系统的极限。
  • check 缺失:只有数字没有断言,接口返回错误也不易发现。

数据来源与参考

  • Gatling 官方文档(gatling.io/docs)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌