压力测试工具 - 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 请求库
📦 安装依赖
pip install locust cryptography urllib3
⚙️ 配置说明
在运行测试之前,请根据实际环境修改 cbcs_statics.py 中的配置项:
1. OAuth2 认证配置
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. 业务接口配置
GEN6_TEST_VIN = "LE4FG1DB1SL002567" # GEN6 测试 VIN 码
GEN5_TEST_VIN = "LE4AG4CB7SLYTKXLG" # GEN5 测试 VIN 码
API_PATH = "/api/vehicles/{vin}/statistics" # 业务接口路径
Baumuster = "174123" # 业务标识
3. 客户端证书配置
key_store_file_path = "mic_certificate_W1AFJ10000Z000085.pfx" # PFX 证书文件路径
key_store_passphrase = "b04ca3c0-518d-40b0-a0d5-01c0c25350b9" # 证书密码
🚀 使用方法
基本用法
启动 Locust Web 界面:
locust -f cbcs_statics.py
然后在浏览器中打开 http://localhost:8089,设置以下参数:
- Number of users:并发用户数
- Spawn rate:每秒启动的用户数
- Host:目标服务器地址(例如:
https://your-api-domain.com)
无头模式(Headless)
直接在命令行运行压力测试:
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:目标服务器地址
指定配置文件
如果需要从配置文件加载参数:
locust -f cbcs_statics.py --config locust.conf
📊 测试指标
Locust 会提供以下关键性能指标:
- RPS (Requests Per Second):每秒请求数
- Response Time:响应时间(平均、中位数、最小值、最大值)
- Failure Rate:失败率
- Peak RPS:峰值请求数
🏷️ 标签过滤
测试任务使用了 @tag('business_api') 标签,可以通过以下方式只运行特定标签的测试:
locust -f cbcs_statics.py --tags business_api
📁 项目结构
pressure_test/
├── cbcs_statics.py # 主测试脚本
├── mic_certificate_*.pfx # 客户端证书文件(需要自行提供)
└── README.md # 项目说明文档
⚠️ 注意事项
- 证书文件:确保 PFX 证书文件存在于项目目录中,并且路径配置正确
- SSL 验证:项目已禁用 SSL 验证(
verify=False),适用于企业内网环境 - Token 复用:所有虚拟用户共享同一个 Access Token,避免频繁请求认证接口
- 安全提醒:请勿将包含敏感信息(如 CLIENT_SECRET、证书密码)的代码提交到公共仓库
- 网络环境:确保测试机器能够访问目标服务器和认证服务器
🔧 常见问题
Q: 如何切换测试的 VIN 码?
修改 WebsiteUser 类中的 vin 属性:
class WebsiteUser(HttpUser):
vin = GEN5_TEST_VIN # 或 GEN6_TEST_VIN
Q: 如何调整用户请求间隔?
修改 wait_time 配置:
wait_time = between(1, 3) # 1-3 秒随机等待时间
Q: 获取 Token 失败怎么办?
检查以下配置:
AUTH_URL是否正确CLIENT_ID和CLIENT_SECRET是否有效- 网络连接是否正常
- 查看控制台输出的错误信息
📝 许可证
本项目仅供内部测试使用。
👥 贡献
如有问题或建议,请联系项目维护者。
Description
Languages
Python
100%