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

如何在Locust中合并含动态参数的GET请求统计数据?

Locust合并动态GET请求统计的解决办法

当你遇到Locust对带动态参数的GET请求(比如xyz.com/v1/user/<user_id1>、xyz.com/v1/user/<user_id2>)无法合并统计的问题时,有以下几种可行方案:

1. 在请求中手动指定name参数

这是最直接的方式,在发送GET请求时,通过name参数给这类动态路径设置一个统一的统计名称模板,Locust就会把所有匹配该名称的请求合并统计。

示例代码:

from locust import HttpUser, task

class MyUser(HttpUser):
    @task
    def get_user(self):
        user_id = 123  # 这里可以是动态生成的ID
        # 用name参数指定统一的统计名称
        self.client.get(f"/v1/user/{user_id}", name="/v1/user/[user_id]")

这样所有访问/v1/user/xxx的请求,都会在统计报告里归到/v1/user/[user_id]条目下。

2. 全局事件钩子统一处理

如果不想逐个修改请求代码,可以通过Locust的事件钩子,自动识别动态路径并替换统计名称。比如监听请求成功/失败事件,对符合规则的路径进行批量修改。

示例代码:

from locust import HttpUser, task, events
import re

# 定义路径匹配规则,这里匹配/v1/user/后跟数字的路径
USER_PATH_PATTERN = re.compile(r"/v1/user/\d+")

def modify_request_name(request_type, name, response_time, response_length, exception, context, **kwargs):
    # 如果路径匹配规则,替换成统一名称
    if USER_PATH_PATTERN.match(name):
        return request_type, "/v1/user/[user_id]", response_time, response_length, exception, context

# 注册事件钩子,修改请求名称
events.request_success.add_listener(modify_request_name)
events.request_failure.add_listener(modify_request_name)

class MyUser(HttpUser):
    @task
    def get_user(self):
        user_id = 456
        self.client.get(f"/v1/user/{user_id}")  # 不用手动加name参数,钩子会自动处理

这种方式适合需要统一处理多个动态路径的场景,不用逐个修改请求代码。

3. 任务装饰器指定name参数

如果某个任务里的所有请求都属于同一类动态路径,可以直接在@task装饰器里指定统一的统计名称。

示例代码:

from locust import HttpUser, task

class MyUser(HttpUser):
    @task(name="GET /v1/user/[user_id]")
    def get_user(self):
        user_id = 789
        self.client.get(f"/v1/user/{user_id}")

注意:如果一个任务里包含多个不同的请求,这种方式会把该任务下所有请求都合并到同一个名称下,适合任务内请求逻辑单一的场景。


内容的提问来源于stack exchange,提问作者Gan3i

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:31:17