# Jog System 自动化测试计划 | 项目 | 内容 | | :--- | :--- | | 文档版本 | V1.0 | | 生成日期 | 2026-05-18 | | 适用范围 | Jog System 后端 Maven 多模块、Vue 3 前端、数据库迁移与部署验证 | | 测试目标 | 建立可持续运行的自动化测试体系,覆盖核心业务、接口契约、安全控制、前端流程和发布质量门禁 | --- ## 1. 项目扫描结论 ### 1.1 技术与模块 本项目为前后端分离的博客系统: - 后端:Spring Boot 3.4.5、Java 21、Maven 多模块、Spring Security + JWT、MyBatis-Plus、MySQL、Redis、Flyway、SpringDoc OpenAPI。 - 前端:Vue 3.5、Vite 6、Element Plus、Pinia、Vue Router、Axios、Tiptap。 - 模块结构: - `jog-common`:统一响应、分页模型、异常、枚举、限流注解等公共能力。 - `jog-framework`:安全配置、JWT、鉴权过滤器、XSS 过滤、限流切面、全局异常。 - `jog-module-system`:登录、注册、用户信息、管理员用户管理。 - `jog-module-blog`:文章、分类、标签、点赞、公开列表、后台文章管理。 - `jog-module-comment`:评论、回复、点赞、审核、后台评论管理。 - `jog-admin`:启动入口、应用配置、Flyway 数据库迁移。 - `jog-frontend`:前台浏览、登录注册、个人中心、文章编辑、后台管理页面。 ### 1.2 当前测试基础 - 后端仅 `jog-admin` 显式引入 `spring-boot-starter-test`,其余业务模块未单独声明测试依赖。 - 项目源码中未发现自有 `src/test` 测试目录。 - 前端 `package.json` 当前仅包含 `dev`、`build`、`preview`,未配置单元测试、组件测试、E2E 测试或 lint 脚本。 - `node_modules` 已存在于工作区,属于依赖产物,不纳入源码测试范围。 ### 1.3 扫描发现的测试重点 - 后端 Controller 实际路径为 `/api/auth`、`/api/article`、`/api/comment`、`/api/admin/**`、`/api/public/**` 等。 - 前端 API 封装中存在 `/api/public/user/login`、`/api/app/article/mine`、`/api/app/comment/**` 等路径,与当前后端 Controller 的部分路径不一致,应将“前后端接口契约一致性”列为首要自动化检查。 - `SecurityConfig` 中 `/api/admin/**` 需要 `ADMIN` 角色,`/api/app/**` 需要 `USER` 或 `ADMIN`,但部分业务 Controller 未挂在 `/api/app` 下,需通过安全回归测试确认实际权限边界。 - `application.yml` 中含真实数据库、Redis 地址和密码样式配置,测试环境应改用隔离配置与环境变量,禁止自动化测试直接访问生产或公网中间件。 - 需求文档与当前代码实现存在差异,例如验证码、邮箱验证、多端会话上限、评论三级嵌套、图片上传、关注、通知、标签管理等能力并未完整落地,自动化测试应区分“已实现回归”和“需求缺口验证”。 --- ## 2. 测试目标与质量门禁 ### 2.1 测试目标 - 保证登录、注册、文章发布、文章浏览、点赞、评论、后台审核、分类和用户管理等核心链路稳定。 - 保证 JWT 鉴权、角色权限、Token 刷新/登出、限流、XSS 防护、统一异常响应可持续回归。 - 保证前后端 API 路径、请求方法、请求参数、响应结构一致。 - 保证 Flyway 迁移脚本、实体映射、MyBatis-Plus 逻辑删除与分页查询可靠。 - 保证前端路由守卫、表单校验、Axios 拦截器和关键页面交互可回归。 ### 2.2 推荐质量门禁 | 阶段 | 必跑项 | 通过标准 | | :--- | :--- | :--- | | 本地提交前 | 后端单元测试、前端构建、前端单元测试 | 全部通过,无新增严重告警 | | 合并请求 | 后端集成测试、API 契约测试、前端组件测试、E2E 冒烟 | 全部通过,核心模块覆盖率达标 | | 发布前 | 全量 E2E、迁移脚本验证、安全回归、性能冒烟 | P0/P1 缺陷为 0,P2 有明确处理计划 | | 上线后 | 健康检查、核心链路巡检、日志错误扫描 | 首页/API/登录/发文/评论均可用 | ### 2.3 覆盖率目标 | 层级 | 建议目标 | | :--- | :--- | | 后端 Service 单元测试 | 行覆盖率 >= 80%,分支覆盖率 >= 70% | | 后端 Controller/API 测试 | 核心接口 100% 覆盖,错误路径至少覆盖主要业务错误码 | | 安全与鉴权测试 | 所有公开、登录、普通用户、管理员接口权限矩阵 100% 覆盖 | | 前端工具/API/Store 单元测试 | 行覆盖率 >= 70% | | 前端关键页面组件测试 | 登录、注册、首页、详情、编辑器、后台列表页面全覆盖 | | E2E 测试 | 核心用户旅程 100% 覆盖,非核心后台功能冒烟覆盖 | --- ## 3. 测试分层策略 ### 3.1 后端单元测试 推荐工具:JUnit 5、Mockito、AssertJ、Spring Security Test。 重点覆盖: - `AuthServiceImpl` - 邮箱不存在、密码错误、账号锁定、登录成功。 - 管理员登录的角色校验。 - 注册邮箱唯一性、密码加密、默认用户状态。 - Refresh Token 校验失败、用户不存在、刷新成功。 - 登出时 Token 加入黑名单。 - `UserServiceImpl` - 当前用户信息查询。 - 用户列表分页、状态筛选。 - 管理员重置密码、锁定/解锁用户。 - `ArticleServiceImpl` - 创建草稿/发布文章、发布时间设置。 - 更新文章、标签重建、作者权限校验。 - 公开列表分页、分类/标签/关键词过滤。 - 我的文章、后台文章列表。 - 回收站、恢复、作者删除、管理员删除。 - 浏览量递增、点赞/取消点赞、文章不存在。 - `CategoryServiceImpl` - 分类创建、重名、更新、删除。 - 启用分类列表排序。 - `CommentServiceImpl` - 创建根评论和回复。 - 父评论不存在、回复层级限制。 - 评论列表根评论与回复排序。 - 作者删除权限、管理员审核、点赞/取消点赞。 - `RateLimitAspect`、`JwtTokenProvider`、`TokenBlacklistService`、`XssFilter` - 限流 Key 与过期时间。 - Token 生成、解析、过期、非法签名。 - 黑名单命中。 - 常见 XSS payload 过滤。 ### 3.2 后端集成测试 推荐工具:Spring Boot Test、MockMvc、Testcontainers(MySQL、Redis)、Flyway、spring-security-test。 重点覆盖: - 使用 Testcontainers 启动隔离 MySQL/Redis,运行 Flyway 迁移。 - 验证 `V1__init_schema.sql` 与 `V2__init_data.sql` 可重复初始化干净环境。 - 验证实体 `@TableName` 与实际表名一致,重点关注 `sys_user`/`blog_article` 等表与代码实体映射。 - 验证 MyBatis-Plus 分页插件、逻辑删除字段、唯一索引冲突、事务回滚。 - 使用 MockMvc 对 Controller 执行端到端接口测试,断言 HTTP 状态、统一响应结构、业务错误码和数据库副作用。 ### 3.3 API 契约测试 推荐工具:SpringDoc OpenAPI 导出、Schemathesis 或 Dredd、Postman/Newman、或自定义 OpenAPI diff。 契约测试必须覆盖: - 后端 OpenAPI 与前端 `src/api/*.js` 中路径、方法、参数一致。 - 统一响应结构 `ApiResult` 字段稳定:`code`、`message`、`data`。 - 分页响应 `PageResult` 字段稳定:列表、总数、页码、页大小。 - 401、403、429、业务异常响应格式一致。 - Token 刷新接口路径一致。当前前端调用 `/api/public/refresh-token`,后端扫描到的是 `/api/auth/refresh`,需优先纳入失败用例。 ### 3.4 前端单元与组件测试 推荐工具:Vitest、Vue Test Utils、jsdom、MSW、Testing Library。 重点覆盖: - `utils/request.js` - 请求自动附加 `Authorization`。 - 业务 `code !== 200` 的错误处理。 - 401 清理本地 Token 并跳转登录。 - 403、429、网络错误提示。 - Token 刷新失败/成功后的重试逻辑。 - `router/index.js` - 未登录访问 `/app/**` 和 `/admin/**` 跳转登录。 - 登录后路由放行。 - 页面标题设置。 - 管理员路由需要补充前端角色校验测试;当前代码只检查 token,未检查 `requiresAdmin`。 - 页面组件 - `Login.vue`、`Register.vue`:表单校验、提交状态、错误提示、登录后跳转。 - `Home.vue`:列表加载、分页、分类筛选、空状态。 - `ArticleDetail.vue`:详情渲染、评论列表、点赞、评论提交。 - `ArticleEditor.vue`:标题/内容校验、草稿/发布、分类标签选择、编辑回填。 - 后台 `Users.vue`、`Articles.vue`、`Comments.vue`、`Categories.vue`:列表、筛选、分页、操作确认。 ### 3.5 E2E 测试 推荐工具:Playwright。 建议用户旅程: 1. 访客打开首页,查看公开文章列表,进入文章详情。 2. 新用户注册、登录、进入个人控制台。 3. 用户创建草稿、发布文章、编辑文章、移入回收站、恢复文章、删除文章。 4. 另一用户浏览文章、点赞文章、发表评论、回复评论、取消点赞。 5. 管理员登录后台,查看用户列表、重置密码、锁定用户。 6. 管理员查看文章列表、删除违规文章。 7. 管理员查看评论列表、审核评论、删除评论。 8. 分类创建、编辑、删除后,前台筛选结果同步变化。 9. 未登录用户访问编辑页会被重定向到登录页,并在登录后返回原目标页。 10. 普通用户尝试访问后台应被拒绝。 ### 3.6 安全自动化测试 重点用例: - JWT - 缺失 Token、伪造 Token、过期 Token、黑名单 Token。 - 用户 Token 访问管理员接口返回 403。 - 管理员 Token 访问后台接口成功。 - 限流 - 登录 60 秒内超过 5 次被限制。 - 注册 1 小时内超过 3 次被限制。 - 限流 Key 应区分 IP/用户/接口,避免全局误伤。 - XSS - 文章和评论中提交 `