一、性能测试工具的比较:
Loadrunner主要缺点是只能在windows上使用,且并发效率低,单台压力机难以产生较高并发。
Jmeter也存在并发效率低的问题且很容易内存溢出,非GUI模式的数据统计不精确。
Locust采用Pure Python脚本描述,且http协议基于requests库,简洁且功能强大。除了HTTP(S)协议,locust也可以测试其它任意协议的系统。locust采用协程机制,协程和线程的区别在于,协程避免了系统级资源调度,由此大幅提高了性能。
二、Locust的使用:
1. 安装:pip install locustio
2. 先看一段代码(登录及查询报名信息)
脚本中包含两个类:getUserListBehavior(继承了Taskset)和UserList(继承了HttpLocust,HttpLocust又继承了Locust)。
Locust类:具有client属性,可以通过该属性使用python的requests库,执行GET/POST/HEAD/PUT/DELETE/PATCH等方法。
Locust类中还有以下几个属性(见UserList类的代码):
task_set:指向Taskset类(本例为getUserListBehavior)
max_wait/min_wait:每个用户执行两个任务的时间间隔。默认为1s。
host:被测系统的域名,设置时启动locust可以在终端不必输入—host参数
Taskset是个任务集合,对虚拟用户的所有行为(任务)进行组织和描述,并可以对不同任务的权重进行配置。
3. web和no-web形式运行
web方式:
1)locust -H http://debugtalk.com -f demo.py (脚本中指定了host后不用带-H 参数)
2)浏览器中打开http://localhost:8089,输入并发数和启动虚拟用户速率
no-web方式:
指定—no-web,例如locust -f ccc_getUserList.py --no-web -r 2 -c3
4.脚本运行(no-web为例):
1)单台压测机(不指定slave)
locust -f ccc_getUserList.py --no-web -r 2 -c3
2)分布式压测(master-slave)
Master:locust -f ccc_getUserList.py --master --master-bind-port=5557 --no-web -r 100-c100 --expect-slaves=2
Slave:locust -f ccc_getUserList.py --no-web –slave
部分内容引自:
http://debugtalk.com/post/head-first-locust-user-guide/
http://debugtalk.com/post/head-first-locust-advanced-script/