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