09-Locust-自定义负载策略

简介: 09-Locust-自定义负载策略

前言

  • 有时候我们需要一个完全定制的负载测试,而这并不能通过简单地设置或改变用户数量和刷出率而实现。例如,可能希望在自定义时间生成一个负载尖峰或上升或下降。通过使用LoadTestShape类,您可以在任何时候完全控制用户计数和生成速率。

基于时间峰值策略

  • 每秒生成10个用户,持续时间60s
1. # -*- coding: utf-8 -*-
2. # @Time    : 2021/5/2
3. # @Author  : 大海
4. 
5. import os
6. from locust import LoadTestShape, task, HttpUser, constant
7. 
8. 
9. class MyUser(HttpUser):
10. # 请求间隔时间
11.     wait_time = constant(1)
12.     host = 'https://www.baidu.com'
13. 
14.     @task
15. def my_task(self):
16.         self.client.get('/')
17. 
18. 
19. class MyCustomShape(LoadTestShape):
20. # 设置压测持续时长,单位秒
21.     time_limit = 60
22. # 每秒启动/停止用户数
23.     spawn_rate = 10
24. 
25. def tick(self):
26. """
27.         返回一个元组,包含两值:
28.             user_count -- 总用户数
29.             spawn_rate -- 每秒启动/停止用户数
30.         返回None时,停止负载测试
31.         """
32. # 获取压测执行的时间
33.         run_time = self.get_run_time()
34. 
35. # 运行时长在压测最大时长内,则继续执行
36. if run_time < self.time_limit:
37.             user_count = round(run_time, -1)
38. return user_count, self.spawn_rate
39. return None
40. 
41. 
42. if __name__ == '__main__':
43.     file_path = os.path.abspath(__file__)
44.     os.system(f'locust -f {file_path} --web-host=127.0.0.1')

基于步骤负载策略

  • 每30秒增加10个用户,持续10分钟
1. # -*- coding: utf-8 -*-
2. # @Time    : 2021/5/2
3. # @Author  : 大海
4. import math
5. import os
6. from locust import HttpUser, TaskSet, task, constant
7. from locust import LoadTestShape
8. 
9. 
10. class UserTasks(TaskSet):
11.     @task
12. def my_task(self):
13.         self.client.get("/")
14. 
15. 
16. class WebsiteUser(HttpUser):
17.     wait_time = constant(0.5)
18.     tasks = [UserTasks]
19.     host = 'https://www.baidu.com'
20. 
21. 
22. class StepShape(LoadTestShape):
23. """
24.         step_time -- 步骤之间的时间
25.         step_load -- 用户在每一步增加数量
26.         spawn_rate -- 用户在每一步式每秒停止/启动数量
27.         time_limit -- 时间限制,以秒为单位
28.     """
29. 
30.     step_time = 30
31.     step_load = 10
32.     spawn_rate = 10
33.     time_limit = 600
34. 
35. def tick(self):
36.         run_time = self.get_run_time()
37. 
38. if run_time > self.time_limit:
39. return None
40. 
41.         current_step = math.floor(run_time / self.step_time) + 1
42. return current_step * self.step_load, self.spawn_rate
43. 
44. 
45. if __name__ == '__main__':
46.     file_path = os.path.abspath(__file__)
47.     os.system(f'locust -f {file_path} --web-host=127.0.0.1')

基于时间阶段负载策略

  • 前10s和10-20s用户数为10;20-50s用户数为50;50-80s用户数为100;80s后用户数为30
