如何让Locust将带不同路径参数的同接口识别为同一API
Locust 动态路径参数接口统一统计方案
Locust 原生提供了开箱即用的分组统计能力,不需要额外编写后处理聚合脚本,所有统计指标(含P50/P95/P99等百分位指标、RPS、失败率)都会在数据采集阶段直接聚合计算,完全规避后处理脚本的精度问题:
- 方案1:单请求手动指定统计名称
调用请求方法时显式传入name参数,Locust会忽略实际请求路径,直接用传入的name值作为统计分组的唯一标识。示例代码:from locust import HttpUser, task class BotTestUser(HttpUser): @task def test_bot_interface(self): # 原有生成全局唯一bot_id的逻辑 bot_id = self.generate_unique_bot_id() # 传入name参数指定统一统计名称,所有不同bot_id的请求都会归到同一分组 self.client.get( f"/api/v1/bots/{bot_id}/abc", name="/api/v1/bots/{bot_id}/abc" ) - 方案2:全局事件钩子自动替换动态路径
如果压测涉及的动态路径接口较多,逐个接口加name参数效率太低,可以通过Locust原生的事件钩子做全局路径规则匹配,自动把动态参数段替换为固定占位符作为统计名称,不需要修改单个请求的代码。示例逻辑:import re from locust import events # 定义路径匹配规则,匹配bots路径后的动态id段 BOT_PATH_RULE = re.compile(r"^/api/v1/bots/[^/]+/") @events.request_sending.add_listener def replace_dynamic_path(request_type, uri, **kwargs): if BOT_PATH_RULE.match(uri): # 把动态id替换为固定占位符,作为统一统计名称 unified_name = BOT_PATH_RULE.sub("/api/v1/bots/{bot_id}/", uri) kwargs["name"] = unified_name
两种方案生效后,Locust的Web UI实时看板、命令行实时输出、最终导出的CSV测试报告,都会自动把携带不同
bot_id的同接口请求合并为同一个条目统计。因为分组逻辑是在单请求原始数据采集阶段执行的,百分位指标是基于全量请求的原始响应时间直接计算,精度和原生单接口统计完全一致。
内容的提问来源于stack exchange,提问作者BBloggsbott
相关产品推荐
相关产品推荐

