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

Locust.io如何实现含动态ID的接口按端点名称聚合统计输出

Locust动态路径参数请求聚合实现方法

Locust默认使用完整请求路径作为统计聚合的分组Key,路径中携带动态ID时会导致同规则接口被拆分为多条统计项,可通过以下两种方案实现聚合:

方案一:单接口指定name参数(最简单通用)

在发起子资源POST请求时,显式指定name参数,Locust会直接使用该参数值作为统计分组依据,忽略实际路径中的动态ID差异。
示例代码如下:

# 第一步:发起父资源创建请求
create_resp = self.client.post("/v1/foo/bar", json={"xxx": "xxx"})
parent_id = create_resp.json()["id"]

# 第二步:发起子资源请求时指定name参数
upload_resp = self.client.post(
    url=f"/v1/foo/bar/{parent_id}/upload",
    name="/v1/foo/bar/{id}/upload", # 固定聚合用的路径占位符
    json={"file": "xxx"}
)

配置完成后所有子资源请求都会聚合到/v1/foo/bar/{id}/upload这一条统计条目下。

方案二:全局钩子批量处理(适合多类动态路径接口)

如果项目中存在大量带动态参数的接口,不想逐个添加name参数,可以通过pre_request全局钩子批量匹配路径并替换为占位符:

from locust import HttpUser, task, events
import re

# 全局请求预处理钩子
@events.pre_request.add_listener
def handle_dynamic_path(request_type, request, **kwargs):
    # 匹配符合/v1/foo/bar/{数字ID}/upload规则的路径
    if re.match(r"^/v1/foo/bar/\d+/upload$", request.path):
        # 替换为统一占位符路径作为统计Key
        request.name = "/v1/foo/bar/{id}/upload"

class TestUser(HttpUser):
    @task
    def test_workflow(self):
        # 业务代码和原来保持一致,无需额外修改
        create_resp = self.client.post("/v1/foo/bar", json={"xxx": "xxx"})
        parent_id = create_resp.json()["id"]
        self.client.post(f"/v1/foo/bar/{parent_id}/upload", json={"file": "xxx"})

以上两种方案对Web端、CLI输出的统计结果均生效。

内容的提问来源于stack exchange,提问作者Rodney S. Foley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:54:04