Skip to content

Latest commit

 

History

History
433 lines (334 loc) · 11.7 KB

File metadata and controls

433 lines (334 loc) · 11.7 KB

基础概念

本文档介绍Locust性能测试框架的核心概念和术语,帮助您更好地理解和使用框架。

🎯 核心概念

1. 性能测试基础

性能测试类型

  • 负载测试 (Load Testing): 验证系统在预期负载下的性能表现
  • 压力测试 (Stress Testing): 确定系统的性能极限和瓶颈点
  • 容量测试 (Volume Testing): 评估系统的最大处理能力
  • 稳定性测试 (Endurance Testing): 长时间运行下的系统稳定性
  • 峰值测试 (Spike Testing): 突发流量下的系统响应能力

关键性能指标

  • 响应时间 (Response Time): 从发送请求到收到响应的时间
  • 吞吐量 (Throughput): 单位时间内处理的请求数量 (TPS/RPS)
  • 并发用户数 (Concurrent Users): 同时访问系统的用户数量
  • 错误率 (Error Rate): 失败请求占总请求的百分比
  • 资源利用率: CPU、内存、网络、磁盘的使用情况

2. Locust核心概念

User类

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客户端,用于发送请求

LoadTestShape (负载模式)

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()方法: 返回当前时刻的用户数和生成速率
  • 动态调整: 根据时间动态调整负载
  • 生成速率: 每秒新增的用户数

🏗️ 框架架构概念

1. 分层架构

┌─────────────────────────────────────┐
│           用户接口层                 │  ← Web UI, CLI, API
├─────────────────────────────────────┤
│           业务逻辑层                 │  ← 测试逻辑, 数据处理
├─────────────────────────────────────┤
│           服务层                     │  ← 分析, 监控, 通知
├─────────────────────────────────────┤
│           数据访问层                 │  ← 数据库, 文件, 缓存
├─────────────────────────────────────┤
│           基础设施层                 │  ← 日志, 配置, 工具
└─────────────────────────────────────┘

2. 模块化设计

核心模块

  • 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()

3. 插件系统概念

插件类型

  • LocustPlugin: 扩展Locust核心功能
  • ReportPlugin: 自定义报告生成
  • MonitorPlugin: 自定义监控指标
  • DataPlugin: 自定义数据源
  • NotificationPlugin: 自定义通知渠道
  • LoadShapePlugin: 自定义负载模式
  • AnalysisPlugin: 自定义分析算法
  • StoragePlugin: 自定义存储后端
  • AuthenticationPlugin: 自定义认证方式
  • ProtocolPlugin: 自定义协议支持

插件生命周期

# 插件状态转换
未加载已发现已加载已初始化已启用已禁用已卸载

📊 性能分析概念

1. 分析维度

时间维度

  • 响应时间分析: 平均值、中位数、百分位数
  • 趋势分析: 时间序列分析和预测
  • 峰值分析: 识别性能峰值和异常

业务维度

  • 接口分析: 各API接口的性能表现
  • 用户行为分析: 用户路径和行为模式
  • 错误分析: 错误类型和分布

系统维度

  • 资源利用率: CPU、内存、网络使用情况
  • 瓶颈识别: 系统瓶颈点定位
  • 容量评估: 系统容量和扩展性分析

2. 评分系统

性能等级

# 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%

🔍 监控告警概念

1. 监控指标

基础指标

  • 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可用性
}

2. 告警机制

告警规则

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: 告警已抑制

💾 数据管理概念

1. 数据生成

数据类型

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生成接近真实的数据
  • 多样性: 支持多种数据类型和格式
  • 可控性: 可控制数据的数量和特征
  • 本地化: 支持中文等多种语言

2. 数据分发

分发策略

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、消息队列等

🔧 配置管理概念

1. 配置层次

配置优先级

环境变量 > 命令行参数 > 配置文件 > 默认值

配置文件类型

  • settings.toml: 主配置文件
  • plugin_config.json: 插件配置
  • .env: 环境变量配置
  • logging.conf: 日志配置

2. 环境管理

环境类型

# 开发环境
LOCUST_ENV=development

# 测试环境
LOCUST_ENV=testing

# 生产环境
LOCUST_ENV=production

配置隔离

  • 不同环境使用不同的配置文件
  • 敏感信息通过环境变量管理
  • 配置验证和默认值处理

🚀 负载模式概念

1. 基础负载模式

固定负载

# 恒定用户数
users = 50
spawn_rate = 5

阶梯负载

# 阶梯式增长
stages = [
    (10, 60),   # 10用户,持续60秒
    (20, 120),  # 20用户,持续120秒
    (50, 180),  # 50用户,持续180秒
]

2. 高级负载模式

波浪负载

  • 用途: 模拟用户访问的自然波动
  • 特点: 周期性的用户数变化
  • 场景: 日常业务流量测试

尖峰负载

  • 用途: 测试突发流量处理能力
  • 特点: 短时间内用户数急剧增加
  • 场景: 促销活动、热点事件

自适应负载

  • 用途: 根据性能指标动态调整负载
  • 特点: 智能化的负载控制
  • 场景: 容量测试、性能边界探测

📈 报告生成概念

1. 报告类型

HTML报告

  • 特点: 可视化图表、交互式界面
  • 用途: 详细的分析报告、演示汇报
  • 内容: 性能指标、趋势图、错误分析

JSON报告

  • 特点: 结构化数据、易于解析
  • 用途: 数据集成、自动化处理
  • 内容: 原始数据、统计结果

CSV报告

  • 特点: 表格格式、易于分析
  • 用途: 数据分析、Excel处理
  • 内容: 请求明细、统计汇总

2. 报告内容

性能摘要

  • 测试基本信息
  • 关键性能指标
  • 性能等级评分
  • 问题和建议

详细分析

  • 响应时间分布
  • 吞吐量趋势
  • 错误统计分析
  • 用户行为分析

🔗 相关概念

1. 分布式测试

  • Master-Worker架构: 主从节点协调
  • 负载分发: 测试负载在多节点间分配
  • 结果聚合: 多节点结果的统一收集

2. 持续集成

  • CI/CD集成: 与Jenkins、GitLab CI等集成
  • 自动化测试: 代码提交触发性能测试
  • 质量门禁: 性能指标作为发布标准

3. 云原生支持

  • 容器化部署: Docker容器支持
  • Kubernetes集成: K8s环境下的分布式测试
  • 弹性伸缩: 根据负载自动调整资源

📚 学习路径

初学者

  1. 理解基础概念
  2. 学习Locust基础用法
  3. 掌握简单的负载测试

进阶用户

  1. 学习高级负载模式
  2. 掌握性能分析方法
  3. 使用监控告警功能

高级用户

  1. 开发自定义插件
  2. 设计复杂测试场景
  3. 优化测试框架性能

🎯 最佳实践原则

设计原则

  • 单一职责: 每个模块专注特定功能
  • 开闭原则: 对扩展开放,对修改封闭
  • 依赖倒置: 依赖抽象而非具体实现

测试原则

  • 渐进式测试: 从小负载开始逐步增加
  • 真实环境: 尽可能模拟真实使用场景
  • 持续监控: 实时关注系统状态变化

理解这些核心概念将帮助您更好地使用框架进行性能测试。建议结合实际项目逐步深入学习和实践。