Skip to content

Latest commit

 

History

History
342 lines (273 loc) · 8.55 KB

File metadata and controls

342 lines (273 loc) · 8.55 KB

⚡ 压力测试指南

欢迎来到压力测试的世界!在这里,我们将使用Locust这个强大的工具,给你的系统来一场"压力山大"的测试。别担心,我们会一步步教你如何驯服这群"蝗虫"!

🦗 什么是Locust压力测试?

Locust简介

Locust是一个开源的负载测试工具,它可以模拟成千上万的用户同时访问你的系统。就像一群蝗虫一样,密密麻麻地"攻击"你的服务器,测试系统在高并发下的表现。

为什么选择Locust?

  • 🐍 Python编写: 测试脚本简单易懂
  • 🌐 Web界面: 实时监控测试过程
  • 📊 丰富报告: 详细的性能数据分析
  • 🔄 分布式测试: 支持多机器协同压测
  • 🎯 灵活配置: 可以模拟各种用户行为

🎯 压力测试核心概念

关键指标

  • QPS (Queries Per Second): 每秒查询数
  • 响应时间: 请求从发出到收到响应的时间
  • 并发用户数: 同时在线的虚拟用户数量
  • 错误率: 失败请求占总请求的比例
  • 吞吐量: 单位时间内处理的数据量

测试类型

  • 🔥 负载测试: 验证系统在预期负载下的表现
  • 压力测试: 找到系统的性能极限
  • 💥 峰值测试: 测试系统在突发流量下的表现
  • ⏱️ 稳定性测试: 长时间运行验证系统稳定性

📝 压测用例管理

同步压测用例

和接口测试一样,压测用例也可以自动同步:

操作步骤

  1. 进入 "压力测试""用例管理"
  2. 点击 "同步压测用例" 按钮
  3. 选择要同步的模块
  4. 等待同步完成

压测用例结构

# Locust测试脚本示例
from locust import HttpUser, task, between

class WebsiteUser(HttpUser):
    wait_time = between(1, 3)  # 用户操作间隔1-3秒
    
    @task(3)  # 权重为3,执行频率更高
    def view_homepage(self):
        self.client.get("/")
    
    @task(1)  # 权重为1
    def view_profile(self):
        self.client.get("/profile")

查看压测用例

用例列表显示信息:

用例ID: locust_001
用例名称: 首页访问压测
所属模块: homepage_module
测试场景: 用户浏览首页
路径描述: 模拟用户访问首页的行为
标签: homepage, basic
更新时间: 2024-01-01 10:00:00

📦 压测套件管理

创建压测套件

基本配置

套件名称: 电商网站压测套件
套件描述: 模拟用户浏览商品、加购物车、下单等行为
所属项目: 电商项目
测试环境: test
压测类型: 负载测试

高级配置

用户行为权重:
- 浏览商品: 60%
- 搜索商品: 20%
- 加购物车: 15%
- 下单支付: 5%

用户增长策略:
- 启动用户数: 10
- 最大用户数: 1000
- 增长速率: 10用户/秒
- 运行时长: 10分钟

🚀 运行压力测试

快速开始压测

基础压测配置

  1. 选择压测套件
  2. 设置基本参数:
    并发用户数: 100
    增长速率: 10用户/秒
    运行时长: 5分钟
    目标主机: http://test.example.com
    
  3. 点击 "开始压测"

高级压测配置

{
  "users": 1000,           // 最大用户数
  "spawn_rate": 50,        // 每秒启动用户数
  "run_time": "10m",       // 运行时长
  "host": "https://api.example.com",
  "tags": ["api", "core"], // 标签过滤
  "exclude_tags": ["slow"] // 排除标签
}

分布式压测

当单机压测能力不够时,可以使用分布式压测:

配置Master节点

# 启动Master节点
locust -f locustfile.py --master --web-host=0.0.0.0

配置Worker节点

# 启动Worker节点
locust -f locustfile.py --worker --master-host=192.168.1.100

平台中的分布式配置

Master节点: 192.168.1.100:8089
Worker节点: 
- 192.168.1.101
- 192.168.1.102
- 192.168.1.103
总并发能力: 4000用户

📊 实时监控

压测控制台

压测运行时,可以实时查看:

核心指标

  • 📈 当前用户数: 实时在线虚拟用户
  • QPS: 当前每秒请求数
  • ⏱️ 响应时间: 平均/最小/最大响应时间
  • 错误率: 实时错误百分比

