浅谈监听器之保存响应到文件
JMeter 提供了一个实用的监听器——“保存响应到文件”,该监听器能够自动将取样器的响应数据直接保存到指定的文件中,便于后续分析或存档。本文档旨在详细介绍如何配置和使用此监听器功能。
适用场景
● 长时间运行的测试:在需要长时间运行的大规模并发测试中,实时监控所有响应可能不切实际,此时将响应保存为文件可以事后分析。
● 故障排查:当测试过程中出现异常或错误时,保存响应内容有助于快速定位问题。
● 自动化测试报告:结合自动化脚本,可将响应内容整合进测试报告中,便于生成全面的测试总结。
配置步骤
- 打开JMeter测试计划:首先,确保你已启动JMeter并打开了你的测试计划。
- 添加监听器:
○ 在测试计划、线程组或者控制器上右击,选择“添加” > “监听器” > “保存响应到文件”。 - 配置保存响应到文件设置:
○ Save Successful Responses only(只保存成功响应):根据需要决定是否只保存成功的HTTP状态码的响应。
○ Save Failed Responses only(是否保存失败响应):通常建议勾选,以便捕捉错误和异常。
○ Don’t save Transaction Controller SampleResult:不保存事务控制器的样本结果
○ Variable Name containing saved file name:保存文件名的变量名,便于后续找到对应的文件名称。
○ 文件名前缀:文件名称前缀名称设置。
○ Don’t add number to prefix:不要在前缀中添加数字
○ Don’t add content type suffix:不添加内容类型后缀
○ Add timestamp:添加时间戳
○ Minimun Length of sequence number:设置文件名称最小的序列号。 - 运行测试:配置完毕后,运行你的测试计划。所有匹配监听器配置的响应将会被自动保存到指定的文件中。
应用实例
首先我们使用SpingBoot编写部分测试接口代码
@PostMapping(value = "/login",produces = "application/json;charset=UTF-8")public String authenticate(@RequestBody JSONObject request) {String validUsername = "admin";String validPassword = "password";String response = "{\"total\":2,\"data\":[{\"id\":123,\"name\":\"John Doe\",\"email\":\"johndoe@example.com\",\"phone\":\"123-456-7890\",\"address\":{\"street\":\"123 Main St\",\"city\":\"New York\",\"state\":\"NY\",\"zip\":\"10001\"},\"interests\":[\"sports\",\"music\",\"travel\"]},{\"id\":456,\"name\":\"Jane Smith\",\"email\":\"janesmith@example.com\",\"phone\":\"987-654-3210\",\"address\":{\"street\":\"456 Elm St\",\"city\":\"Los Angeles\",\"state\":\"CA\",\"zip\":\"90001\"},\"interests\":[\"reading\",\"cooking\",\"hiking\"]}]}";if (request.getString("username").equals(validUsername) && request.getString("password").equals(validPassword)) {return response;} else {return response;}}
我们编写如下测试脚本
线程组:保持默认
HTTP信息头管理器:名称content-type,值为application/json;charset=UTF-8
HTTP请求:协议http,服务器名称或IP为127.0.0.1,端口设置为8091,方法为post,路径/login,内容编码为utf-8,消息体数据设置如下
{"username": "admin","password": "password"}
BeanShell取样器:编写如下代码
log.info("Variable Name containing saved file name值为:${fileName}");
情况1:Variable Name containing saved file name设置
保存响应到文件:Variable Name containing saved file name中设置为fileName,其他保持默认
运行脚本,查看JMeter打印日志内容
2024-07-24 16:28:34,481 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2024-07-24 16:28:34,503 INFO o.a.j.u.BeanShellTestElement: Variable Name containing saved file name值为:test20240724-1628_1.json
情况2:Don’t save Transaction Controller SampleResult设置
保存响应到文件:Variable Name containing saved file name中设置为fileName,文件名称前缀设置为test,勾选Don’t save Transaction Controller SampleResult,其他保持默认
运行脚本,查看生成的文件内容
{"total":2,"data":[{"id":123,"name":"John Doe","email":"johndoe@example.com","phone":"123-456-7890","address":{"street":"123 Main St","city":"New York","state":"NY","zip":"10001"},"interests":["sports","music","travel"]},{"id":456,"name":"Jane Smith","email":"janesmith@example.com","phone":"987-654-3210","address":{"street":"456 Elm St","city":"Los Angeles","state":"CA","zip":"90001"},"interests":["reading","cooking","hiking"]}]}
情况3:Minimun Length of sequence number设置
保存响应到文件:Variable Name containing saved file name中设置为fileName,文件名称前缀设置为test,勾选Don’t save Transaction Controller SampleResult,Minimun Length of sequence number设置3,为其他保持默认
运行脚本,查看生成的文件名称,在JMeter日志中查看
2024-07-24 17:14:01,021 INFO o.a.j.u.BeanShellTestElement: Variable Name containing saved file name值为:test20240724-1714_001.json
注意事项
● 性能影响:虽然保存响应到文件对性能影响较小,但大量并发下的频繁磁盘I/O操作可能会影响测试结果准确性,尤其是在资源有限的环境中。因此,在高负载测试时应谨慎使用,并考虑测试机器的硬件能力。
● 数据处理:响应文件可能会迅速增长,特别是在大并发测试中。确保有足够的磁盘空间,并准备好数据处理和分析的流程。
● 安全:如果响应包含敏感信息,务必确保文件的安全性和隐私保护措施到位。
结论
JMeter的“保存响应到文件”监听器为性能测试提供了便利的数据收集机制,它简化了测试结果的存储与分析流程。通过合理配置和管理,可以显著提高测试效率和准确性,是性能测试工程师不可或缺的工具之一。