--
:
--
:
--
第六阶段:分布式压测与大规模测试
最后更新于:
第六阶段:分布式压测与大规模测试
一、分布式压测架构
1.1 架构设计
1 ┌─────────────────────────────────┐
2 │ Master节点 │
3 │ (调度、监控、结果汇总) │
4 └──────────────┬──────────────────┘
5 │
6 ┌────────────────────────┼────────────────────────┐
7 │ │ │
8 ┌─────▼─────┐ ┌──────▼──────┐ ┌─────▼─────┐
9 │ Worker 1 │ │ Worker 2 │ │ Worker N │
10 │ (压测节点)│ │ (压测节点) │ │ (压测节点)│
11 └─────┬─────┘ └──────┬──────┘ └─────┬─────┘
12 │ │ │
13 └────────────────────────┼────────────────────────┘
14 │
15 ┌──────────────▼──────────────────┐
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.py2.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.html4.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部署分布式压测环境:
- 创建Dockerfile
- 创建docker-compose.yml
- 启动1个Master节点和5个Worker节点
- 执行压测任务
6.2 练习2:Kubernetes部署
使用Kubernetes部署大规模压测集群:
- 创建Deployment配置
- 创建Service配置
- 部署1个Master节点和10个Worker节点
- 执行压测任务
6.3 练习3:CI/CD集成
将性能测试集成到CI/CD流程:
- 创建Jenkins Pipeline
- 配置质量门禁
- 自动生成测试报告
- 失败时发送告警通知
完
📡
👤
作者:
阿海
🌐
版权:
本站文章除特别声明外,均采用
CC BY-NC-SA 4.0
协议,转载请注明来自
阿海 Blog!
- 01JMeter界面详解 2026-07-11
- 02性能测试学习路线 2026-07-11
- 03JMeter线程组配置详解 2026-07-11