如何在Locust图形界面自定义# Requests和# Failures列数值?
解决Locust场景级统计中自定义# Requests和# Failures列的问题
可以实现自定义这两列的数值,核心思路是通过监听Locust的统计报告事件,在统计数据生成时替换对应场景条目的请求数和失败数指标。以下是具体实现步骤:
1. 预先统计场景内的请求数和失败数
在用户类中维护变量,记录当前场景的总请求数和失败数,执行场景内每个请求时实时更新:
class MyUser(HttpUser): def __init__(self, parent): super().__init__(parent) self.scenario_total_requests = 0 self.scenario_total_failures = 0 self.count = 0 self.user_id = 0 def run_scenario(self): # 遍历执行场景内所有请求 for req_info in self.scenario_requests: self.scenario_total_requests += 1 try: # 执行请求并收集响应数据 response = self.client.get(req_info["url"]) # 累加响应时间、长度等逻辑 except Exception as e: self.scenario_total_failures += 1 # 记录错误信息 # 触发场景级统计事件 scenario_name = f"Scénario 2, number : {self.count}, id:{self.user_id}" events.request.fire( request_type="Full_scenario", name=scenario_name, response_time=full_response_time, response_length=full_response_length, exception=errors ) # 将场景统计数据存入全局字典,供后续修改统计条目使用 global_scenario_stats[scenario_name] = { "total_requests": self.scenario_total_requests, "total_failures": self.scenario_total_failures }
2. 监听统计报告事件,修改对应指标
定义全局字典存储场景统计数据,通过events.stats_report事件监听统计报告生成,匹配到场景条目后替换请求数和失败数:
# 全局字典,存储场景名称与对应统计数据的映射 global_scenario_stats = {} @events.stats_report.add_listener def update_scenario_stats(stats, **kwargs): # 遍历所有统计条目 for entry in stats.entries: # 筛选自定义的场景级统计条目 if entry.request_type == "Full_scenario" and entry.name in global_scenario_stats: scenario_data = global_scenario_stats[entry.name] # 替换请求数和失败数 entry.num_requests = scenario_data["total_requests"] entry.num_failures = scenario_data["total_failures"] # 重新计算失败率等衍生指标 entry.failure_rate = entry.num_failures / entry.num_requests if entry.num_requests > 0 else 0
注意事项
- 必须保证场景名称
name的唯一性,否则会出现统计条目匹配错误。 - 修改后的数值会在统计报告刷新时生效,Web UI的实时统计需要等待下一次刷新周期才能显示更新后的数据。
- 若需要更实时的展示,可结合
events.request_success和events.request_failure事件维护统计数据,核心修改逻辑保持一致。
内容的提问来源于stack exchange,提问作者Romain
相关产品推荐
相关产品推荐

