基于 Drun 框架的 E-commerce API 完整自动化测试套件,提供全面的 API 接口测试和数据库断言验证功能。
本项目针对 E-commerce API 提供完整的自动化测试解决方案,涵盖:
- ✅ 用户认证与授权 - 注册、登录、权限验证
- ✅ 商品管理 - 浏览、搜索、分类查询
- ✅ 购物车操作 - 添加、修改、删除商品
- ✅ 订单处理 - 创建、查询、状态管理
- ✅ 管理后台 - 分类管理、商品管理、订单查看
- ✅ 数据库验证 - SQL 断言验证数据一致性
- ✅ 格式转换 - 支持 cURL、Postman、HAR、OpenAPI 导入
- 🚀 CI/CD 流水线 - 自动化 E2E 业务流程测试,支持飞书通知
ecommerce-api-test/
├── 📁 testcases/ # 测试用例目录 (17个文件)
│ ├── test_health_check.yaml # API 健康检查 (50行)
│ ├── test_auth_flow.yaml # 用户认证流程 (113行)
│ ├── test_products.yaml # 商品浏览与搜索 (113行)
│ ├── test_shopping_cart.yaml # 购物车管理 (174行)
│ ├── test_orders.yaml # 订单管理 (142行)
│ ├── test_e2e_purchase.yaml # E2E完整购物流程 (181行)
│ ├── test_admin_permissions.yaml # 管理员权限测试 (168行)
│ ├── test_new_endpoints.yaml # 新增API端点测试 (新增)
│ ├── test_assertions.yaml # 断言验证示例 (241行)
│ ├── test_db_assert.yaml # 数据库断言示例 (17行)
│ ├── test_user_with_sql.yaml # 用户SQL验证 (158行)
│ ├── test_product_with_sql.yaml # 商品SQL验证 (123行)
│ ├── test_order_with_sql.yaml # 订单SQL验证 (208行)
│ ├── test_api_health.yaml # API接口健康检查 (16行)
│ ├── test_demo.yaml # 基础示例 (66行)
│ ├── test_import_users.yaml # 用户批量导入 (43行)
│ └── test_stream.yaml # 流式响应测试 (74行)
│
├── 📁 testsuites/ # 测试套件目录
│ ├── testsuite_smoke.yaml # 冒烟测试套件 (3个用例)
│ ├── testsuite_regression.yaml # 回归测试套件 (完整覆盖)
│ └── testsuite_csv.yaml # CSV参数化测试套件
│
├── 📁 converts/ # 格式转换示例
│ ├── curl/sample.curl # cURL 命令示例
│ ├── postman/ # Postman Collection示例
│ ├── har/sample_recording.har # 浏览器录制HAR文件
│ ├── openapi/sample_openapi.json # OpenAPI 3.x规范示例
│ └── README.md # 格式转换详细指南
│
├── 📁 data/ # 测试数据
│ └── users.csv # 用户测试数据
│
├── 📁 reports/ # 测试报告输出目录
├── 📁 logs/ # 日志输出目录
│
├── 📄 drun_hooks.py # 自定义Hooks函数 (完整SQL断言)
├── 📄 .env.example # 环境配置模板
├── 📄 .env # 实际环境配置
└── 📄 README.md # 本文档
冒烟测试 (testsuite_smoke.yaml)
- 系统健康检查
- 基础功能验证
- 执行时间: ~30秒
回归测试 (testsuite_regression.yaml)
- 完整功能覆盖
- 所有API端点验证
- 执行时间: ~5-10分钟
专项测试
- 认证授权测试
- 数据库一致性验证
- E2E购物流程
- 管理员权限验证
项目包含完整的 SQL 断言功能,支持:
- 用户数据写入验证
- 商品库存扣减验证
- 订单金额计算验证
- 购物车数据一致性验证
# SQL断言示例
validate:
- eq: [$.data.total, ${expected_sql_value($order_id, column="total")}]支持从多种格式导入测试用例:
| 格式 | 命令 | 推荐选项 |
|---|---|---|
| cURL | drun convert <file>.curl |
--placeholders --split-output |
| Postman | drun convert <file>.json |
--split-output --suite-out --postman-env |
| HAR | drun convert <file>.har |
--exclude-static --only-2xx --split-output |
| OpenAPI | drun convert-openapi <file>.json |
--tags --split-output --placeholders |
安装运行依赖(包含 MySQL 驱动):
pip install drun requests pyyaml pymysql复制环境配置文件:
cp .env.example .env编辑 .env 文件配置数据库连接:
# API 基础地址
BASE_URL=http://110.40.159.145:9099
# MySQL 数据库配置 (端口 8020)
MYSQL_MAIN__DEFAULT__DSN=mysql://root:password@110.40.159.145:8020/ecommerce
MYSQL_MAIN__DEFAULT__CHARSET=utf8mb4
# 测试用户凭证
USER_PASSWORD=Test@123456
ADMIN_USERNAME=admin
ADMIN_PASSWORD=Admin@123456drun run testsuites/testsuite_smoke.yamldrun run testsuites/testsuite_regression.yaml --html reports/regression_report.html# 用户认证流程
drun run testcases/test_auth_flow.yaml
# E2E购物流程
drun run testcases/test_e2e_purchase.yaml
# 数据库断言验证
drun run testcases/test_order_with_sql.yaml
# 管理员权限测试
drun run testcases/test_admin_permissions.yamldrun run testsuites/testsuite_csv.yaml生成 HTML 测试报告:
drun run testsuites/testsuite_regression.yaml \
--html reports/regression_report.html \
--log-level info生成 JSON 报告(用于 CI/CD):
drun run testsuites/testsuite_regression.yaml \
--report reports/run.json- ✅
POST /api/v1/auth/register- 用户注册 - ✅
POST /api/v1/auth/login- 用户登录 - ✅
DELETE /api/v1/auth/session- 用户登出
- ✅
GET /api/v1/users/me- 获取当前用户信息 - ✅
PUT /api/v1/users/me- 更新用户信息
- ✅
GET /api/v1/categories/- 获取所有分类 - ✅
GET /api/v1/categories/{category_id}- 获取分类详情 - ✅
POST /api/v1/categories/- 创建分类(管理员)
- ✅
GET /api/v1/products/- 获取商品列表(支持过滤、排序、分页) - ✅
GET /api/v1/products/{id}- 获取商品详情 - ✅
POST /api/v1/products/search- 商品搜索(JSON请求体) - ✅
POST /api/v1/products/quick-search- 快速商品搜索 - ✅
POST /api/v1/products/- 创建商品(管理员)
- ✅
GET /api/v1/cart/- 查看购物车 - ✅
POST /api/v1/cart/items- 添加商品到购物车 - ✅
PUT /api/v1/cart/items/{product_id}- 更新购物车商品数量 - ✅
DELETE /api/v1/cart/items/{product_id}- 移除购物车商品 - ✅
POST /api/v1/cart/add- 兼容性添加商品接口 - ✅
DELETE /api/v1/cart/remove/{product_id}- 兼容性移除商品接口
- ✅
POST /api/v1/orders/- 创建订单 - ✅
GET /api/v1/orders/{id}- 获取订单详情 - ✅
GET /api/v1/orders/?scope=user- 查询用户订单 - ✅
GET /api/v1/orders/?scope=all- 查询所有订单(管理员) - ✅
POST /api/v1/orders/checkout- 订单结账 - ✅
POST /api/v1/orders/search- 订单搜索(支持状态过滤) - ✅
POST /api/v1/orders/admin/search- 管理员高级订单搜索
drun_hooks.py 提供丰富的自定义函数:
模板辅助函数
# 时间戳
headers: { X-Timestamp: ${ts()} }
# UUID生成
email: user_${uid()}@example.com
# 短UUID生成
username: user_${short_uid(8)}SQL断言函数
# 验证订单数据
validate:
- eq: [$.data.total, ${expected_sql_value($order_id, column="total")}]
# 验证库存扣减
validate:
- eq: [$.data.stock, ${get_product_stock($product_id)}]# 只运行smoke测试
drun run testcases -k "smoke"
# 运行关键测试
drun run testcases -k "critical or smoke"
# 排除管理员测试
drun run testcases -k "regression and not admin"drun convert converts/curl/sample.curl \
--outfile testcases/from_curl.yaml \
--placeholders \
--split-outputdrun convert converts/postman/sample_collection.json \
--postman-env converts/postman/sample_environment.json \
--split-output \
--suite-out testsuites/from_postman.yaml \
--placeholdersdrun convert converts/har/sample_recording.har \
--exclude-static \
--only-2xx \
--split-output \
--outfile testcases/from_har.yamldrun convert-openapi converts/openapi/sample_openapi.json \
--tags users,orders \
--split-output \
--base-url http://localhost:8000 \
--outfile testcases/from_openapi.yaml| 测试类型 | 覆盖范围 | 执行时间 | 运行频率 | 目标 |
|---|---|---|---|---|
| 冒烟测试 | 核心功能 | ~30秒 | 每次提交 | 快速验证系统可用性 |
| 回归测试 | 全功能覆盖 | ~5-10分钟 | 每日构建 | 确保功能完整性 |
| E2E测试 | 业务流程 | ~1分钟 | 版本发布 | 验证关键用户旅程 |
| 专项测试 | 特定功能 | ~2-5分钟 | 功能变更 | 深度测试特定模块 |
- API覆盖率: 100% (所有公开接口)
- 功能覆盖率: 95%+ (核心业务流程)
- 断言覆盖率: 90%+ (状态码、数据结构、业务逻辑)
- 数据库验证: 完整的数据一致性检查
Error: Cannot connect to MySQL database解决方案:
- 检查
.env中的数据库配置 - 确认端口使用
8020(非默认3306) - 验证数据库服务运行:
nc -zv 110.40.159.145 8020
Error: 403 Forbidden解决方案:
-- 在数据库中设置管理员权限
UPDATE users SET role='admin' WHERE username='admin';Error: SQL assertion failed解决方案:
- 确认
MYSQL_*环境变量配置正确,例如MYSQL_MAIN__DEFAULT__DSN - 检查数据库连接权限
- 验证SQL语句语法
解决方案:
- 重新运行登录测试获取新Token
- 检查Token自动刷新机制
本项目已配置完整的 E2E 业务流程测试流水线,基于 GitHub Actions 实现。
- 自动触发: 推送到任意分支或创建 Pull Request 时自动运行
- 完整测试: 执行
test_e2e_purchase.yaml完整购物流程(12个业务步骤) - 飞书通知: 实时发送测试开始、成功、失败通知到团队群聊
- 测试报告: 生成 HTML 和 JSON 格式报告,支持 GitHub Artifacts 下载
- 环境配置: 自动使用项目中的
.env文件配置
E2E 测试涵盖完整业务旅程:
- 用户注册 → 2. 用户登录 → 3. 浏览商品分类 → 4. 查看商品详情
- 添加购物车 → 6. 查看购物车 → 7. 创建订单 → 8. 验证库存扣减
- 查看订单详情 → 10. 验证购物车清空 → 11. 查看订单列表 → 12. 业务流程完成
-
配置飞书机器人
# 1. 在飞书群聊添加自定义机器人 # 2. 复制 Webhook URL # 3. 在 GitHub Settings > Secrets > Actions 添加: # FEISHU_WEBHOOK_URL: [你的机器人Webhook URL]
-
提交代码触发测试
git add . git commit -m "feat: 配置E2E测试流水线" git push origin main
-
查看测试结果
- GitHub Actions 页面查看执行日志
- 飞书群聊接收实时通知
- 下载测试报告查看详细信息
完整的流水线设置指南请参考:PIPELINE_SETUP.md
包含以下内容:
- 详细的配置步骤
- 飞书机器人设置指南
- 故障排查方法
- 最佳实践建议
- HTML报告: 可视化测试结果,适合开发团队查看
- JSON报告: 机器可读格式,适合CI/CD系统解析
- 日志文件: 详细的执行过程记录,便于问题诊断
- 测试用例: 17个YAML文件
- 测试套件: 3个套件文件
- 代码行数: 2,000+行测试代码
- API覆盖: 21个核心接口(包含新增端点)
- 数据库表: 6个业务表验证
- 转换示例: 4种格式(cURL、Postman、HAR、OpenAPI)
欢迎贡献新的测试用例或改进现有测试!
- Fork 本项目
- 创建特性分支:
git checkout -b feature/amazing-feature - 提交更改:
git commit -m 'Add amazing feature' - 推送分支:
git push origin feature/amazing-feature - 发起 Pull Request
- 测试用例命名遵循
test_[feature]_[scenario].yaml格式 - 使用有意义的步骤描述
- 添加适当的断言验证
- 保持配置文件简洁清晰
- 🆕 新增
test_new_endpoints.yaml测试用例,覆盖最新API端点 - 📝 更新API接口文档,新增6个端点覆盖
- 🔧 修复分类详情端点参数名称不一致问题
- 📊 API覆盖率从15个提升到21个核心接口
- ✨ 完成项目重构和文档优化
- 🧹 清理冗余文档文件
- 🔧 完善环境配置和数据库连接
- 🎉 初始项目创建
- ✅ 完成16个核心测试用例
- ✅ 实现3个测试套件
- ✅ 集成SQL断言功能
- ✅ 支持4种格式转换
如有问题或建议,请通过以下方式联系:
- 📧 邮箱: test-team@example.com
- 🐛 问题反馈: GitHub Issues
- 📖 文档: 项目Wiki
⭐ 如果这个项目对您有帮助,请给我们一个 Star!