locust原理和优势
原理是协程并发
• 代码定义用户行为
• 支持分布式执行测试代码,能够模拟百万级别的用户量
• 使用协程执行请求,在单机上支持更高的并发量
快速上手样例
from locust import HttpLocust,TaskSet,task
import os
import queue
#测试任务类
class ImportTest(TaskSet): #编写用户行为,即操作什么
@task
def get_blog(self):
header = {"token":"加在header的token","cookie":"加在header的cookie"}
body = {
"domain_name": "facebook.com",
"ua": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
}#body存放需要传递的参数
req = self.client.post("/fbcc/user/single-import-user", headers=header, verify=False, data = body)
#补上接口的地址,将header,数据等传入接口
#self.client.get()这是get方法
if req.status_code == 200:#接口的状态码
print("success")
else:
print("fails")
#测试配置
class websitUser(HttpLocust): #定义用户,相当于一个线程组
task_set = ImportTest
min_wait = 3000
max_wait = 6000
if __name__=="__main__":
import os
os.system("locust -f TestImport.py --host=https://api.one") #执行操作,这里填接口地址
HttpLocust
HttpLocust有client属性,用于建立与保持Http会话,封装了requests库,用法基本一致,指向的TaskSet可以直接使用client属性发起HTTP
task_set | 指向一个TaskSet,定义每个用户的行为 |
---|---|
weight | 实例被挑选执行的权重,数值越大,执行频率越高(可定义多个子类,然后分权重) |
min_wait | 用户执行最短等待时间 |
max_wait | 用户执行最长等待时间 |
stop_timeout | 设置Locust多少秒后超时,None就是不超时 |
host | web服务的测试,就是URL前缀的默认值,其他服务默认None |
TaskSet
TaskSet用于定于用户的任务,然后HttpLocust的task_set就指向这些任务集合,然后根据权重来执行任务。
@task() | 任务装饰器,里面的数值越大,运行次数越多 |
---|---|
on_start() | 在所有task方法前执行 |
on_stop() | 在所有task方法结束前执行 |
client | locust继承了httplocust,可以直接使用client属性发起http请求 |
用户按任务权重执行
from locust import task,TaskSet,HttpLocust
import os
class MyTaskSet(TaskSet):
def login(self):
self.header = {"token":"加在header的token","cookie":"加在header的cookie"}
path = "urlpath"
da = {"userAccount": "suner001", "pwd