Files
Jog/doc/jog-system-cursor-automated-test-spec.md
2026-05-18 21:54:13 +08:00

26 KiB
Raw Permalink Blame History

Jog System · Cursor 自动化测试输入规范(全量需求展开)

文档版本 · V1.0Cursor · 生成日期 · 2026-05-18

属性 内容
定位 AI(含 Cursor Agent)生成自动化测试代码时的唯一输入;不依赖其他 doc 文件即可推导 JUnit / MockMvc / Testcontainers / Vitest / Playwright / k6 等用例
需求溯源 全文展开自 doc/jog-system-requirements.mdV1.02026-05-17)中的 FRAC§3 非功能§4 权限矩阵§5 界面§6 测试验收
实现校准 HTTP 路径与 Controller 以 附录 A 为准(当前 jog-* 仓库);与需求文字中的示例路径不一致时,以代码为准,并在用例 notes 中标注「需求差异」
并存说明 若与 jog-system-automated-test-plan.md 同时存在,以本 cursor 文档为 AI 唯一输入

0. 使用方式(写给 AI / Cursor

  1. 仅依据本文档生成测试:从「第 6 章」起按 TC-* 编号实现;接口路径查附录 A。
  2. 每条用例必须使用 第 5 章 JSON 模板 输出设计(可先批量生成 YAML/JSON fixture,再写代码)。
  3. trace 字段必须含 FR- / AC- / NF-* / PM-* / UI-* / API-*` 之一,便于覆盖率报告。
  4. 标注 implementation_gap 的用例:实现未达需求时,实现 @Disabled + 原因xfail,不得静默改预期。
  5. 优先级P0 阻塞发布;P1 阻塞合并;P2 迭代补齐。

1. 仓库与已有验证事实(非需求,仅供上下文)

代号 说明
T-01 mvn -B test 可通过,但各模块 No tests to run,无自有 Java 测试
T-02 前端 npm run buildNode ≥ 20v16 下 Vite 可能失败
T-03 jog-frontend/package.json test:unit / test:e2e
N-01 契约、Flyway、权限等曾依赖人工静态对比(见 jog-system-bug-list.md

2. 测试环境与数据

约定
JDK 21
Node ≥ 20(推荐与 CI 锁定一致)
集成测试 DB/Redis Testcontainers 或隔离实例;禁止默认连开发者 application.yml 中公网地址
Profile application-test.ymlFlyway 开启,JWT 密钥固定
数据前缀 auto_test_*,用例结束清理或回滚
角色 anonymous · userROLE_USER)· adminROLE_ADMIN

已知实现注记(编写断言时参考)

  • 验证码接口可能为占位(见历史 BUG-010):只断言结构存在,不按生产级验证码验收。
  • 限流 Key 可能缺 IP/用户维度(BUG-014):限流类用例标注 weak_isolation
  • 需求称访客可读评论;当前评论列表若在 /api/app/comment/**,访客可能 401:用例中保留 需求差异 断言分支。

3. 推荐工具与落地目录

分层 工具 目录建议
后端单元 JUnit 5、Mockito、AssertJ 各模块 src/test/java
后端 API/集成 Spring Boot Test、MockMvc、@SpringBootTest、Testcontainers jog-admin/src/test/java 为主
契约 SpringDoc OpenAPI + 脚本对比 jog-frontend/src/api scripts/contract/
前端单元 Vitest、Vue Test Utils、MSW jog-frontend
E2E Playwright e2e/jog-frontend/e2e/
性能/并发 k6、JMeter perf/k6/
可访问性 axe-core + Playwright 挂接 E2E

4. AI 生成单条用例的强制模板

每条逻辑用例输出为一个对象(可存 test-fixtures/*.json):

{
  "id": "TC-AC-USER-REG-01",
  "title": "中文短标题",
  "priority": "P0|P1|P2",
  "trace": ["AC-USER-REG-01", "FR-USER-REG-01", "API-AUTH-003"],
  "layers": ["integration", "e2e"],
  "roles": ["anonymous"],
  "preconditions": ["干净库或已种子用户", "SMTP mock 或关闭发信断言"],
  "steps": [
    { "action": "HTTP POST ...", "detail": "body 字段..." },
    { "action": "查库/查 Redis", "detail": "..." }
  ],
  "expected": {
    "http": 200,
    "bodyJsonPath": { "code": 200, "data.id": "exists" },
    "db": ["sys_user 新增一行 email=..."],
    "ui": "可选:E2E 断言"
  },
  "negative_cases": [],
  "implementation_gap": null,
  "notes": null
}

5. 功能需求全量展开(对应需求 §2)

以下每节结构:FR 覆盖表(规则级必测点)+ AC 详规(验收级可执行展开)。
API 映射列指向附录 A 中最可能用到的路径(若尚无对应能力则写 N/A 并标 implementation_gap)。


5.1 管理员登录(需求 §2.1

5.1.1 FR → 测试要点

FR ID 测试要点 建议分层 优先级 API / 备注
FR-ADM-LOGIN-01 支持手机号+密码、用户名+密码登录 API / E2E P0 POST /api/public/admin/login
FR-ADM-LOGIN-02 仅 1 个内置超管,禁止第二管理员 API / 集成 P1 管理端用户创建接口若不存在则 implementation_gap
FR-ADM-LOGIN-03 连续 3 次错密后需验证码;5 次错密锁定 30 分钟 API P0 结合 GET /api/public/captcha(占位时注明)
FR-ADM-LOGIN-04 同 IP 5 分钟内失败 >10 次 → IP 封禁 15 分钟 API / 集成 P1 限流隔离弱时标 weak_isolation
FR-ADM-LOGIN-05 每次成功/失败写登录日志:时间、IP、设备指纹、结果 集成 P0 sys_login_log 或等价表
FR-ADM-LOGIN-06 会话 8h;记住我 7d API / 集成 P1 JWT exp、refresh 配置

5.1.2 AC → 详规

TC-AC-ADM-LOGIN-01P0trace: AC-ADM-LOGIN-01, FR-ADM-LOGIN-01, FR-ADM-LOGIN-05

  • 目的:正确用户名或手机号 + 密码登录后台。
  • 前置:Flyway 种子管理员存在;已知凭据。
  • 步骤
    1. POST /api/public/admin/login,body:账号字段(与实现一致)、密码、可选 deviceFingerprint
    2. 断言 200data 含访问令牌与管理员信息。
    3. 数据库/日志:result=成功、IP/时间非空。
  • E2E:登录表单提交后 URL 进入 /admin 或仪表盘路由。
  • api_ref:附录 A AuthController

TC-AC-ADM-LOGIN-02P0trace: AC-ADM-LOGIN-02, FR-ADM-LOGIN-03

  • 目的:连续 3 次错误密码后第 4 次需验证码。
  • 步骤
    1. 同一账号连续 3 次错误密码。
    2. 第 4 次请求:不带验证码 → 期望 400/422 或业务码提示需验证码(与实现一致)。
    3. GET /api/public/captchacaptchaKey;带正确/错误验证码各测一轮。
  • implementation_gap:若验证码为占位,则断言「接口返回结构」+ 业务仍返回需验证码 记录产品与实现对齐缺口。

TC-AC-ADM-LOGIN-03P0trace: AC-ADM-LOGIN-03, FR-ADM-LOGIN-03

  • 目的:连续 5 次错误锁定 30 分钟。
  • 步骤:连续失败至阈值;第 6 次正确密码仍不可登录;期望文案含锁定与约 30 分钟。
  • 集成:查用户 locked_until 或等价字段。

TC-AC-ADM-LOGIN-04P1trace: AC-ADM-LOGIN-04, FR-ADM-LOGIN-02

  • 目的:禁止第二超级管理员。
  • 步骤:若存在「创建管理员」API 则调用并期望拒绝;若无 API 则静态断言 user_type 枚举与注册路径不通。

TC-AC-ADM-LOGIN-05P0trace: AC-ADM-LOGIN-05, FR-ADM-LOGIN-05

  • 目的:登录日志字段完整。
  • 步骤:成功一次、失败一次;查日志表:ipdevice/uaresulttime

5.2 用户注册(需求 §2.2

5.2.1 FR → 测试要点

FR ID 测试要点 建议分层 优先级
FR-USER-REG-01 邮箱+密码必填 API / FE 单元 P0
FR-USER-REG-02 密码 8~32 且至少三类字符 FE + API P0
FR-USER-REG-03 邮箱唯一;发验证邮件 API / 集成 P0
FR-USER-REG-04 验证链接 24h API P1
FR-USER-REG-05 同 IP 1h 最多 3 次注册 API P0
FR-USER-REG-06 无自助找回;仅管理员重置 API P1

5.2.2 AC → 详规

TC-AC-USER-REG-01P0trace: AC-USER-REG-01, FR-USER-REG-01~03

  • 步骤:合法邮箱+合规密码 POST /api/public/user/register → 200;DB 用户存在;邮件发送可 mock 断言「调用次数」。

TC-AC-USER-REG-02P0trace: AC-USER-REG-02, FR-USER-REG-03

  • 步骤:重复邮箱第二次注册 → 业务错误「该邮箱已被注册」或等价码。

TC-AC-USER-REG-03P0trace: AC-USER-REG-03, FR-USER-REG-02

  • 步骤:纯数字或少于 8 位 → 前端校验拦截;绕过前端直调 API → 400/业务错误。

TC-AC-USER-REG-04P0trace: AC-USER-REG-04, FR-USER-REG-05

  • 步骤:同 IP(或同测试标识)第 4 次注册 → 限流或「注册过于频繁」。

TC-AC-USER-REG-05P0trace: AC-USER-REG-05, FR-USER-REG-06

  • 步骤:管理员 PUT /api/admin/user/{id}/reset-password;旧密码失效、新密码可登录。

5.2.3 FR 补充用例(无独立 AC)

TC-FR-USER-REG-04P1trace: FR-USER-REG-04

  • 目的:邮箱验证 token 超过 24h 失效。
  • 步骤:插入过期 token 或时钟模拟;请求验证接口期望失败。

5.3 用户登录(需求 §2.3

5.3.1 FR → 测试要点

FR ID 测试要点 优先级
FR-USER-LOGIN-01 邮箱+密码 P0
FR-USER-LOGIN-02 最多 3 活跃会话,驱逐最早 P0
FR-USER-LOGIN-03 OAuth 扩展点可配置开关 P2
FR-USER-LOGIN-04 5 次错密锁定 15 分钟 P0
FR-USER-LOGIN-05 忘记密码引导联系管理员 P1
FR-USER-LOGIN-06 默认 24h;记住我 14d P0

5.3.2 AC → 详规

TC-AC-USER-LOGIN-01P0trace: AC-USER-LOGIN-01

  • POST /api/public/user/login 成功;返回 Token 与用户信息。

TC-AC-USER-LOGIN-02P0trace: AC-USER-LOGIN-02, FR-USER-LOGIN-02

  • 模拟 4 个客户端(不同 deviceFingerprint 或 User-Agent):第 4 次登录后,最早 Token 调受保护接口 401/失效

TC-AC-USER-LOGIN-03P0trace: AC-USER-LOGIN-03, FR-USER-LOGIN-04

  • 连续 5 次错误密码 → 锁定 15 分钟;比对管理员锁定时长差异(需求管理员 30min / 用户 15min)。

TC-AC-USER-LOGIN-04P1trace: AC-USER-LOGIN-04, FR-USER-LOGIN-05

  • E2E:点击忘记密码 → 文案含联系管理员。

TC-AC-USER-LOGIN-05P2trace: AC-USER-LOGIN-05, FR-USER-LOGIN-03

  • 配置项 OAuth 开关存在;/api/oauth/** 或配置表中开关读取断言。

TC-AC-USER-LOGIN-06P0trace: AC-USER-LOGIN-06, FR-USER-LOGIN-06

  • 记住我勾选:refresh/Cookie 过期时间接近 14d;未勾选接近 24h(按实现字段断言)。

5.4 博客发布(需求 §2.4

5.4.1 FR → 测试要点

FR ID 测试要点 优先级
FR-BLOG-PUB-01 未登录不可编辑 P0
FR-BLOG-PUB-02 富文本、图片格式与大小、视频嵌入 P0/P1
FR-BLOG-PUB-03 手动存草稿 + 30s 自动保存 P1
FR-BLOG-PUB-04 可见性:公开/私密/仅粉丝 P0
FR-BLOG-PUB-05 已发布可改可见性即时生效 P0
FR-BLOG-PUB-06 必选 1 分类、≤5 标签 P0
FR-BLOG-PUB-07 XSS 过滤;禁止非图上传 P0

5.4.2 AC → 详规

TC-AC-BLOG-PUB-01P0trace: AC-BLOG-PUB-01, FR-BLOG-PUB-01

  • E2E:直接打开编辑路由 → 重定向登录;redirect 回跳。

TC-AC-BLOG-PUB-02P1trace: AC-BLOG-PUB-02, FR-BLOG-PUB-02

  • E2E/API:插入图片 URL 或上传接口;超限文件失败。

TC-AC-BLOG-PUB-03P1trace: AC-BLOG-PUB-03, FR-BLOG-PUB-03

  • 保存草稿后再进入编辑;内容一致;若有自动保存接口则 mock 时钟测 30s(或文档说明降常为 P2)。

TC-AC-BLOG-PUB-04P0trace: AC-BLOG-PUB-04, FR-BLOG-PUB-04

  • 作者可见私密文;访客 GET /api/public/article/{id} → 404 或无权。

TC-AC-BLOG-PUB-05P0trace: AC-BLOG-PUB-05, FR-BLOG-PUB-05

  • PUT /api/app/article/{id} 改可见性后,访客再看详情变化。

TC-AC-BLOG-PUB-06P0trace: AC-BLOG-PUB-06, FR-BLOG-PUB-06

  • 创建携带 6 个 tagId → 拒绝。

TC-AC-BLOG-PUB-07P0trace: AC-BLOG-PUB-07, FR-BLOG-PUB-07

  • 上传 .exe 或使用文章正文带可执行链接策略;期望拒绝或清洗。

5.5 博客列表查看(需求 §2.5

5.5.1 FR → 测试要点

FR ID 测试要点 优先级
FR-BLOG-LIST-01 按发布时间升降序、浏览量降序 P0
FR-BLOG-LIST-02 分类 + 标签组合筛选 P0
FR-BLOG-LIST-03 标题+正文全文检索与高亮(UI P0
FR-BLOG-LIST-04 每页 15 条 P0
FR-BLOG-LIST-05 私密只对作者列表可见 P0
FR-BLOG-LIST-06 仅粉丝可见:作者+粉丝 P0
FR-BLOG-LIST-07 浏览量:访客/用户去重;作者本人不看加 P0
FR-BLOG-LIST-08 卡片展示阅读量 P1

5.5.2 AC → 详规

TC-AC-BLOG-LIST-01P0trace: AC-BLOG-LIST-01, FR-BLOG-LIST-01

  • GET /api/public/article/listsortBy/order(以代码参数名为准);断言顺序。

TC-AC-BLOG-LIST-02P0trace: AC-BLOG-LIST-02, FR-BLOG-LIST-02

  • 同时 categoryId + tagId;结果集同时满足。

TC-AC-BLOG-LIST-03P0trace: AC-BLOG-LIST-03, FR-BLOG-LIST-03

  • 关键字搜索;E2E 断言高亮 DOM 或 API 返回摘要含关键词。

TC-AC-BLOG-LIST-04P0trace: AC-BLOG-LIST-04, FR-BLOG-LIST-04

  • 说明:需求原文写「第 3 页」,按 第 2 页 语义理解为分页;请求 page=2pageSize=15,本页最多 15 条,total 与页码一致。

TC-AC-BLOG-LIST-05P0trace: AC-BLOG-LIST-05, FR-BLOG-LIST-05

  • 作者列表可见私密文;其他用户列表不可见。

TC-AC-BLOG-LIST-06P0trace: AC-BLOG-LIST-06, FR-BLOG-LIST-07

  • 作者访问本人详情:view_count 两次请求不变(或增量为 0)。

TC-AC-BLOG-LIST-07P1trace: AC-BLOG-LIST-07, FR-BLOG-LIST-08

  • E2E:列表卡片渲染 viewCount 字段非空且与接口一致。

5.5.3 FR 补充

TC-FR-BLOG-LIST-06P0trace: FR-BLOG-LIST-06

  • 用户 B 关注作者 A 后可见「仅粉丝可见」文;未关注则不可见。

5.6 评论功能(需求 §2.6

5.6.1 FR → 测试要点

FR ID 测试要点 优先级
FR-COMMENT-01 登录才能评;访客可读 P0
FR-COMMENT-02 最多 3 级;更深变平级 P0
FR-COMMENT-03 审核开关 P0
FR-COMMENT-04 作者标识 P1
FR-COMMENT-05 管理员删/屏蔽 P0
FR-COMMENT-06 回复站内通知 P1
FR-COMMENT-07 XSS + 敏感词 P0

5.6.2 AC → 详规

TC-AC-COMMENT-01P0trace: AC-COMMENT-01, FR-COMMENT-01

  • E2E:未登录点发表 → 登录引导。
  • API 差异:访客调评论列表若需登录,记 implementation_gap 相对 FR-COMMENT-01「访客可读」。

TC-AC-COMMENT-02P0trace: AC-COMMENT-02, FR-COMMENT-02

  • 构造 A→B→C→D 四级;断言 D 与 C 平级 level/结构。

TC-AC-COMMENT-03P0trace: AC-COMMENT-03, FR-COMMENT-03

  • 开关开启:POST 评论后前台列表无;管理员 PUT /api/admin/comment/{id}/audit 后可见。

TC-AC-COMMENT-04P1trace: AC-COMMENT-04, FR-COMMENT-04

  • 作者账号评论:isAuthor 或 UI 徽章。

TC-AC-COMMENT-05P0trace: AC-COMMENT-05, FR-COMMENT-05

  • 屏蔽后:其它用户不可见;发表者可见(按实现 status)。

TC-AC-COMMENT-06P1trace: AC-COMMENT-06, FR-COMMENT-06

  • A 回复 B 后 B 的通知列表/未读数+1(若未实现则 implementation_gap)。

TC-AC-COMMENT-07P0trace: AC-COMMENT-07, FR-COMMENT-07

  • 评论含 <script>:持久化字段无执行;详情接口返回转义/清洗后串。

6. 非功能性需求展开(对应需求 §3)

6.1 性能与体验(§3.1

TC ID 指标来源 测试方法 通过条件 优先级
TC-NF-PERF-01 §3.1.1 首屏 ≤2s Lighthouse 4G 节流 LCP/Performance 预算 P1
TC-NF-PERF-02 §3.1.1 交互 ≤500ms Playwright performance.now() 采样 关键点击-反馈延迟 P2
TC-NF-PERF-03 §3.1.2 列表 P95 ≤500ms k6 p(95)<500ms P1
TC-NF-PERF-04 §3.1.2 详情 P95 ≤300ms k6 p(95)<300ms P1
TC-NF-PERF-05 §3.1.2 登录注册 P95 ≤800ms k6 p(95)<800ms P1
TC-NF-PERF-06 §3.1.3 ≥500 并发在线 k6 scenario 错误率 <1%,无 OOM P2
TC-NF-PERF-07 §3.1.3 列表/详情 TPS ≥100 k6 达标或出报告 P2

6.2 安全性(§3.2

TC ID 要求 测试方法 通过条件 优先级
TC-NF-SEC-01 bcrypt 存储 JDBC 读 password $2a$ 等开头 P0
TC-NF-SEC-02 生产 HTTPS 部署/config 检查 301 到 HTTPS P1
TC-NF-SEC-03 SQL 注入 参数化模糊测试 / OWASP 无异常泄露 P0
TC-NF-SEC-04 XSS API 注入脚本 无执行,已转义 P0
TC-NF-SEC-05 CSRF 需求要求校验 Token 若项目为纯 JWT 无 Cookie 则记差异并测 CORS P1
TC-NF-SEC-06 敏感接口限流 突增登录/注册 429 或业务限流 P0
TC-NF-SEC-07 日志无密码 Token 扫日志输出 无明文 P1

6.3 兼容性(§3.3

TC ID 范围 测试方法 优先级
TC-NF-COMP-01 Chrome/Edge/Safari 近三版本 Playwright projects P1
TC-NF-COMP-02 视口 320~1920 Playwright viewport 矩阵 P1
TC-NF-COMP-03 触控可点区域 E2E boundingBox ≥44px P2

6.4 可用性与运维(§3.4

TC ID 要求 测试方法 优先级
TC-NF-AVAIL-01 月 99.5% 监控外置,本项标 manual/ops P3
TC-NF-AVAIL-02 日备份 7 天 检查备份任务 P3
TC-NF-AVAIL-03 RTO/RPO 灾备演练 P3

7. 权限矩阵用例(对应需求 §4.2)

通则:对每个「管理员 / 注册用户 / 访客」×「操作」组合生成 允许成功401/403 断言。使用附录 A 中真实路径。

TC ID 矩阵坐标(模块·操作) 角色 预期
TC-PM-001 管理员登录·登录后台 Admin 成功
TC-PM-002 管理员登录·登录后台 User/Guest 拒绝(无此入口或 403
TC-PM-003 用户注册·提交申请 Guest 成功
TC-PM-004 博客发布·创建 Guest 401
TC-PM-005 博客发布·创建 User 成功
TC-PM-006 博客浏览·公开列表 Guest 200
TC-PM-007 博客浏览·私密文详情 Guest 404/403
TC-PM-008 博客浏览·私密文详情 Author 200
TC-PM-009 评论·发表评论 Guest 401
TC-PM-010 评论·发表评论 User 200
TC-PM-011 评论·删除/屏蔽 User 403
TC-PM-012 评论·删除/屏蔽 Admin 200
TC-PM-013 后台·用户列表 User 403
TC-PM-014 后台·用户列表 Admin 200
TC-PM-015 后台·分类标签 CRUD Admin 200

(实现完整矩阵时可脚本化:读取 §4.2 表生成组合。)


8. 界面与交互(对应需求 §5

TC ID 来源 场景 建议工具
TC-UI-001 §5.1 对比度 WCAG AA 首页/文章页 axe Playwright+axe
TC-UI-002 §5.1 深色模式 切换 theme DOM E2E
TC-UI-003 §5.2.1 列表卡片字段 标题摘要封面时间阅读量分类 E2E 快照或字段断言
TC-UI-004 §5.2.1 悬停 scale hover transform E2E 可选
TC-UI-005 §5.2.1 骨架屏 loading 状态 E2E
TC-UI-006 §5.2.2 详情排版/灯箱/分享 视项目是否存在按钮 E2E
TC-UI-007 §5.2.3 编辑页分栏/自动保存指示/二次确认 E2E
TC-UI-008 §5.2.4 移动端汉堡/单列/工具栏 viewport 矩阵
TC-UI-009 §5.3 空/加载/错误/超时 UI 网络 mock

9. 测试验收与流程(对应需求 §6

需求原文 转化为自动化门禁
§6.1 功能全覆盖 Jacoco/覆盖率报告 + TC 追溯矩阵 100% 可映射
§6.2.1 性能 k6 JOB 接 CI nightly
§6.2.2 安全 OWASP ZAP 或依赖 sqlmap 仅 stag、密码 bcrypt 单测
§6.2.3 兼容 Playwright 多浏览器 project
§6.3 P0/P1 清零 Issue 与 @Tag("p0") 对应

10. API 回归清单(与需求交叉的快捷索引)

详细路径与 HTTP 方法见附录 A;实现测试时 {id} 用例内替换。

认证POST /api/public/user/loginPOST /api/public/admin/loginPOST /api/public/user/registerPOST /api/public/refresh-tokenGET /api/public/captcha

用户GET /api/app/user/mePOST/DELETE /api/app/user/{id}/followGET /api/admin/user/listPUT /api/admin/user/{id}/reset-passwordPUT /api/admin/user/{id}/status

文章GET /api/public/article/listGET /api/public/article/{id}POST /api/app/articlePUT /api/app/article/{id}GET /api/app/article/minePUT /api/app/article/{id}/recyclePUT /api/app/article/{id}/restoreDELETE /api/app/article/{id}POST /api/app/article/{id}/likeGET/DELETE /api/admin/article/*

分类/标签GET /api/public/category/listGET /api/public/tag/listPOST/PUT/DELETE /api/admin/category/*POST /api/admin/tag

评论POST /api/app/commentDELETE /api/app/comment/{id}GET /api/app/comment/article/{articleId}POST /api/app/comment/{id}/likeGET /api/admin/comment/listPUT /api/admin/comment/{id}/auditDELETE /api/admin/comment/{id}


附录 A:后端路由(当前代码,jog-*

Controller / 前缀 方法摘要
/api/publicAuth POST /user/loginPOST /admin/loginPOST /user/registerGET /captchaPOST /refresh-token
/api/app/user GET /meGET /{id}POST/DELETE /{id}/followPOST /logout
/api/admin/user GET /listPUT /{id}/reset-passwordPUT /{id}/status
/api/public/article GET /listGET /{id}
/api/app/article POST /PUT /{id}GET /minePUT /{id}/recyclePUT /{id}/restoreDELETE /{id}POST /{id}/like
/api/admin/article GET /listDELETE /{id}
/api/public/category GET /list
/api/admin/category POST /PUT /{id}DELETE /{id}
/api/public/tag GET /list
/api/admin/tag POST /name 参数)
/api/app/comment POST /DELETE /{id}GET /article/{articleId}POST /{id}/like
/api/admin/comment GET /listPUT /{id}/auditDELETE /{id}

契约:实现后须将上表与 jog-frontend/src/api/**/*.jsurl+method 对齐。


附录 B:追溯索引(验收 ID → 用例 ID 前缀)

需求 AC 本文 TC
AC-ADM-LOGIN-* TC-AC-ADM-LOGIN-0*
AC-USER-REG-* TC-AC-USER-REG-0*
AC-USER-LOGIN-* TC-AC-USER-LOGIN-0*
AC-BLOG-PUB-* TC-AC-BLOG-PUB-0*
AC-BLOG-LIST-* TC-AC-BLOG-LIST-0*
AC-COMMENT-* TC-AC-COMMENT-0*

附录 Cjog-system-requirements.md 全部 AC 一行一用例(共 37 条)

# 需求 AC 本文主用例 ID 所在章节
1 AC-ADM-LOGIN-01 TC-AC-ADM-LOGIN-01 §5.1.2
2 AC-ADM-LOGIN-02 TC-AC-ADM-LOGIN-02 §5.1.2
3 AC-ADM-LOGIN-03 TC-AC-ADM-LOGIN-03 §5.1.2
4 AC-ADM-LOGIN-04 TC-AC-ADM-LOGIN-04 §5.1.2
5 AC-ADM-LOGIN-05 TC-AC-ADM-LOGIN-05 §5.1.2
6 AC-USER-REG-01 TC-AC-USER-REG-01 §5.2.2
7 AC-USER-REG-02 TC-AC-USER-REG-02 §5.2.2
8 AC-USER-REG-03 TC-AC-USER-REG-03 §5.2.2
9 AC-USER-REG-04 TC-AC-USER-REG-04 §5.2.2
10 AC-USER-REG-05 TC-AC-USER-REG-05 §5.2.2
11 AC-USER-LOGIN-01 TC-AC-USER-LOGIN-01 §5.3.2
12 AC-USER-LOGIN-02 TC-AC-USER-LOGIN-02 §5.3.2
13 AC-USER-LOGIN-03 TC-AC-USER-LOGIN-03 §5.3.2
14 AC-USER-LOGIN-04 TC-AC-USER-LOGIN-04 §5.3.2
15 AC-USER-LOGIN-05 TC-AC-USER-LOGIN-05 §5.3.2
16 AC-USER-LOGIN-06 TC-AC-USER-LOGIN-06 §5.3.2
17 AC-BLOG-PUB-01 TC-AC-BLOG-PUB-01 §5.4.2
18 AC-BLOG-PUB-02 TC-AC-BLOG-PUB-02 §5.4.2
19 AC-BLOG-PUB-03 TC-AC-BLOG-PUB-03 §5.4.2
20 AC-BLOG-PUB-04 TC-AC-BLOG-PUB-04 §5.4.2
21 AC-BLOG-PUB-05 TC-AC-BLOG-PUB-05 §5.4.2
22 AC-BLOG-PUB-06 TC-AC-BLOG-PUB-06 §5.4.2
23 AC-BLOG-PUB-07 TC-AC-BLOG-PUB-07 §5.4.2
24 AC-BLOG-LIST-01 TC-AC-BLOG-LIST-01 §5.5.2
25 AC-BLOG-LIST-02 TC-AC-BLOG-LIST-02 §5.5.2
26 AC-BLOG-LIST-03 TC-AC-BLOG-LIST-03 §5.5.2
27 AC-BLOG-LIST-04 TC-AC-BLOG-LIST-04 §5.5.2
28 AC-BLOG-LIST-05 TC-AC-BLOG-LIST-05 §5.5.2
29 AC-BLOG-LIST-06 TC-AC-BLOG-LIST-06 §5.5.2
30 AC-BLOG-LIST-07 TC-AC-BLOG-LIST-07 §5.5.2
31 AC-COMMENT-01 TC-AC-COMMENT-01 §5.6.2
32 AC-COMMENT-02 TC-AC-COMMENT-02 §5.6.2
33 AC-COMMENT-03 TC-AC-COMMENT-03 §5.6.2
34 AC-COMMENT-04 TC-AC-COMMENT-04 §5.6.2
35 AC-COMMENT-05 TC-AC-COMMENT-05 §5.6.2
36 AC-COMMENT-06 TC-AC-COMMENT-06 §5.6.2
37 AC-COMMENT-07 TC-AC-COMMENT-07 §5.6.2

FR 补充用例(无单独 AC):TC-FR-USER-REG-04(§5.2.3)、TC-FR-BLOG-LIST-06(§5.5.3)。


文档结束 — 本文档为 Cursor / AI 生成自动化测试 的单一输入源;新增需求时只改本文档并升版本号。