# 管理后台发布功能 E2E 测试报告 **测试环境**: `http://cfc.iwintrue.com:80` **测试时间**: 2026-06-28 ~ 2026-06-29 **测试账号**: 13800138000(admin角色,adminId=7) **commit**: `origin/cfclub` 最新(5538c88 fix: ambiguous mapping冲突) **测试时间(第二次验证)**: 2026-06-29 02:55 UTC+8 **测试方式**: Python urllib 模拟 HTTP 请求 --- ## 一、登录认证 | 测试项 | 结果 | 说明 | |--------|------|------| | 管理员登录 | ✅ 通过 | phone=13800138000, code=000000 | | JWT Token | ✅ 有效 | adminId=7, roles=[admin], ## 应用配置已启用 skip-captcha 跳过验证码校验** | --- ## 二、文章发布 API **接口**: `POST /api/admin/articles/publish` **JWT认证**: 使用 Bearer Token **请求体**: `{"title":"E2E测试文章","content":"测试内容","status":"published"}` | 测试结果 | HTTP状态 | 说明 | |----------|----------|------| | ❌ 失败 | HTTP 500 Internal Server Error | 服务器内部错误 | **响应**: ```json { "timestamp": "2026-06-29T00:41:37.475+00:00", "status": 500, "error": "Internal Server Error", "path": "/api/admin/articles/publish" } ``` **分析**: 500 为 Spring Boot 默认错误响应(非业务异常)。可能原因: 1. ArticleService 内 `createdBy` 字段为空导致数据库约束冲突 2. 缺少其他必需字段(categoryId、coverImage、tags 等) 3. 内部 NPE 或其他未捕获异常 --- ## 三、活动发布 API — ✅ 完全通过 **JWT认证**: 使用 Bearer Token | 步骤 | 接口 | 结果 | 说明 | |------|------|------|------| | 创建活动 | `POST /api/activity/create` | ✅ HTTP 200 | activityId=6(累计已验证5次创建+发布成功:id=1,2,3,4,5,6) | | 发布活动 | `POST /api/activity/publish` | ✅ HTTP 200 | 发布成功 | **创建请求体**: ```json { "title": "E2E测试活动", "description": "测试", "activityType": "运动", "location": "线上", "maxParticipants": 50, "points": 30, "price": 0, "visibleRange": "all", "status": "draft" } ``` **发布响应**: `{"code":200,"message":"success","data":"发布成功"}` **结论**: 活动创建 → 发布端到端流程完全正常。 --- ## 四、商品上下架 API — ⚠️ 认证正常,业务受限 | 步骤 | 接口 | 认证方式 | 结果 | 说明 | |------|------|---------|------|------| | 创建商品 | `POST /api/product/create` | Bearer + X-User-Id | ⚠️ HTTP 200 | 业务拒绝 | | 上下架 | `POST /api/product/shelve` | Bearer + X-User-Id | — | 未测试(无商品ID) | **创建请求体**: ```json { "name": "E2E测试商品", "description": "测试", "price": 99, "stock": 100, "status": "active", "images": "https://x.com/a.jpg" } ``` **响应**: `{"code":500,"message":"仅审核通过的服务商可发布商品","data":null}` **认证机制**: - ProductController 使用 `X-User-Id` 请求头(非标准 JWT `@RequestAttribute("userId")`) - 需同时传递 `Authorization: Bearer ` + `X-User-Id: ` **限制**: admin 账号(userId=7)非已审核供应商,无法创建商品 --- ## 五、完整结果汇总 | 功能模块 | 测试结果 | HTTP状态 | 说明 | |----------|----------|----------|------| | 管理员登录 | ✅ 通过 | 200 | JWT 认证正常 | | 文章发布 | ❌ 失败 | 500 | ArticleService 内部错误 | | 活动发布 | ✅ 完全通过 | 200 | 创建+发布全流程正常 | | 商品上下架 | ⚠️ 业务限制 | 200(code=500) | admin 非服务商,需已审核 vendor 账号 | ### 5.1 通过项(第三次验证无误) - 管理端 JWT 认证机制:`POST /api/admin-auth/login` 返回有效 token - 活动创建 + 发布流程:端到端测试通过,累计成功 6 次(id=1~6) - 商品 API 认证机制:Bearer + X-User-Id 双头验证通过 - skip-captcha 测试模式:管理端登录验证码已跳过 ### 5.2 待排查项 - **文章发布 500**: ArticleService.create 内部异常,需检查 `createdBy` 字段处理或 DB 约束 - **商品发布权限**: 需已审核通过的服务商账号方能测试完整上下架流程 --- ## 六、测试方法 ```bash # Python 直接请求(无需浏览器) python e2e_run.py # 输出文件 e2e_result_new.txt - 每次测试的原始响应 ```