头像
淇迹时刻
-- : -- : --
切换主题色
-- : -- : --

第六阶段:分布式压测与大规模测试

最后更新于:

第六阶段:分布式压测与大规模测试

一、分布式压测架构

1.1 架构设计

 1                    ┌─────────────────────────────────┐
 2                    │           Master节点             │
 3                    │   (调度、监控、结果汇总)          │
 4                    └──────────────┬──────────────────┘
 5 6          ┌────────────────────────┼────────────────────────┐
 7          │                        │                        │
 8    ┌─────▼─────┐           ┌──────▼──────┐           ┌─────▼─────┐
 9    │  Worker 1 │           │  Worker 2   │           │  Worker N │
10    │  (压测节点)│           │  (压测节点)  │           │  (压测节点)│
11    └─────┬─────┘           └──────┬──────┘           └─────┬─────┘
12          │                        │                        │
13          └────────────────────────┼────────────────────────┘
1415                    ┌──────────────▼──────────────────┐
16                    │         目标系统集群              │
17                    │  ┌────────┬────────┬────────┐   │
18                    │  │ Node 1 │ Node 2 │ Node N │   │
19                    │  └────────┴────────┴────────┘   │
20                    └─────────────────────────────────┘

1.2 组件职责

组件职责
Master调度任务、收集结果、实时监控、生成报告
Worker执行压测任务、模拟用户行为、上报数据
目标系统被测试的应用系统

1.3 通信机制

1Master ↔ Worker:
2    - 任务分发(通过HTTP/RPC)
3    - 状态上报(通过HTTP/WebSocket)
4    - 结果汇总(通过HTTP/RPC)

二、容器化部署

2.1 Docker部署

Dockerfile

 1# Locust Dockerfile
 2FROM python:3.9-slim
 3
 4WORKDIR /locust
 5
 6COPY requirements.txt .
 7RUN pip install --no-cache-dir -r requirements.txt
 8
 9COPY locustfile.py .
10
11EXPOSE 8089 5557 5558
12
13CMD ["locust", "-f", "locustfile.py"]

docker-compose.yml

 1version: '3.8'
 2
 3services:
 4  master:
 5    build: .
 6    command: locust -f locustfile.py --master
 7    ports:
 8      - "8089:8089"
 9      - "5557:5557"
10      - "5558:5558"
11    volumes:
12      - ./locustfile.py:/locust/locustfile.py
13
14  worker:
15    build: .
16    command: locust -f locustfile.py --worker --master-host=master
17    deploy:
18      replicas: 5
19    volumes:
20      - ./locustfile.py:/locust/locustfile.py

2.2 Kubernetes部署

Deployment配置

 1apiVersion: apps/v1
 2kind: Deployment
 3metadata:
 4  name: locust-master
 5spec:
 6  replicas: 1
 7  selector:
 8    matchLabels:
 9      app: locust-master
10  template:
11    metadata:
12      labels:
13        app: locust-master
14    spec:
15      containers:
16      - name: locust-master
17        image: locust:latest
18        command: ["locust", "-f", "locustfile.py", "--master"]
19        ports:
20        - containerPort: 8089
21        - containerPort: 5557
22        - containerPort: 5558
23---
24apiVersion: apps/v1
25kind: Deployment
26metadata:
27  name: locust-worker
28spec:
29  replicas: 10
30  selector:
31    matchLabels:
32      app: locust-worker
33  template:
34    metadata:
35      labels:
36        app: locust-worker
37    spec:
38      containers:
39      - name: locust-worker
40        image: locust:latest
41        command: ["locust", "-f", "locustfile.py", "--worker", "--master-host=locust-master"]

Service配置

 1apiVersion: v1
 2kind: Service
 3metadata:
 4  name: locust-master
 5spec:
 6  type: NodePort
 7  selector:
 8    app: locust-master
 9  ports:
10  - name: web
11    port: 8089
12    nodePort: 30089
13  - name: master
14    port: 5557
15  - name: master-pub
16    port: 5558

三、大规模测试场景设计

3.1 场景类型

混合场景

1场景描述:模拟真实用户行为混合
2    ├── 浏览首页(30%)
3    ├── 搜索商品(20%)
4    ├── 查看商品详情(25%)
5    ├── 加入购物车(10%)
6    ├── 下单购买(10%)
7    └── 查看订单(5%)

峰值场景

1场景描述:模拟流量峰值
2    ├── 正常流量:1000并发
3    ├── 峰值流量:5000并发(持续30分钟)
4    └── 恢复正常:1000并发

持续场景

1场景描述:长时间稳定性测试
2    ├── 持续时间:72小时
3    ├── 并发用户:2000
4    └── 预期:系统稳定运行,无内存泄漏

3.2 数据准备

测试数据生成

 1import random
 2import json
 3
 4def generate_user_data(count=10000):
 5    users = []
 6    for i in range(count):
 7        user = {
 8            "id": i + 1,
 9            "username": f"user_{i:06d}",
10            "email": f"user_{i:06d}@example.com",
11            "password": "password123",
12            "status": random.choice(["active", "inactive"]),
13            "created_at": f"2026-0{i % 12 + 1:02d}-{i % 28 + 1:02d}T00:00:00"
14        }
15        users.append(user)
16    
17    with open("users.json", "w") as f:
18        json.dump(users, f, indent=2)
19
20generate_user_data(100000)

