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 的数据文件要版本化:压测数据变化会让两次结果失去可比性。
仿真即代码:场景、剖面、断言一起进版本库,发版前跑固定剖面,基线对比才有依据。
写操作场景提前准备专用数据并保证可重复:多轮压测互相干扰会掩盖真实问题。