本文档介绍Locust性能测试框架的核心概念和术语,帮助您更好地理解和使用框架。
- 负载测试 (Load Testing): 验证系统在预期负载下的性能表现
- 压力测试 (Stress Testing): 确定系统的性能极限和瓶颈点
- 容量测试 (Volume Testing): 评估系统的最大处理能力
- 稳定性测试 (Endurance Testing): 长时间运行下的系统稳定性
- 峰值测试 (Spike Testing): 突发流量下的系统响应能力
- 响应时间 (Response Time): 从发送请求到收到响应的时间
- 吞吐量 (Throughput): 单位时间内处理的请求数量 (TPS/RPS)
- 并发用户数 (Concurrent Users): 同时访问系统的用户数量
- 错误率 (Error Rate): 失败请求占总请求的百分比
- 资源利用率: CPU、内存、网络、磁盘的使用情况
from locust import HttpUser, task, between
class WebsiteUser(HttpUser):
wait_time = between(1, 3) # 用户等待时间
@task(3) # 任务权重
def view_homepage(self):
self.client.get("/")
@task(1)
def view_profile(self):
self.client.get("/profile")关键要素:
- HttpUser: 模拟HTTP用户的基类
- wait_time: 任务间的等待时间
- @task: 标记用户行为,支持权重设置
- self.client: HTTP客户端,用于发送请求
from locust import LoadTestShape
class CustomLoadShape(LoadTestShape):
def tick(self):
run_time = self.get_run_time()
if run_time < 60:
return (10, 2) # (用户数, 生成速率)
elif run_time < 120:
return (50, 5)
else:
return None # 停止测试核心概念:
- tick()方法: 返回当前时刻的用户数和生成速率
- 动态调整: 根据时间动态调整负载
- 生成速率: 每秒新增的用户数
┌─────────────────────────────────────┐
│ 用户接口层 │ ← Web UI, CLI, API
├─────────────────────────────────────┤
│ 业务逻辑层 │ ← 测试逻辑, 数据处理
├─────────────────────────────────────┤
│ 服务层 │ ← 分析, 监控, 通知
├─────────────────────────────────────┤
│ 数据访问层 │ ← 数据库, 文件, 缓存
├─────────────────────────────────────┤
│ 基础设施层 │ ← 日志, 配置, 工具
└─────────────────────────────────────┘
- analysis: 性能分析和报告生成
- monitoring: 实时监控和告警
- data_manager: 数据生成和管理
- plugins: 插件系统和扩展
- utils: 工具类和辅助函数
# 性能分析模块
from src.analysis.performance_analyzer import PerformanceAnalyzer
analyzer = PerformanceAnalyzer()
# 监控模块
from src.monitoring.performance_monitor import PerformanceMonitor
monitor = PerformanceMonitor()
# 数据管理模块
from src.data_manager.data_provider import DataProvider
provider = DataProvider()
# 插件系统
from src.plugins.plugin_manager import PluginManager
plugin_manager = PluginManager()- LocustPlugin: 扩展Locust核心功能
- ReportPlugin: 自定义报告生成
- MonitorPlugin: 自定义监控指标
- DataPlugin: 自定义数据源
- NotificationPlugin: 自定义通知渠道
- LoadShapePlugin: 自定义负载模式
- AnalysisPlugin: 自定义分析算法
- StoragePlugin: 自定义存储后端
- AuthenticationPlugin: 自定义认证方式
- ProtocolPlugin: 自定义协议支持
# 插件状态转换
未加载 → 已发现 → 已加载 → 已初始化 → 已启用 → 已禁用 → 已卸载- 响应时间分析: 平均值、中位数、百分位数
- 趋势分析: 时间序列分析和预测
- 峰值分析: 识别性能峰值和异常
- 接口分析: 各API接口的性能表现
- 用户行为分析: 用户路径和行为模式
- 错误分析: 错误类型和分布
- 资源利用率: CPU、内存、网络使用情况
- 瓶颈识别: 系统瓶颈点定位
- 容量评估: 系统容量和扩展性分析
# A级 - 优秀
response_time < 500ms AND error_rate < 0.1% AND throughput > 1000 TPS
# B级 - 良好
response_time < 1000ms AND error_rate < 1% AND throughput > 500 TPS
# C级 - 可接受
response_time < 2000ms AND error_rate < 5% AND throughput > 100 TPS
# D级 - 较差
response_time >= 2000ms OR error_rate >= 5% OR throughput <= 100 TPS- 响应时间权重: 40%
- 吞吐量权重: 30%
- 错误率权重: 20%
- 稳定性权重: 10%
- avg_response_time: 平均响应时间
- p50_response_time: 50%百分位响应时间
- p95_response_time: 95%百分位响应时间
- current_rps: 当前每秒请求数
- error_rate: 错误率百分比
- active_users: 活跃用户数
# 业务指标
custom_metrics = {
'login_success_rate': 98.5, # 登录成功率
'order_completion_rate': 95.2, # 订单完成率
'payment_success_rate': 99.1, # 支付成功率
'api_availability': 99.9 # API可用性
}from src.monitoring.performance_monitor import AlertRule
# 创建告警规则
alert_rule = AlertRule(
name="高响应时间告警", # 规则名称
metric="avg_response_time", # 监控指标
threshold=1000, # 阈值
operator=">", # 比较操作符
severity="warning", # 告警级别
enabled=True # 是否启用
)- info: 信息提示,无需立即处理
- warning: 警告,需要关注但不紧急
- critical: 严重,需要立即处理
- created: 告警已创建
- active: 告警处于活跃状态
- resolved: 告警已解决
- suppressed: 告警已抑制
from src.data_manager.data_generator import DataGenerator
generator = DataGenerator()
# 用户数据
users = generator.generate_users(count=100)
# 包含: id, name, email, phone, address 等
# 产品数据
products = generator.generate_products(count=50)
# 包含: id, name, price, category, description 等
# 订单数据
orders = generator.generate_orders(count=200)
# 包含: id, user_id, product_id, amount, status 等- 真实性: 使用Faker生成接近真实的数据
- 多样性: 支持多种数据类型和格式
- 可控性: 可控制数据的数量和特征
- 本地化: 支持中文等多种语言
from src.data_manager.data_provider import DataProvider
provider = DataProvider()
# 轮询分发
user1 = provider.get_data('users', strategy='round_robin')
user2 = provider.get_data('users', strategy='round_robin')
# 随机分发
user3 = provider.get_data('users', strategy='random')
# 顺序分发
user4 = provider.get_data('users', strategy='sequential')- 内存数据: 程序运行时生成的数据
- 文件数据: JSON、CSV、XML等文件
- 数据库数据: MySQL、PostgreSQL、MongoDB等
- 网络数据: HTTP API、消息队列等
环境变量 > 命令行参数 > 配置文件 > 默认值
- settings.toml: 主配置文件
- plugin_config.json: 插件配置
- .env: 环境变量配置
- logging.conf: 日志配置
# 开发环境
LOCUST_ENV=development
# 测试环境
LOCUST_ENV=testing
# 生产环境
LOCUST_ENV=production- 不同环境使用不同的配置文件
- 敏感信息通过环境变量管理
- 配置验证和默认值处理
# 恒定用户数
users = 50
spawn_rate = 5# 阶梯式增长
stages = [
(10, 60), # 10用户,持续60秒
(20, 120), # 20用户,持续120秒
(50, 180), # 50用户,持续180秒
]- 用途: 模拟用户访问的自然波动
- 特点: 周期性的用户数变化
- 场景: 日常业务流量测试
- 用途: 测试突发流量处理能力
- 特点: 短时间内用户数急剧增加
- 场景: 促销活动、热点事件
- 用途: 根据性能指标动态调整负载
- 特点: 智能化的负载控制
- 场景: 容量测试、性能边界探测
- 特点: 可视化图表、交互式界面
- 用途: 详细的分析报告、演示汇报
- 内容: 性能指标、趋势图、错误分析
- 特点: 结构化数据、易于解析
- 用途: 数据集成、自动化处理
- 内容: 原始数据、统计结果
- 特点: 表格格式、易于分析
- 用途: 数据分析、Excel处理
- 内容: 请求明细、统计汇总
- 测试基本信息
- 关键性能指标
- 性能等级评分
- 问题和建议
- 响应时间分布
- 吞吐量趋势
- 错误统计分析
- 用户行为分析
- Master-Worker架构: 主从节点协调
- 负载分发: 测试负载在多节点间分配
- 结果聚合: 多节点结果的统一收集
- CI/CD集成: 与Jenkins、GitLab CI等集成
- 自动化测试: 代码提交触发性能测试
- 质量门禁: 性能指标作为发布标准
- 容器化部署: Docker容器支持
- Kubernetes集成: K8s环境下的分布式测试
- 弹性伸缩: 根据负载自动调整资源
- 理解基础概念
- 学习Locust基础用法
- 掌握简单的负载测试
- 学习高级负载模式
- 掌握性能分析方法
- 使用监控告警功能
- 开发自定义插件
- 设计复杂测试场景
- 优化测试框架性能
- 单一职责: 每个模块专注特定功能
- 开闭原则: 对扩展开放,对修改封闭
- 依赖倒置: 依赖抽象而非具体实现
- 渐进式测试: 从小负载开始逐步增加
- 真实环境: 尽可能模拟真实使用场景
- 持续监控: 实时关注系统状态变化
理解这些核心概念将帮助您更好地使用框架进行性能测试。建议结合实际项目逐步深入学习和实践。