Просмотр исходного кода

docs: 更新管理后台发布E2E测试报告 (2026-06-28) 同步测试

Sisyphus Agent 2 месяцев назад
Родитель
Сommit
9a49281978
1 измененных файлов с 89 добавлено и 40 удалено
  1. 89 40
      docs/系统测试/backend-e2e-publish-test-2026-06-28.md

+ 89 - 40
docs/系统测试/backend-e2e-publish-test-2026-06-28.md

@@ -3,7 +3,7 @@
 **测试环境**: `http://cfc.iwintrue.com:80`
 **测试环境**: `http://cfc.iwintrue.com:80`
 **测试时间**: 2026-06-28
 **测试时间**: 2026-06-28
 **测试账号**: 13800138000(admin角色,adminId=7)
 **测试账号**: 13800138000(admin角色,adminId=7)
-**commit**: `origin/cfclub` 最新
+**commit**: `origin/cfclub` 最新(2161968)
 **测试方式**: Python urllib 模拟 HTTP 请求
 **测试方式**: Python urllib 模拟 HTTP 请求
 
 
 ---
 ---
@@ -13,76 +13,125 @@
 | 测试项 | 结果 | 说明 |
 | 测试项 | 结果 | 说明 |
 |--------|------|------|
 |--------|------|------|
 | 管理员登录 | ✅ 通过 | phone=13800138000, code=000000 |
 | 管理员登录 | ✅ 通过 | phone=13800138000, code=000000 |
-| JWT Token | ✅ 有效 | adminId=7, roles=[admin] |
+| JWT Token | ✅ 有效 | adminId=7, roles=[admin],
+
+## 应用配置已启用 skip-captcha 跳过验证码校验** |
 
 
 ---
 ---
 
 
 ## 二、文章发布 API
 ## 二、文章发布 API
 
 
 **接口**: `POST /api/admin/articles/publish`
 **接口**: `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"
+}
+```
 
 
-**结果**: ❌ HTTP 500 - Internal Server Error
-
-**响应**: HTTP 500 服务器内部错误
+**分析**: 500 为 Spring Boot 默认错误响应(非业务异常)。可能原因:
+1. ArticleService 内 `createdBy` 字段为空导致数据库约束冲突
+2. 缺少其他必需字段(categoryId、coverImage、tags 等)
+3. 内部 NPE 或其他未捕获异常
 
 
 ---
 ---
 
 
-## 三、活动发布 API
+## 三、活动发布 API — ✅ 完全通过
 
 
-### 3.1 创建活动 → 发布
+**JWT认证**: 使用 Bearer Token
 
 
 | 步骤 | 接口 | 结果 | 说明 |
 | 步骤 | 接口 | 结果 | 说明 |
 |------|------|------|------|
 |------|------|------|------|
-| 创建 | `POST /api/activity/create` | ✅ HTTP 200 | activityId=4 |
-| 发布 | `POST /api/activity/publish` | ✅ HTTP 200 - 发布成功 | id=4 |
+| 创建活动 | `POST /api/activity/create` | ✅ HTTP 200 | activityId=5 |
+| 发布活动 | `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
+## 四、商品上下架 API — ⚠️ 认证正常,业务受限
 
 
 | 步骤 | 接口 | 认证方式 | 结果 | 说明 |
 | 步骤 | 接口 | 认证方式 | 结果 | 说明 |
 |------|------|---------|------|------|
 |------|------|---------|------|------|
-| 创建 | `POST /api/product/create` | Bearer + X-User-Id | ✅ HTTP 200 | business error if 200 but code=500 |
-| 上下架 | `POST /api/product/shelve` | Bearer + X-User-Id | ⚠️ 未测试 | productId=None |
+| 创建商品 | `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}`
 
 
-**响应**: {"code":500,"message":"仅审核通过的服务商可发布商品","data":null}
+**认证机制**:
+- ProductController 使用 `X-User-Id` 请求头(非标准 JWT `@RequestAttribute("userId")`)
+- 需同时传递 `Authorization: Bearer <token>` + `X-User-Id: <userId>`
 
 
-**认证机制**: ProductController 使用 `X-User-Id` 请求头(非常规JWT)
+**限制**: admin 账号(userId=7)非已审核供应商,无法创建商品
 
 
 ---
 ---
 
 
-## 五、测试结论
+## 五、完整结果汇总
 
 
-| 功能 | 结果 | 说明 |
-|------|------|------|
-| 管理员登录 | ✅ 通过 | JWT认证正常 |
-| 文章发布 | ❌ 500错误 | ArticleService内部错误 |
-| 活动发布 | ✅ 通过 | 端到端全流程正常 |
-| 商品上下架 | ⚠️ 业务限制 | 认证机制正常 |
+| 功能模块 | 测试结果 | HTTP状态 | 说明 |
+|----------|----------|----------|------|
+| 管理员登录 | ✅ 通过 | 200 | JWT 认证正常 |
+| 文章发布 | ❌ 失败 | 500 | ArticleService 内部错误 |
+| 活动发布 | ✅ 完全通过 | 200 | 创建+发布全流程正常 |
+| 商品上下架 | ⚠️ 业务限制 | 200(code=500) | admin 非服务商,需已审核 vendor 账号 |
 
 
-### 通过项
-- 管理端JWT认证机制正常
-- 活动创建 → 发布 端到端流程完全正常
-- 商品 API 认证机制验证(Bearer + X-User-Id)
+### 5.1 通过项
+- 管理端 JWT 认证机制:`POST /api/admin-auth/login` 返回有效 token
+- 活动创建 + 发布流程:端到端测试通过(id=5,发布成功)
+- 商品 API 认证机制:Bearer + X-User-Id 双头验证通过
+- skip-captcha 测试模式:管理端登录验证码已跳过
 
 
-### 待排查
-- 文章发布500错误(如有)
-- 商品完整发布需服务商资质
+### 5.2 待排查
+- **文章发布 500**: ArticleService.create 内部异常,需检查 `createdBy` 字段处理或 DB 约束
+- **商品发布权限**: 需已审核通过的服务商账号方能测试完整上下架流程
 
 
 ---
 ---
 
 
-## 详细日志
+## 六、测试方法
 
 
-```
-[LOGIN] status=200
-[LOGIN] SUCCESS adminId=7
-[ARTICLE] status=500
-[ARTICLE] response={"timestamp":"2026-06-28T23:28:57.459+00:00","status":500,"error":"Internal Server Error","path":"/api/admin/articles/publish"}
-[ACTIVITY-CREATE] status=200
-[ACTIVITY-PUBLISH] status=200, id=4
-[ACTIVITY-PUBLISH] response={"code":200,"message":"success","data":"发布成功"}
-[PRODUCT-CREATE] status=200
-[PRODUCT-CREATE] response={"code":500,"message":"仅审核通过的服务商可发布商品","data":null}
+```bash
+# Python 直接请求(无需浏览器)
+python e2e_run.py
+
+# 输出文件
+e2e_result_new.txt - 每次测试的原始响应
 ```
 ```