From e2416f426ecc6263cf6b3a5dec8a22207e5a8c25 Mon Sep 17 00:00:00 2001 From: ZhuJW <1421267742@qq.com> Date: Wed, 29 Apr 2026 18:11:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + README.md | 161 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 3 + 3 files changed, 165 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ed8ebf5 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..96a1f7b --- /dev/null +++ b/README.md @@ -0,0 +1,161 @@ +# 压力测试工具 - 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` 是否有效 +- 网络连接是否正常 +- 查看控制台输出的错误信息 + +## 📝 许可证 + +本项目仅供内部测试使用。 + +## 👥 贡献 + +如有问题或建议,请联系项目维护者。 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..d23ed56 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +locust>=2.0.0 +cryptography>=41.0.0 +urllib3>=2.0.0