第三方CMA/CNAS双资质软件测评机构【Gatling Recorder录制工具详解:HTTP/HTTPS请求捕获和脚本生成】

Gatling Recorder 是一款专为性能测试脚本快速开发设计的本地HTTP/HTTPS代理服务器。重要作用是,将传统繁琐的手动编写脚本过程,转化为自动化捕获用户操作并生成高性能、可读性强的Gatling Scala脚本,极大提升脚本创建效率。

一、 架构和工作原理

Gatling Recorder 本质上是一个中间人代理:

流程详解:

流量导向:你将浏览器或被测应用的网络代理设置为Recorder(默认 localhost:8000)。

请求拦截:Recorder启动一个代理服务器,监听指定端口,捕获所有流经的HTTP/HTTPS请求和响应。

解码和重组:对于HTTPS请求,Recorder会使用其自签名的CA证书(需手动信任)进行SSL/TLS解密,从而能读取明文内容。随后将原始的请求头、请求体、URL、响应等数据重组为结构化数据。

脚本生成:Recorder内部有一套模板引擎,将这些结构化数据映射为 Gatling的领域特定语言 代码。并不是简单记录,而是智能地生成包含exec、pause、check等语义化结构的脚本。

二、 配置和操作

1. 启动和方式选择

启动Gatling Recorder一般有两种方式:

通过Gatling Bundle:执行 bin/gatling-recorder.sh (Linux/Mac) 或 bin/gatling-recorder.bat (Windows)。

通过IDEA插件:在IntelliJ IDEA中安装Gatling插件后,有图形化入口。

方式:

HTTP代理方式:最常用。Recorder作为系统/浏览器代理。

HAR转换方式:不直接录制,而是导入浏览器开发者工具导出的 .har 文件,将其转换为Gatling脚本。适用于复杂或难以直接录制的情形。

文章来源:卓码软件测评

精彩推荐:点击蓝字即可
软件负载测试API自动化测试软件测试第三方软件测试软件性能测试​​​​​​软件测试机构

2. 配置面板分析

在Recorder的GUI界面中,以下配置非常重要:

代理配置:端口默认8000。保证不和本地其他服务冲突。

HTTP/HTTPS方式:必须和被测协议一致。录制HTTPS网站必须启用HTTPS方式。

证书配置:生成CA证书,首次使用HTTPS必须操作:点击生成,会创建 gatlingCACert.pem。必须手动将其导入到操作系统或浏览器的"受信任的根证书颁发机构",否则浏览器会报安全错误。

过滤器方法:黑名单:默认。录制"除了"列表外的所有请求。白名单:仅录制列表中的请求。精炼脚本第一选择,可过滤掉大量静态资源(如图片、CSS、JS)和分析器请求。

一致方式:支持Java正则表达式。如,白名单方式可设为:.*https://yourapp.zmtests.com/api/.\* 仅录制API。

输出配置:包名 & 类名,定义生成脚本的Scala包结构和主类名,关系到项目结构。

格式:选择生成脚本的语言,一般为默认的 Scala 3。

Simulation文件夹:指定脚本输出目录,需指向Gatling项目的 user-files/simulations/ 对应包途径下。

请求体缓存:建议启用。对于POST/PUT等含请求体的操作,能保证录制的脚本在回放时发送完全相同的负载数据。

3. HTTPS录制专项配置

HTTPS录制失败是最常见问题,请严格按流程操作:

在Recorder中点击 "生成CA证书",保存到已知位置。

信任证书:

Windows:双击.pem文件,选择"安装证书"->"本地计算机"->"将所有证书放入下列存储"->"浏览"->"受信任的根证书颁发机构"。

macOS:双击.pem文件,打开"钥匙串访问",将证书拖入"系统"钥匙串,然后双击该证书,在"信任"部分设置为"始终信任"。

浏览器:有些浏览器(如Firefox)使用独立证书库,需在其设置中手动导入并信任。

在Recorder中勾选"启用HTTPS代理"。

配置浏览器系统代理为localhost:8000 (或使用SwitchyOmega等插件)。

三、 脚本分析优化

Recorder生成的是可直接运行的脚本,但一般需要优化以提高性能和可维护性。

原始录制脚本示例:

