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

如何用Locust配置多Base URL?架构性能测试遇VU分配问题

问题

我想用Locust对比单体(Mono)和微服务(Micro)架构的API响应性能,已经编写了两个分别对应不同Base URL的HttpUser类,但执行测试命令后只有一个URL会收到请求,无法为两个URL分别生成独立的虚拟用户(VU)。不想在任务逻辑里硬编码Base URL,请问有没有其他办法实现每个URL对应独立VU?

我的测试代码如下:

class BasePerformanceTest(SequentialTaskSet):         
    @task
    def get_users(self):
        url = self.host + APIEndpoints.GET_USERS
        self.perform_request(url, "Get Users", self.user.base_url_name)

class Micro(HttpUser):
    wait_time = between(1, 3)
    tasks = [BasePerformanceTest]
    host = "https://Micro.net"
    base_url_name = "Micro"

class Mono(HttpUser):
    wait_time = between(1, 3)
    tasks = [BasePerformanceTest]
    host = "https://Mono.net"
    base_url_name = "Mono"

执行的命令:

locust -f ..\tests\baseline_Load.py --host Mono --users 2 --spawn-rate 1
解决方法

方法1:通过命令行指定多个User类

Locust支持用--class(或简写-C)参数同时指定多个User类,这样就能为每个类启动独立的VU,且每个类会使用自身定义的host属性。需要注意:要去掉命令中的--host参数,因为这个参数会覆盖所有User类中定义的host值,这也是你之前只生效一个URL的核心原因。

比如要为Micro和Mono各启动2个VU,命令可写为:

locust -f ..\tests\baseline_Load.py --class Micro --class Mono --users 4 --spawn-rate 2

(总用户数4,会按类的顺序平均分配,即2个给Micro、2个给Mono)

如果需要灵活调整VU数量,也可以启动后通过Locust的Web UI手动修改每个User类的用户数。

方法2:为User类设置权重(按需使用)

如果希望不同架构的VU数量保持固定比例,可以在User类中定义weight属性。比如让Micro的VU数量是Mono的2倍:

class Micro(HttpUser):
    wait_time = between(1, 3)
    tasks = [BasePerformanceTest]
    host = "https://Micro.net"
    base_url_name = "Micro"
    weight = 2  # 权重设为2

class Mono(HttpUser):
    wait_time = between(1, 3)
    tasks = [BasePerformanceTest]
    host = "https://Mono.net"
    base_url_name = "Mono"
    weight = 1  # 权重设为1

启动时指定总用户数,Locust会按权重比例分配VU:

locust -f ..\tests\baseline_Load.py --class Micro --class Mono --users 3 --spawn-rate 1

这会启动2个Micro的VU和1个Mono的VU。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:05:15