Python 性能测试 Locust 实例
原创
©著作权归作者所有:来自51CTO博客作者Tom马的原创作品,请联系作者获取转载授权,否则将追究法律责任
安装 Locust
1、实例代码
locust 通过 client 属性来使用 Python requests 库的所有方法
UserBehavior类继承TaskSet类,用于描述用户行为:
- 使用@task装饰的方法为一个事务,方法的参数用于指定该行为的执行权重,参数越大每次被用户执行的概率越高,默认为1
- on_start():每个locust用户执行测试事务之前执行一次,用于做初始化的工作,如登录;
WebsiteUser类用于设置性能测试属性:
- host:要加载主机的URL,通常是在命令行启动locust时使用 --host 选项指定
- task_set:指向定义的一个用户行为类;
- wait_time:模拟用户在执行每个任务之间等待的时间
from locust import HttpUser, TaskSet, task, between
import json
class UserBehavior(TaskSet):
def on_start(self):
self.login()
self.headers = {
'Accept-Encoding': 'gzip, deflate',
'Content-Type': 'application/json;charset=UTF-8',
'Authorization': 'Bearer '+self.token
}
def login(self):
post_url = '/hr/api/auth/v1/login'
payload = {
'username':'000000',
'password':'fa550fc8b20ac44adbd3a45b56a907890c533378'
}
s = json.dumps(payload)
header={
'Accept-Encoding':'gzip, deflate',
'Content-Type':'application/json;charset=UTF-8'
}
r = self.client.post(post_url, data=s, headers=header)
# 获取 token
self.token = r.json()['data']['token']
@task(2)
def emp_list(self):
post_url = '/hr/api/employee/baseInfo/list?dp=1'
payload = {
'phone': '',
'pageNo': '1',
'pageSize': '15'
}
s = json.dumps(payload)
self.client.post(post_url, data=s, headers=self.headers)
class WebsiteUser(HttpUser):
task_set = [UserBehavior]
wait_time = between(3, 6)
host = "http://192.168.1.111:7878"
if __name__ == '__main__':
import os
# 有图形
os.system('locust -f Test1.py --host="192.168.1.111:7878"')
# 无图形,设置运行时间,峰值并发,每秒启动人数
# os.system('locust -f Test1.py --headless --host="h192.168.1.111:7878" --run-time=1m -u 100 -r 10')
2、启动成功后,可以打开 web 界面查看
http://localhost:8089/
Number of users to simulate :设置模拟并发用户数
Hatch rate(users spawned/second) :每秒产生(启动)的虚拟用户数
- Type :请求的类型,如GET/POST;
- Name :请求的路径;
- request :已发出请求数量;
- fails :请求失败的数量;
- Median :响应时间的中间值(单位:毫秒);
- Average :平均响应时间(单位:毫秒);
- Min :请求的最小响应时间(单位:毫秒);
- Max :请求的最大响应时间(单位:毫秒);
- Content Size:单个请求的大小(单位:字节);
- reqs/sec:每秒钟请求的个数;