You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:36:16