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管理页面了
"""