实时图表

  • 用户数增长曲线: 显示用户数随时间变化
  • QPS变化曲线: 显示请求量变化趋势
  • 响应时间分布: 显示响应时间分布情况
  • 错误率趋势: 显示错误率变化

压测控制操作

  • ⏸️ 暂停压测: 暂停用户增长,保持当前用户数
  • ▶️ 继续压测: 恢复用户增长
  • 🛑 停止压测: 立即停止所有压测
  • 📊 调整参数: 动态调整用户数和增长速率

📈 压测报告分析

性能指标报告

请求统计

总请求数: 125,000
成功请求: 123,500 (98.8%)
失败请求: 1,500 (1.2%)
平均QPS: 2,083
峰值QPS: 2,500

响应时间分析

平均响应时间: 45ms
50%分位数: 35ms
90%分位数: 78ms
95%分位数: 120ms
99%分位数: 250ms
最大响应时间: 1,200ms

错误分析

连接超时: 800次 (53.3%)
HTTP 500错误: 500次 (33.3%)
HTTP 404错误: 200次 (13.4%)

性能图表

响应时间趋势图

显示整个压测过程中响应时间的变化趋势,帮助识别性能瓶颈出现的时间点。

QPS变化图

展示每秒请求数的变化,可以看出系统的处理能力变化。

用户数增长图

显示虚拟用户数的增长过程,验证压测是否按预期执行。

报告导出

  • HTML报告: 包含完整图表的网页报告
  • CSV数据: 原始数据,便于进一步分析
  • PDF报告: 适合打印和存档
  • JSON数据: 用于系统集成和自动化分析

🎯 压测场景设计

常见压测场景

电商网站压测

class EcommerceUser(HttpUser):
    wait_time = between(1, 5)
    
    def on_start(self):
        # 用户登录
        self.login()
    
    @task(40)
    def browse_products(self):
        # 浏览商品
        self.client.get("/products")
    
    @task(20)
    def search_products(self):
        # 搜索商品
        self.client.get("/search?q=手机")
    
    @task(15)
    def add_to_cart(self):
        # 加购物车
        self.client.post("/cart/add", json={"product_id": 123})
    
    @task(5)
    def checkout(self):
        # 下单
        self.client.post("/order/create")

API接口压测

class ApiUser(HttpUser):
    wait_time = between(0.5, 2)
    
    @task(50)
    def get_user_info(self):
        self.client.get("/api/user/info")
    
    @task(30)
    def update_user_info(self):
        self.client.put("/api/user/info", json={"name": "test"})
    
    @task(20)
    def get_user_orders(self):
        self.client.get("/api/user/orders")

压测策略

阶梯式压测

阶段1: 0-100用户 (2分钟)
阶段2: 100-500用户 (3分钟)
阶段3: 500-1000用户 (5分钟)
阶段4: 保持1000用户 (10分钟)

波浪式压测

波峰1: 0-500用户 (5分钟)
波谷1: 500-100用户 (2分钟)
波峰2: 100-800用户 (5分钟)
波谷2: 800-200用户 (2分钟)

🔧 故障排除

常见问题

压测无法启动

问题: 点击开始压测后没有反应 解决方案:

  1. 检查Locust服务是否正常运行
  2. 确认压测套件配置是否正确
  3. 验证目标服务器是否可访问
  4. 检查防火墙和网络配置

压测结果异常

问题: 错误率过高或响应时间异常 解决方案:

  1. 检查目标服务器性能状况
  2. 确认压测参数是否合理
  3. 验证网络带宽是否充足
  4. 检查压测脚本逻辑是否正确

分布式压测失败

问题: Worker节点无法连接Master 解决方案:

  1. 检查网络连通性
  2. 确认Master节点IP和端口
  3. 验证防火墙设置
  4. 检查Locust版本兼容性

💡 最佳实践

压测前准备

  1. 环境隔离: 使用专门的测试环境
  2. 数据准备: 准备充足的测试数据
  3. 监控就绪: 确保系统监控正常
  4. 通知机制: 设置压测开始/结束通知

压测执行建议

  1. 逐步增压: 不要一开始就用最大并发
  2. 实时监控: 密切关注系统指标
  3. 及时调整: 根据情况调整压测参数
  4. 记录问题: 及时记录发现的问题

结果分析要点

  1. 关注趋势: 不只看平均值,要看趋势变化
  2. 定位瓶颈: 找出性能瓶颈的具体位置
  3. 对比分析: 与历史数据进行对比
  4. 制定优化: 根据结果制定优化方案

🎉 压测大师! 你已经掌握了压力测试的精髓。记住,压测不是为了"压垮"系统,而是为了让系统更强壮!