当前位置:网站首页>Locust performance test 4 (custom load Policy)
Locust performance test 4 (custom load Policy)
2022-07-07 09:08:00 【Song_ Lun】
Preface
Sometimes we need a fully customized load test , This cannot be achieved by simply setting or changing the number of users and the brush out rate . for example , You may want to generate a load spike or rise or fall at a custom time . By using LoadTestShape class , You can completely control the user count and generation rate at any time .
Time based peak strategy
There is such a need , A login interface has 10 Users log in at the same time , And continue 180 second , So we need to set it like this ? I'm going to use LoadTestShape class
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/26 10:11 In the morning
# @Name : peilun
# @File : Testshape_test.py
from locust import LoadTestShape, task, HttpUser, constant
import json
""" Custom load policy Generate every second 5 Users , The duration of the 180s """
class MyUser(HttpUser):
# Request interval
wait_time = constant(1)
host = 'https://www.baidu.com'
url = '/api/user/login'
headers = {
'Content-Type': 'application/json'}
@task
def on_start(self):
global Authorization
# Login is performed only once obtain token
print(" User initialization -- Log in and get token")
self.data = {
"username":"123456","password":"123456"}
respon = self.client.post(self.url, headers = self.headers, data=json.dumps(self.data), name=' The user login ', verify=False, timeout=10)
resp_dict = respon.json()
# print(f' The response data is :{resp_dict}')
if respon.status_code == 200:
# print(resp_dict['msg'])
print(f' The response data is :{
resp_dict}')
Authorization = respon.headers['Authorization']
return Authorization
else:
respon.failure(resp_dict['msg'])
# Generate every second 10 Users , The duration of the 180s
class MyCustomShape(LoadTestShape):
# Set the duration of pressure measurement , Unit second
time_limit = 180
# Start every second / Number of users stopped
spawn_rate = 10
def tick(self):
""" Returns a tuple , Contains two values : user_count -- Total users spawn_rate -- Start every second / Number of users stopped return None when , Stop the load test """
# Get the execution time of pressure test
run_time = self.get_run_time()
# The operation duration is within the maximum duration of pressure measurement , Then continue
if run_time < self.time_limit:
user_count = round(run_time, -1)
return user_count, self.spawn_rate
return None
if __name__ == '__main__':
import os
os.system("locust -f Testshape_test.py")

Step based load policy
Every time 30 Second increase 5 Users , continued 10 minute
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/26 10:11 In the morning
# @Name : peilun
# @File : Testshape_test2.py
from locust import LoadTestShape, task, HttpUser, constant
import json
import math
""" Custom load policy Every time 30 Second increase 5 Users , continued 10 minute """
class MyUser(HttpUser):
# Request interval
wait_time = constant(1)
host = 'https://www.baidu.com'
url = '/api/user/login'
headers = {
'Content-Type': 'application/json'}
@task
def on_start(self):
global Authorization
# Login is performed only once obtain token
print(" User initialization -- Log in and get token")
self.data = {
"username":"123456","password":"123456"}
respon = self.client.post(self.url, headers = self.headers, data=json.dumps(self.data), name=' The user login ', verify=False, timeout=10)
resp_dict = respon.json()
# print(f' The response data is :{resp_dict}')
if respon.status_code == 200:
# print(resp_dict['msg'])
print(f' The response data is :{
resp_dict}')
Authorization = respon.headers['Authorization']
return Authorization
else:
respon.failure(resp_dict['msg'])
# Generate every second 10 Users , The duration of the 180s
class MyCustomShape(LoadTestShape):
""" step_time -- Time between steps step_load -- Users increase the number at each step spawn_rate -- The user stops every second in every step / Number of starts time_limit -- The time limit , In seconds """
step_time = 30
step_load = 5
spawn_rate = 10
time_limit = 600
def tick(self):
# Get the time to perform the pressure test
run_time = self.get_run_time()
# The running time is beyond the time limit , Do not perform
if run_time > self.time_limit:
return None
current_step = math.floor(run_time / self.step_time) + 1
return current_step * self.step_load, self.spawn_rate
if __name__ == '__main__':
import os
os.system("locust -f Testshape_test2.py")

Load policy based on time period
front 10s and 10-20s The number of users is 10;20-50s The number of users is 50;50-80s The number of users is 100;80s The number of subsequent users is 30
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/26 10:11 In the morning
# @Name : peilun
# @File : Testshape_test3.py
from locust import LoadTestShape, task, HttpUser, constant
import json
""" Custom load policy front 10s and 10-20s The number of users is 10;20-50s The number of users is 50;50-80s The number of users is 100;80s The number of subsequent users is 30 """
class MyUser(HttpUser):
# Request interval
wait_time = constant(1)
host = 'https://www.baidu.com'
url = '/api/user/login'
headers = {
'Content-Type': 'application/json'}
@task
def on_start(self):
global Authorization
# Login is performed only once obtain token
print(" User initialization -- Log in and get token")
self.data = {
"username":"123456","password":"123456"}
respon = self.client.post(self.url, headers = self.headers, data=json.dumps(self.data), name=' The user login ', verify=False, timeout=10)
resp_dict = respon.json()
# print(f' The response data is :{resp_dict}')
if respon.status_code == 200:
# print(resp_dict['msg'])
print(f' The response data is :{
resp_dict}')
Authorization = respon.headers['Authorization']
return Authorization
else:
respon.failure(resp_dict['msg'])
class MyCustomShape(LoadTestShape):
""" duration -- How many seconds to enter the next stage users -- The number of users spawn_rate -- Start every second / Number of users stopped """
stages = [
{
"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):
run_time = self.get_run_time()
for stage in self.stages:
if run_time < stage["duration"]:
tick_data = (stage["users"], stage["spawn_rate"])
return tick_data
if __name__ == '__main__':
import os
os.system("locust -f Testshape_test3.py")

边栏推荐
猜你喜欢

Interview question: general layout and wiring principles of high-speed PCB

Reading notes of pyramid principle

C语言指针(中篇)

Upgrade Alibaba cloud RDS (relational database service) instance to com mysql. jdbc. exceptions. Troubleshooting of jdbc4.communicationsexception

Serial port experiment - simple data sending and receiving

2022-07-06 unity core 9 - 3D animation

数据在内存中的存储

STM32 serial port register library function configuration method

C语言指针(上篇)

LED模拟与数字调光
随机推荐
Systick tick timer
How can I apply for a PMP certificate?
硬核分享:硬件工程师常用工具包
为不同类型设备构建应用的三大更新 | 2022 I/O 重点回顾
The longest ascending subsequence model acwing 1017 Strange thief Kidd's glider
模拟卷Leetcode【普通】1557. 可以到达所有点的最少点数目
H3C VXLAN配置
阿里p8手把手教你,自动化测试应该如何实现多线程?赶紧码住
C语言指针(特别篇)
PPT模板、素材下载网站(纯干货,建议收藏)
Several methods of calculating the average value of two numbers
寄存器地址名映射
C语言指针(习题篇)
Several common database connection methods
面试题:高速PCB一般布局、布线原则
STM32 clock system
Led analog and digital dimming
数字三角形模型 AcWing 1027. 方格取数
RuntimeError: Calculated padded input size per channel: (1 x 1). Kernel size: (5 x 5). Kernel size c
OpenGL三维图形绘制