Scala 复制代码
.exec(

    http("请求首页")

    .get("/")

    .headers(headers_0)

    .check(status.is(200))

)

.pause(1) // 录制时操作间隔

.exec(

    http("登录API")

    .post("/api/login")

    .headers(headers_1)

    .formParam("username", "testUser") // 硬编码数据

    .formParam("password", "testPass")

    .check(jsonPath("$.token").saveAs("authToken")) // 提取令牌

)

专业优化:

数据剥离和参数化:

移除硬编码:将testUser等数据移至Feeder (CSV、JSON) 或使用Session变量,实现多用户迭代。

动态参数处理:对于CSRF令牌、时间戳等,使用正则表达式或JSON Path提取器 (check) 从响应中捕获,并作为参数传递到后续请求。

请求清理:

删除静态资源请求:通过白名单过滤后,手动清理剩余的无关请求(如.png, .css)。

合并重点API序列:将思路上连续的一组API调用(如:添加商品->修改库存)保留在一个脚本中,保证业务流完整。

检查点和断言:

增加业务断言:在重点请求后,不仅检查HTTP状态码,更应使用 jsonPath、css、substring 等检查响应体内容,证实业务正确性(如:check(jsonPath("$.success").is("true")))。

暂停时间合理化:

将录制的固定pause时间,替换为 pace(控制迭代节奏)或更符合真实用户思考时间的随机停顿(如:pause(2 seconds, 5 seconds))。

四、 配置故障排除

HTTPS连接错误:浏览器提示"不安全连接"或"证书无效"。

  1. 保证证书已正确生成并导入到系统根信任库。

  2. 重启浏览器。

  3. 尝试在Recorder中删除旧证书并重新生成。

捕获不到请求:Recorder无任何请求流入。

  1. 确定代理配置正确(IP: 127.0.0.1, Port: 8000)。

  2. 关闭浏览器所有插件或其他代理工具。

  3. 检查系统防火墙是不是阻止了Recorder。

脚本回放失败:录制成功,但回放时报错(如404、参数错误)。

  1. 检查动态参数是不是成功提取并传递。

  2. 检查请求头是不是完整(如 Content-Type、Referer)。

  3. 启用requestbodies文件夹,对比录制和回发的请求体差别。

性能考虑:录制大量请求时Recorder卡顿。

  1. 必须使用白名单,精确过滤。

  2. 关闭不必要的浏览器标签。

  3. 对于超长流程,考虑分段录制,再用代码整合。

白名单:录制开始前,优先规划并设置白名单规则,从源头保证脚本精简。

一次流程,一个脚本:针对一个完整的业务情形(如"用户从登录到下单")进行录制,保持脚本的业务独立性。

录制后必优化:录制生成的脚本是毛坯,必须进行数据参数化、检查点强化、无关请求清理才能成为生产可用的精装性能脚本。

版本控制:将优化后的脚本纳入Git等版本控制系统,和测试数据分离管理。

相关推荐
桌面运维家20 小时前
vDisk VOI/IDV:Windows启动性能优化与安全部署攻略
安全·性能优化
熊文豪20 小时前
KingbaseES数据库存储与内存管理完全指南:从核心原理到性能优化
数据库·性能优化·kingbasees·金仓数据库·电科金仓
transitory_truth21 小时前
POSTMAN使用
测试工具·postman
小北方城市网1 天前
第 9 课:Python 全栈项目性能优化实战|从「能用」到「好用」(企业级优化方案|零基础落地)
开发语言·数据库·人工智能·python·性能优化·数据库架构
Wpa.wk1 天前
接口自动化 - 解决大量响应数据字段的格式断言 -Json-schema
运维·经验分享·测试工具·自动化·json·接口测试
顾林海1 天前
Android Profiler实战宝典:揪出CPU耗时元凶与内存泄露小偷
android·面试·性能优化
虫小宝1 天前
导购APP容器化CI/CD流程:Jenkins在返利系统持续部署中的实践
运维·ci/cd·jenkins
国科安芯1 天前
核工业机器人电机驱动器CANFD隔离芯片国产替代方案
单片机·嵌入式硬件·性能优化·架构·机器人·安全性测试
·云扬·1 天前
MySQL规范建表:从结构设计到性能优化的实践指南
android·mysql·性能优化