Files
locust/README.md

162 lines
4.5 KiB
Markdown
Raw Normal View History

2026-04-29 18:11:01 +08:00
# 压力测试工具 - Cbcs Statistics
## 📋 项目简介
这是一个基于 **Locust** 的压力测试工具,专门用于对车辆统计信息接口进行性能测试。该工具支持 OAuth2 认证和客户端证书认证,可以模拟多用户并发访问 `/api/vehicles/{vin}/statistics` 接口。
## ✨ 主要功能
- 🔐 **OAuth2 Client Credentials 认证**:自动获取 Access Token
- 📜 **客户端证书认证**:支持 PFX 格式的客户端证书
- 🚗 **多 VIN 码支持**:支持 GEN5 和 GEN6 两种车型测试
- 📊 **压力测试报告**:提供详细的性能指标和测试报告
- ⚙️ **灵活配置**:支持通过代码或命令行参数配置测试参数
## 🛠️ 技术栈
- **Python 3.x**
- **Locust**:分布式压力测试框架
- **cryptography**:处理 PFX 证书文件
- **urllib3**HTTP 请求库
## 📦 安装依赖
```bash
pip install locust cryptography urllib3
```
## ⚙️ 配置说明
在运行测试之前,请根据实际环境修改 `cbcs_statics.py` 中的配置项:
### 1. OAuth2 认证配置
```python
AUTH_URL = "https://ssoalpha.dvb.corpinter.net.cn/v1/token" # Token 获取地址
CLIENT_ID = "D650DB94-FB62-427A-980A-601BBC3081B6" # 客户端 ID
CLIENT_SECRET = "wU2G-xa08SHY_T7N.5BcFv~M94q61D3n" # 客户端密钥
SCOPE = "openid" # 授权范围
```
### 2. 业务接口配置
```python
GEN6_TEST_VIN = "LE4FG1DB1SL002567" # GEN6 测试 VIN 码
GEN5_TEST_VIN = "LE4AG4CB7SLYTKXLG" # GEN5 测试 VIN 码
API_PATH = "/api/vehicles/{vin}/statistics" # 业务接口路径
Baumuster = "174123" # 业务标识
```
### 3. 客户端证书配置
```python
key_store_file_path = "mic_certificate_W1AFJ10000Z000085.pfx" # PFX 证书文件路径
key_store_passphrase = "b04ca3c0-518d-40b0-a0d5-01c0c25350b9" # 证书密码
```
## 🚀 使用方法
### 基本用法
启动 Locust Web 界面:
```bash
locust -f cbcs_statics.py
```
然后在浏览器中打开 `http://localhost:8089`,设置以下参数:
- **Number of users**:并发用户数
- **Spawn rate**:每秒启动的用户数
- **Host**:目标服务器地址(例如:`https://your-api-domain.com`
### 无头模式Headless
直接在命令行运行压力测试:
```bash
locust -f cbcs_statics.py --headless -u 100 -r 10 -t 5m --host https://your-api-domain.com
```
参数说明:
- `-u 100`100 个并发用户
- `-r 10`:每秒启动 10 个用户
- `-t 5m`:测试持续 5 分钟
- `--host`:目标服务器地址
### 指定配置文件
如果需要从配置文件加载参数:
```bash
locust -f cbcs_statics.py --config locust.conf
```
## 📊 测试指标
Locust 会提供以下关键性能指标:
- **RPS (Requests Per Second)**:每秒请求数
- **Response Time**:响应时间(平均、中位数、最小值、最大值)
- **Failure Rate**:失败率
- **Peak RPS**:峰值请求数
## 🏷️ 标签过滤
测试任务使用了 `@tag('business_api')` 标签,可以通过以下方式只运行特定标签的测试:
```bash
locust -f cbcs_statics.py --tags business_api
```
## 📁 项目结构
```
pressure_test/
├── cbcs_statics.py # 主测试脚本
├── mic_certificate_*.pfx # 客户端证书文件(需要自行提供)
└── README.md # 项目说明文档
```
## ⚠️ 注意事项
1. **证书文件**:确保 PFX 证书文件存在于项目目录中,并且路径配置正确
2. **SSL 验证**:项目已禁用 SSL 验证(`verify=False`),适用于企业内网环境
3. **Token 复用**:所有虚拟用户共享同一个 Access Token避免频繁请求认证接口
4. **安全提醒**:请勿将包含敏感信息(如 CLIENT_SECRET、证书密码的代码提交到公共仓库
5. **网络环境**:确保测试机器能够访问目标服务器和认证服务器
## 🔧 常见问题
### Q: 如何切换测试的 VIN 码?
修改 `WebsiteUser` 类中的 `vin` 属性:
```python
class WebsiteUser(HttpUser):
vin = GEN5_TEST_VIN # 或 GEN6_TEST_VIN
```
### Q: 如何调整用户请求间隔?
修改 `wait_time` 配置:
```python
wait_time = between(1, 3) # 1-3 秒随机等待时间
```
### Q: 获取 Token 失败怎么办?
检查以下配置:
- `AUTH_URL` 是否正确
- `CLIENT_ID``CLIENT_SECRET` 是否有效
- 网络连接是否正常
- 查看控制台输出的错误信息
## 📝 许可证
本项目仅供内部测试使用。
## 👥 贡献
如有问题或建议,请联系项目维护者。