import os
from locust import HttpUser,TaskSet,task,between,constant,SequentialTaskSet
from loguru import logger
'''
TaskSet:任务集合,其中的任务同时进行,没有先后顺序,支持嵌套
SequentialTaskSet:按顺序执行的任务集,任务分配很均匀,始终是def task31 >def tadk32 >def task33
task表示权重,这个装饰器内的数据越高,在测试时分配的虚拟用户就越多
在使用locust发送请求时,不用使用requests库,要使用self.client
示例:
res1=self.client.get(url,headers=headers)
res=self.client.post(url,headers=headers)
'''
class WebsiteTasks(TaskSet):
logger.add("LocustDemo.log")
def on_start(self):
logger.info("on_start: "+"初始化任务,每个用户开始做的第一件事,程序运行后直会执行一次")
@task(1)
def tastCase11(self):
logger.info("tastCase11")
name="掘金"
self.client.get("https://juejin.cn/pinsl",name=name)
@task(3)
def testCase12(self):
url='https://fanyi-pro.baidu.com/quick'
headers=''
name="翻译"
res=self.client.get(url,headers=headers,name=name)
assert 'success'==res.json().get('status')
logger.info("tastCase12")
@task(2)
def testCase13(self):
url='https://github.com/pulls'
data=''
name="GitHub"
res=self.client.post(url,name=name)
assert 'success'==res.json.get('status')
logger.info("tastCase13")
class WebsiteTask2(TaskSet):
@task(1)
def task21(self):
self.client.get('https://www.aliyun.com/?utm_content=se_1008364713')
logger.info("tastCase21")
class WebsiteTask3(SequentialTaskSet):
@task
def task31(self):
self.client.get('https://fanyi-pro.baidu.com/quick')
@task
def task32(self):
self.client.get('https://www.csdn.net/')
@task
def task33(self):
self.client.get("https://github.com/")
def on_stop(self):
print('停止测试时执行')
class WebsiteUser(HttpUser): #或者用WebsiteUser(HttpLocust)
#websiteTasks 和 WebsiteTask2的并发量权重相互不影响,如果并发10,各的自任务根据@task分配10;
tasks = [WebsiteTasks,WebsiteTask2] #随机列表中的任务,没有先后顺序
host = "http://localhost:8089/"
min_wait = 1000
max_wait = 5000
#wait_time:设定每个任务执行中间的间隔时间,
# between(min,max)在最大最小值中间随机取
#constant 间隔固定时间
wait_time = constant(1) #
# wait_time=between(1,2)
if __name__=='__main__':
#命令行执行locust -H http://test.com -f demo.py
os.system('locust -f LocutDemo.py') #