Gatling 系列专题(第三篇):编写复杂脚本与模拟真实用户行为
前言
在前两篇中,我们介绍了 Gatling 的背景并完成了安装与初次测试。现在,是时候深入探索它的核心功能——通过脚本模拟真实用户行为。无论是测试登录流程、搜索功能还是下单场景,Gatling 都能帮助你设计贴近现实的测试。本篇将带你从简单请求升级到复杂场景,掌握脚本编写的关键技巧。
脚本基础回顾
Gatling 的测试脚本由三个主要部分组成:
- HTTP 协议配置:定义目标地址、请求头等。
- 场景(Scenario):描述用户行为,如点击、提交表单。
- 负载设置(SetUp):指定用户数量和注入模式。
在第二篇中,我们用一个简单的 GET 请求测试了首页。现在,让我们扩展它,模拟一个完整的用户旅程。
场景设计:模拟用户登录与浏览
假设我们要测试一个电商网站,用户需要登录、浏览商品并查看详情。以下是一个示例脚本:
|
|
关键功能解析
- 请求类型:
get()
:发送 GET 请求。post()
:发送 POST 请求,支持表单参数(如formParam
)或 JSON 负载。
- 暂停(pause):模拟用户思考或页面加载的时间,单位为秒。
- 检查(check):验证响应状态码、内容等。例如
status.is(200)
确保请求成功。 - 负载模式:
atOnceUsers(n)
:一次性注入 n 个用户。rampUsers(n).during(t)
:在 t 时间内逐步增加到 n 个用户。
进阶技巧:动态数据与会话管理
现实中,用户不会都用相同的用户名登录,也不会只访问固定的页面。Gatling 提供了工具来处理动态数据:
- Feeder(数据源):从 CSV 文件或其他来源读取数据。
- Session(会话):保存和使用动态变量。
示例:使用 CSV 文件模拟不同用户登录。
- 在
user-files/resources
目录下创建users.csv
:username,password user1,pass123 user2,pass456 user3,pass789
- 修改脚本:
1 2 3 4 5 6 7 8 9 10 11 12
val feeder = csv("users.csv").random // 随机读取用户数据 val scn = scenario("DynamicUserJourney") .feed(feeder) // 注入数据 .exec(http("Login") .post("/api/login") .formParam("username", "${username}") // 使用 CSV 中的变量 .formParam("password", "${password}") .check(jsonPath("$.token").saveAs("authToken"))) // 保存登录令牌 .exec(http("Browse Products") .get("/products") .header("Authorization", "Bearer ${authToken}")) // 使用会话中的令牌
测试与调试
- 运行脚本:在终端运行
gatling.sh
或gatling.bat
,选择你的脚本。 - 日志检查:如果遇到错误,查看
gatling.log
(位于results
目录)。 - 报告分析:生成的 HTML 报告会显示每个请求的成功率、响应时间等。
第三篇小结
通过本篇,你学会了如何设计复杂的用户行为场景,结合动态数据和会话管理,让测试更贴近真实世界。Gatling 的灵活性在于它既能快速上手,又能满足高级需求。下一期,我们将聚焦测试报告的解读与性能瓶颈分析,助你从数据中挖掘价值。准备好优化你的应用了吗?