Python - locust模块
locust模块做压力测试
使用flask框架搭建的系统作为压测系统,压测前记得启动flask服务,参考上一个博客Flask框架
上代码。这里以访问博客首页、创建博客和更新博客三个接口做压测
1 from locust import HttpUser, TaskSet, task 2 3 class WebsiteTasks(TaskSet): 4 5 def on_start(self): 6 """ 7 启动时调用执行一次 8 :return: 9 """ 10 self.client.post('/auth/login', {'username': 'admin', 'password': '123456'}) 11 12 @task # @task(2) 在task后加上括号和数字是请求比例 13 def index(self): 14 self.client.get('/') 15 16 @task 17 def create(self): 18 """ 19 新建博客 20 :return: 21 """ 22 payload = {'title': 'Third Blog','body': 'Hi this is my third blog'} 23 self.client.post('/create', payload) 24 25 @task # 不指定比例,则为1:1 26 def update(self): 27 """ 28 更新第一个博客 29 :return: 30 """ 31 payload = {'title': 'update first test', 'body': 'the first blog has been updated.'} 32 self.client.post('/1/update', payload) 33 34 35 class WebsiteUser(HttpUser): 36 tasks = [WebsiteTasks] # 执行此类里的所有测试行为 37 host = 'http://127.0.0.1:5000/' 38 min_wait = 1000 39 max_wait = 5000
min_wait和max_wait为两次请求之间的间隔:1~5秒内的随机值
写好代码后,通过命令行启动locust
单进程运行模式
在locust脚本所在的目录打开命令窗口,输入 locust -f locust_first.py -P 8889
locust_first.py是脚本名,8889是打开locust图形界面的端口
启动好locus后,在浏览器输入http://localhost:8889/
三个参数,host为压测的host
压测结果示例
如果是分布式模式,在管理界面上会多一个worker的页面
多进程分布式运行模式
先启动master:
locust -H http://xxx.com -f filename.py --master -P 8088
再启动worker(原叫slave)
locust -H http://xxx.com -f filename.py --worker # master和worker在同一台机运行
locust -H http://xxx.com -f filename.py --worker --master-host=启动master的机器IP # master和worker不在同一台机运行
有几个worker启动,master命令窗口就会显示Currently x clients ready to swarm
把master和worker都启动后,再打开界面管理器,比单进程多了workers信息
笔记
"""
1 数据集
在WebsiteUser定义一个数据集,所有虚拟用户在WebsiteTasks中都可以共享该数据集
如果不要求数据唯一性,数据集选择list数据结构,从头到尾循环遍历即可;
如果要求数据唯一性,数据集选择queue数据结构,取数据时进行queue.get()操作即可。
queue也可做数据循环,每次取完后用queue.put_nowait(data)放回队尾
2 检查点
对响应的内容关键字进行assert xxx in response操作即可
3 运行模式:单进程运行和多进程分布式运行
3.1 单进程运行模式又分:无界面运行和有界面运行,用于调试脚本和小并发压测的情况
3.1.1 无界面执行脚本命令: locust -f filename.py --headless -u 1 -r 1
-f filename.py 指定执行locust脚本文件
--headless 无界面模式,以前叫no_web,我用的是locust v2.8.5,已经改成headless了
-u 1 指定并发数 1个
-r 1 指定并发加压速率,默认值为1
3.1.2 有界面执行脚本命令:locust -f filename.py -P 8089
-f filename.py 指定执行locust脚本文件
-H 127.0.0.1 被测系统的host,若在terminal执行,则不指定
-P 8089 指定端口号
3.2 多进程分布式运行
3.2.1 高并发使用多进程分布式运行模式
3.2.2 同一台压力机上开启多个worker情况。如果一台压力机有N个处理器内核,那么就在这台压力机上启动一个master,N个worker
先启动master 命令:locust -H http://xxx.com -f filename.py --master -P 8088
再启动worker(master和worker在同一台机) 命令:locust -H http://xxx.com -f filename.py --worker
启动worker(master和worker不在同一台机):locust -H http://xxx.com -f filename.py --worker --master-host=启动master的机器IP
3.2.3 master和slave启动完毕后,可以在浏览器中通过http://master机器ip:8089进入locust的web管理页面了
"""