Locust是否支持输出包含单事务详细指标的CSV报告?
Locust 输出单事务详细CSV报告的方案
原生Locust自带的
csv-full-history确实只输出聚合类数据,没法直接导出每一笔请求的明细指标,和你遇到的情况一致。要拿到你需要的单事务明细(包含timestamp、test_name、url、response_size、latency、connect_time、ttfb等字段),得通过自定义事件监听来实现:
- 在你的Locust脚本里导入
events模块,监听request_success和request_failure两个事件,这两个事件会在每笔请求完成后触发 - 写一个回调函数,从事件参数里提取你需要的所有字段
- 用Python的
csv模块把这些数据逐行写入CSV文件
- 在你的Locust脚本里导入
给你个现成的代码片段参考:
import csv from locust import events from datetime import datetime # 先写入CSV表头 with open("request_details.csv", "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow(["timestamp", "test_name", "url", "response_size", "latency", "connect_time", "ttfb", "success"]) def record_request_details(request_type, name, response_time, response_length, exception, context, **kwargs): # 提取各项指标 timestamp = datetime.utcnow().isoformat() test_name = name url = context.get("url", "") response_size = response_length latency = response_time connect_time = context.get("connect_time", 0) ttfb = context.get("ttfb", 0) success = exception is None # 无异常则请求成功 # 追加写入CSV with open("request_details.csv", "a", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow([timestamp, test_name, url, response_size, latency, connect_time, ttfb, success]) # 注册事件监听 events.request_success.add_listener(record_request_details) events.request_failure.add_listener(record_request_details)
- 额外提醒:
- 高并发场景下频繁打开关闭文件可能拖慢性能,你可以改成用队列批量写入,或者用线程安全的文件操作方式
- 如果用Locust分布式运行,每个worker节点会生成自己的CSV文件,测试结束后需要手动合并这些文件
内容的提问来源于stack exchange,提问作者dhartford
相关产品推荐
相关产品推荐

