python压测脚本_python性能测试⼯具locust的使⽤
⼀、简介
locust 是⼀个易于使⽤,分布式,⽤户负载测试⼯具。它⽤于负载测试 web 站点(或其他系统),并计算出⼀个系统可以处理多少并发⽤户。在测试期间,⼀⼤虚拟⽤户访问你的⽹站。每个测试⽤户的⾏为由您定义,集过程由 web ui 实时监控。这将帮助您在让真正的⽤户进⼊之前进⾏测试并识别代码中的瓶颈。
locust 完全是基于事件的,因此在⼀台机器上⽀持数千个并发⽤户是可能的。与许多其他基于事件的应⽤程序不同,它不使⽤回调。相反它通过 gevent 使⽤轻量级协程。这允许您⽤ python 编写⾮常有表现⼒的场景,⽽不⽤回调使代码复杂化。
⼆、安装
⽤ pip 管理⼯具安装:
pip3 install locust
检查是否安装成功,执⾏命令:locust --v
三、压测过程
1.编写脚本
locust 不同于 jmeter 可以⽤ gui 来创建压测脚本。locust 需要⾃⼰编写 python 脚本,压测负载脚本主要包含两个⼦类usertask和websiteuser,分别继承taskset和httplocust类,拥有这两个⽗类的公共属性和⽅法。
from locust import httplocust, taskset, task, between
import os,json
# 定义⽤户⾏为
class usertask(taskset):
def on_start(self):
'''初始化数据,每个虚拟⽤户只执⾏⼀次'''
self.client.post("/login",{"username":"test","password":"123456"})
@task(2)
def home_index(self):
r = ("/sz/home/defaulthomev2request")
assert json.)['error'] == 0
@task(1)
def sale(self):
("/sz/home/flashsalerequest")
assert json.)['error'] == 0
def on_stop(self):
'''销毁数据,每个虚拟⽤户只执⾏⼀次'''
self.client.post("/signout",{"customerguid":"c7d7e646-9ce2-499b-a22e-a3c98d4545fe"})
class websiteuser(httplocust):
host = '10.1.62.126'
task_set = usertask
wait_time = between(3, 5)
if __name__ == "__main__":
os.system('locust -f stress_test.py ')
locust 运⾏时:
on_start()  :每个并发⽤户在开始前各执⾏⼀次
on_stop():每个并发⽤户在结束后各执⾏⼀次
@task: 通过装饰器设置运⾏权重,⽐如上⾯代码中 执⾏任务 home_index 和 sale 的总请求为 2:1 assert:断⾔设置
wait_time :每个任务之间设置间隔时间,随机从3~5区间内取,单位是 s
locust -f:指定 .py 压测脚本路径
2. locust 监控
开始测试,locust 提供⼀个简易的监控界⾯,可以看到 rps、响应时间 和 部分曲线图
3.运⾏模式
1.web ui 模式
locust -f stress_test.py --web-host 10.1.44.31 --web-port 8090 --web-host:指定 web ui ip,默认 localhost
--web-port:指定 web ui 端⼝,默认 8089
2. no web 模式
locust -f stress_test.py --no-web -c 100 -r 20 -t 120
python虚拟机
--no-web:指定⽆ web ui模式
-
c:起多少 locust ⽤户(等同于起多少 tcp 连接)
-r:多少时间内,把上述 -c 设置的虚拟⽤户全部启动
-t:脚本运⾏多少时间,单位s
在 --no-web 模式下的报告如下:
4.分布式进程
locust 是由 python 编写的,由于gil的限制,单进程不能利⽤cpu多核的优势(实际测试结果也是⼀样,8核⼼的虚拟机,只有⼀核达到了95%以上的使⽤率,其余7核只围观,不出⼒)。所以单台机器上想要尽可能的压榨 cpu,只能开启多进程,⼀般有多少个核⼼启多少进程。
单台多进程:
先启⼀个 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
slave 节点启动后,在 locust 监控中能看到
多台多进程:
多台机器搭建 locust 分布式 和 单台搭建多进程差不多。只有⼀个区别,如果 slave 和 master 不在⼀台机器上, slave 需要指定 --master-host 参数:
更多功能使⽤请查看locust官⽅⽂档,形成良好的习惯 :官⽅⽂档
四、总结
locust 基于 python 脚本定制化压测,使⽤ python 语⾔来实现 参数化、关联参数、断⾔和⼀些复杂的压测场景⾮常⽅便。locust 使⽤协程来构建tcp连接,本⾝单机并发能⼒强,但内部是由requests库的httpclient 发起⽹络请求,requests库功能挺全⾯,性能却很⼀般,好在 locust ⽀持分布式,弥补了⼀定的性能缺陷。根据⾃⼰做的测试,同样⼏台客户机,jmeter搭建分布式测出的 qps ⽐ locust分布式 ⾼1/3。如果要提升 locust 单进程性能,可以将 httpclient 的实现⽅式从 requests 换成 geventhttpclient ,这个下⼀篇再讲述。
以上就是python性能测试⼯具locust的使⽤的详细内容,更多关于python性能测试⼯具locust的资料请关注萬仟⽹其它相关⽂章!
如您对本⽂有疑问或者有任何想说的,请点击进⾏留⾔回复,万千⽹友为您解惑!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。