一、背景要求
其实很多时候,根据业务场景的不同,我们要实时不均匀的负载,比如不同的时间段我们的负载量也不一样,
因为很多时候很多软件的用户访问时间都集中在晚上,白天访问量很低,那么针对这种情况我们如何来自定义压测场景呢?
其实我们Locust 支持自定义压测场景,比如(基于时间策略的阶梯式加压):
前10s和10-20s用户数为10;20-50s用户数为50;50-80s用户数为100;80s后用户数为30
二、实现逻辑
可以通过自定义列表对象,也就是压测场景,来符合我们的业务需求,例如:
'''descrition:多少秒后进入下一个阶段
“users:启动的用户数
span_rate:每秒要启动/停止的用户数'''
listShape=[
{"duration": 10, "users": 10, "spawn_rate": 10},
{"duration": 20, "users": 50, "spawn_rate": 10},
{"duration": 50, "users": 100, "spawn_rate": 10},
{"duration": 80, "users": 30, "spawn_rate": 10}
]
三、具体代码实现
import os.path
from locust import *
class UserBehavior(LoadTestShape):
'''descrition:多少秒后进入下一个阶段
“users:启动的用户数
span_rate:每秒要启动/停止的用户数'''
#自定义压测场景 前10s和10-20s用户数为10;20-50s用户数为50;50-80s用户数为100;80s后用户数为30
listShape=[
{"duration": 10, "users": 10, "spawn_rate": 10},
{"duration": 20, "users": 50, "spawn_rate": 10},
{"duration": 50, "users": 100, "spawn_rate": 10},
{"duration": 80, "users": 30, "spawn_rate": 10}
]
def tick(self):
now_time=self.get_run_time()
for item in self.listShape:
if now_time< item['descrition']:
print('当前时间为;%s,用户数:%s'%(now_time,item['users']))
data=item['users'],item['span_rate']
return data
return None
class LoadTesting(HttpUser):
wait_time = between(1,2)
host='http://127.0.0.1:8000'
def on_start(self):
print('负载测试开始')
def on_stop(self):
print('负载结束')
@task
def work_porint(self):
self.client.post('/mlogin',data={'username':'admin','password':'<PASSWORD>'})
if __name__ == '__main__':
file_path =os.path.abspath(__file__)
os.system(f'locust -f {file_path} --web-host=127.0.0.1')
四、实现效果
最后我们来看下效果把:
如果喜欢的话可以点个赞支持一下呗!
标签:spawn,10,负载,users,Locust,50,rate,均匀,用户数 From: https://www.cnblogs.com/yongheng999/p/18085371