Files
locust/README.md
2026-04-29 18:11:01 +08:00

162 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 压力测试工具 - 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` 是否有效
- 网络连接是否正常
- 查看控制台输出的错误信息
## 📝 许可证
本项目仅供内部测试使用。
## 👥 贡献
如有问题或建议,请联系项目维护者。