数据分布

1数据分布策略:
2    ├── 热门商品:10%的商品占90%的访问量
3    ├── 活跃用户:20%的用户占80%的访问量
4    └── 时间分布:模拟真实流量曲线

3.3 环境隔离

1测试环境隔离:
2    ├── 网络隔离:使用独立VPC
3    ├── 资源隔离:使用独立服务器/容器
4    ├── 数据隔离:使用测试数据库
5    └── 监控隔离:使用独立监控系统

四、CI/CD集成性能测试

4.1 Jenkins集成

Jenkins Pipeline

 1pipeline {
 2    agent any
 3    
 4    stages {
 5        stage('Build') {
 6            steps {
 7                sh 'mvn clean package'
 8            }
 9        }
10        
11        stage('Deploy') {
12            steps {
13                sh 'kubectl apply -f deployment.yaml'
14                sh 'kubectl rollout status deployment/app'
15            }
16        }
17        
18        stage('Performance Test') {
19            steps {
20                sh 'locust -f locustfile.py --host=http://localhost:8080 -u 100 -r 10 --headless -t 5m --html=report.html'
21            }
22            post {
23                always {
24                    publishHTML(target: [
25                        allowMissing: false,
26                        alwaysLinkToLastBuild: false,
27                        keepAll: true,
28                        reportDir: '.',
29                        reportFiles: 'report.html',
30                        reportName: 'Performance Report'
31                    ])
32                }
33                failure {
34                    echo '性能测试失败,通知团队'
35                    slackSend channel: '#performance', message: "性能测试失败: ${BUILD_URL}"
36                }
37            }
38        }
39    }
40}

4.2 GitHub Actions集成

workflow.yml

 1name: Performance Test
 2
 3on:
 4  push:
 5    branches: [ main ]
 6  pull_request:
 7    branches: [ main ]
 8
 9jobs:
10  performance-test:
11    runs-on: ubuntu-latest
12    
13    steps:
14    - uses: actions/checkout@v4
15    
16    - name: Set up Python
17      uses: actions/setup-python@v5
18      with:
19        python-version: '3.9'
20    
21    - name: Install dependencies
22      run: |
23        python -m pip install --upgrade pip
24        pip install locust
25    
26    - name: Run performance test
27      run: |
28        locust -f locustfile.py --host=http://localhost:8080 -u 100 -r 10 --headless -t 5m --html=report.html
29    
30    - name: Upload report
31      uses: actions/upload-artifact@v4
32      with:
33        name: performance-report
34        path: report.html

4.3 质量门禁

1性能质量门禁:
2    ├── 响应时间:P95响应时间 < 500ms
3    ├── 吞吐量:> 1000请求/秒
4    ├── 错误率:< 1%
5    └── 资源利用率:CPU < 70%,内存 < 80%

五、大规模测试执行

5.1 执行流程

 11. 环境准备
 2    ├── 部署目标系统
 3    ├── 部署监控系统
 4    └── 部署压测集群
 5
 62. 测试执行
 7    ├── 启动压测集群
 8    ├── 逐步增加负载
 9    ├── 持续监控
10    └── 收集数据
11
123. 结果分析
13    ├── 整理测试数据
14    ├── 分析性能指标
15    ├── 定位性能瓶颈
16    └── 编写测试报告
17
184. 优化迭代
19    ├── 实施优化方案
20    ├── 重新测试
21    └── 验证优化效果

5.2 负载模式

阶梯式负载

1时间线:
2    0-5分钟:100并发
3    5-10分钟:500并发
4    10-15分钟:1000并发
5    15-20分钟:2000并发
6    20-25分钟:3000并发
7    25-30分钟:保持峰值

波浪式负载

1时间线:
2    0-5分钟:1000并发 → 2000并发 → 1000并发
3    5-10分钟:1000并发 → 2000并发 → 1000并发
4    ...(重复多次)

5.3 监控与告警

 1实时监控:
 2    ├── 系统指标:CPU、内存、磁盘、网络
 3    ├── 应用指标:响应时间、吞吐量、错误率
 4    ├── 数据库指标:连接数、慢查询、锁等待
 5    └── 中间件指标:队列长度、消息延迟
 6
 7告警规则:
 8    ├── CPU使用率 > 90% 持续5分钟
 9    ├── 内存使用率 > 95%
10    ├── 错误率 > 5%
11    └── 响应时间P95 > 2秒

六、实战练习

6.1 练习1:Docker部署

使用Docker部署分布式压测环境:

  1. 创建Dockerfile
  2. 创建docker-compose.yml
  3. 启动1个Master节点和5个Worker节点
  4. 执行压测任务

6.2 练习2:Kubernetes部署

使用Kubernetes部署大规模压测集群:

  1. 创建Deployment配置
  2. 创建Service配置
  3. 部署1个Master节点和10个Worker节点
  4. 执行压测任务

6.3 练习3:CI/CD集成

将性能测试集成到CI/CD流程:

  1. 创建Jenkins Pipeline
  2. 配置质量门禁
  3. 自动生成测试报告
  4. 失败时发送告警通知

最新文章