1. # -*- coding: utf-8 -*-
2. # @Time    : 2021/5/2
3. # @Author  : 大海
4. 
5. import os
6. from locust import HttpUser, TaskSet, task, constant
7. from locust import LoadTestShape
8. 
9. 
10. class UserTasks(TaskSet):
11.     @task
12. def my_task(self):
13.         self.client.get("/")
14. 
15. 
16. class WebsiteUser(HttpUser):
17.     wait_time = constant(0.5)
18.     tasks = [UserTasks]
19.     host = 'https://baidu.com'
20. 
21. 
22. class TimeShape(LoadTestShape):
23. """
24.         duration -- 多少秒后进入下一个阶段
25.         users -- 用户数
26.         spawn_rate -- 每秒要启动/停止的用户数
27.     """
28. 
29.     stages = [
30.         {"duration": 10, "users": 10, "spawn_rate": 10},
31.         {"duration": 20, "users": 50, "spawn_rate": 10},
32.         {"duration": 50, "users": 100, "spawn_rate": 10},
33.         {"duration": 80, "users": 30, "spawn_rate": 10}
34.     ]
35. 
36. def tick(self):
37.         run_time = self.get_run_time()
38. 
39. for stage in self.stages:
40. if run_time < stage["duration"]:
41.                 tick_data = (stage["users"], stage["spawn_rate"])
42. return tick_data
43. 
44. return None
45. 
46. 
47. if __name__ == '__main__':
48.     file_path = os.path.abspath(__file__)
49.     os.system(f'locust -f {file_path} --web-host=127.0.0.1')

 

相关文章
|
安全 测试技术 数据安全/隐私保护
【好用的个人工具】Docker环境下部署FileDrop文件共享工具
【2月更文挑战第13天】Docker环境下部署FileDrop文件共享工具
400 2
|
XML 数据格式 Python
Python实用记录(五):labelImg安装和使用-----看这篇就够了!
这篇文章介绍了在Windows 10系统中使用Anaconda3安装labelImg工具的方法,包括通过pip安装相关包和从GitHub下载配置,以及一些使用技巧,如修改预定义类别和自动保存功能。
1595 3
|
XML 测试技术 Linux
性能测试之Locust(完整版)
性能测试之Locust(完整版)
3289 2
|
11月前
|
运维 Prometheus 监控
🎉 WatchAlert - 开源多数据源告警引擎【运维研发必备能力】
WatchAlert 是一个开源的多数据源告警引擎,支持从 Prometheus、Elasticsearch、Kubernetes 等多种数据源获取监控数据,并根据预定义的告警规则触发告警。它具备多数据源支持、灵活的告警规则、多渠道告警通知、可扩展架构和高性能等核心特性,帮助团队更高效地监控和响应问题。项目地址:https://github.com/opsre/WatchAlert
1455 18
🎉 WatchAlert - 开源多数据源告警引擎【运维研发必备能力】
|
负载均衡 Dubbo 应用服务中间件
Nginx系列教程(11) - HTTP动态负载均衡(一)
Nginx系列教程(11) - HTTP动态负载均衡(一)
480 0
|
Kubernetes 监控 测试技术
k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案
k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案
533 0
|
机器学习/深度学习 人工智能 TensorFlow
机器学习项目实战:使用Python实现图像识别
在AI时代,Python借助TensorFlow和Keras实现图像识别,尤其在监控、驾驶、医疗等领域有广泛应用。本文通过构建CNN模型识别MNIST手写数字,展示图像识别流程:安装库→加载预处理数据→构建模型→训练→评估。简单项目为深度学习入门提供基础,为进一步探索复杂场景打下基础。
1373 5
|
Web App开发 Java 测试技术
秒懂HTTPS接口(JMeter压测篇)
【5月更文挑战第11天】秒懂HTTPS接口(JMeter压测篇)
3409 2
秒懂HTTPS接口(JMeter压测篇)
|
JSON 数据库 开发者
FastAPI入门指南:Python开发者必看——从零基础到精通,掌握FastAPI的全栈式Web开发流程,解锁高效编码的秘密!
【8月更文挑战第31天】在当今的Web开发领域,FastAPI迅速成为开发者的热门选择。本指南带领Python开发者快速入门FastAPI,涵盖环境搭建、基础代码、路径参数、请求体处理、数据库操作及异常处理等内容,帮助你轻松掌握这一高效Web框架。通过实践操作,你将学会构建高性能的Web应用,并为后续复杂项目打下坚实基础。
712 0
|
监控 Linux 网络安全
linux中启动rpc.rstat监控
请注意,rpc.rstatd服务通常用于收集远程系统的性能统计信息,例如CPU利用率、内存使用等。在使用rpc.rstatd服务之前,你应该确保了解其功能、用法和安全性,并根据需要进行适当的配置和调整。
306 0
下一篇
oss云网关配置