如何用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
相关产品推荐
相关产品推荐

