Locust 是一个易于使用,分布式,用户负载测试工具。它用于负载测试 web 站点(或其他系统),并计算出一个系统可以处理多少并发用户。在测试期间,一大群虚拟用户访问你的网站。每个测试用户的行为由您定义,集群过程由 web UI 实时监控。这将帮助您在让真正的用户进入之前进行测试并识别代码中的瓶颈。
Locust 完全是基于事件的,因此在一台机器上支持数千个并发用户是可能的。与许多其他基于事件的应用程序不同,它不使用回调。相反它通过 gevent 使用轻量级协程。这允许您用 Python 编写非常有表现力的场景,而不用回调使代码复杂化。
locust 安装
locust运行使用-- no web形式
- -c, --clients:指定并发用户数;
- -n, --num-request:指定总执行测试;
- -r, --hatch-rate:指定并发加压速率,默认值位1。
- -t:脚本运行多少时间,单位s
命令:
locust运行使用--web形式
from locust import HttpLocust, TaskSet, task # 定义用户行为,继承TaskSet类,用于描述用户行为 class test_locust(TaskSet): @task(1) def test_index(self): self.client.get("/") @task(2) def test_duty(self): self.client.get("/duty/") # 这个类类似设置性能测试,继承HttpLocust class websitUser(HttpLocust): # 指向一个上面定义的用户行为类 task_set = test_locust # 执行事物之间用户等待时间的下界,单位毫秒,相当于lr中的think time min_wait = 3000 max_wait = 6000 if __name__ == "__main__": import os os.system("http://www.baidu.com")
- -H, --host:被测系统的host,若在Terminal中不进行指定,就需要在Locust子类中通过host参数进行指定;
- -f, --locustfile:指定执行的Locust脚本文件;
- -p,--prot:locust运行端口
- 1.吞吐量/每秒响应事务数(rps)实时统计
- 2.平均响应时间/平均事务数实时统计
- 3.虚拟用户数运行
locust运行使用--分布式进程
Locust 基于 python 脚本定制化压测,使用 python 语言来实现 参数化、关联参数、断言和一些复杂的压测场景非常方便。Locust 使用协程来构建tcp连接,本身单机并发能力强,但内部是由requests库的httpclient 发起网络请求,requests库功能挺全面,性能却很一般,好在 Locust 支持分布式,弥补了一定的性能缺陷。根据自己做的测试,同样几台客户机,jmeter搭建分布式测出的 qps 比 Locust分布式 高1/3。如果要提升 locust 单进程性能,可以将 httpclient 的实现方式从 requests 换成 geventhttpclient。
单台多进程:
- 先启一个 master
locust -f /home/script/stress_test.py --web-host 10.1.62.223 --master
- 再启 8 个 slave
locust -f /home/script/stress_test.py --slave
【注】:master--主节点
slave--从节点
- slave 节点启动后,在 locust 监控中能看到
多台多进程:
多台机器搭建 Locust 分布式 和 单台搭建多进程差不多。只有一个区别,如果 slave 和 master 不在一台机器上, slave 需要指定 --master-host 参数:
locust -f /home/script/stress_test.py --slave --master-host 10.1.62.223