衣目了然项目测试报告 项目名称: 衣目了然(AIWEAR)测试类型: 接口测试(Apifox)+ 功能测试(手工)+ UI 自动化(Selenium)+ 性能测试(JMeter)测试环境:
接口 / 功能:前端 http://localhost:5173;后端 http://localhost:8081/api UI 自动化 / 性能:http://8.134.217.89测试日期: 2026-08-08 ~ 2026-08-13测试人员: Jonkin用例总数: 36 条(接口 20 + 功能 10 + UI 自动化 3 + 性能场景 3) 一、测试结论摘要 1.1 总体 测试类型 执行数 通过 不通过 功能通过* 通过率 接口测试 20 13 3 2 75%(15/20) 功能测试 10 10 0 0 100%(10/10) UI 自动化 3 3 0 0 100%(3/3) 性能测试 3 3 0 0 100%(3/3) 合计 36 29 3 2 86%(31/36)
*功能通过:接口层功能正确,但响应体非统一 Result 格式。
1.2 接口测试结论 核心业务流程符合预期。受缺少全局异常处理类影响的接口用例共 5 条:t002、t003、t005、t011、t013。 上述用例在 Java 后端已能输出正确错误消息,问题在于未通过统一Result返回给 Apifox/前端。
1.3 功能测试结论 10 条核心功能用例全部通过。 登录、路由守卫、编辑主流程、图片列表、退出登录、历史记录均正常。编辑页对「未选图」「未填指令」采用提交按钮禁用(disabled) 的前置校验,与「提交后文字提示」等效,视为通过。
1.4 UI 自动化结论 3 条 Selenium 用例全部通过。 覆盖密码登录成功、未登录访问受保护页拦截(含redirect)、退出登录后再次拦截,与手工用例 UI-01 / UI-02 / UI-09 对应。
1.5 性能测试结论 3 个 JMeter 场景均通过(数据以桌面性能测试/*/index.html为准)。 覆盖登录鉴权尖峰、图片列表高并发读取、图片上传写路径。登录/上传错误率0% ;列表错误率0.2% (500 样本中 1 条失败,整体仍达标)。上传平均约15.7s ,为写路径性能关注点。
二、功能测试明细(浏览器手工) 用例编号 模块 用例标题 优先级 是否通过 实际结果摘要 UI-01 登录/路由 未登录访问受保护页 P0 通过 访问/edit正常跳转登录页 UI-02 登录 密码登录成功 P0 通过 登录后进入编辑页,页面正常 UI-03 登录 密码登录失败提示 P0 通过 密码错误有明确提示,无法进入系统 UI-04 登录态 刷新保持登录 P0 通过 F5 刷新后仍保持登录状态 UI-05 编辑 未选图时不可提交 P1 通过 未选图时提交按钮为 disabled,无法点击 UI-06 编辑 未填指令时不可提交 P1 通过 未填指令时提交按钮为 disabled,无法点击 UI-07 编辑 正常编辑流程 P0 通过 选图+指令后 loading → 正常展示结果图 UI-08 我的图片 列表展示 P0 通过 已上传图片在列表中正常显示 UI-09 登录/退出 退出登录 P0 通过 退出后回到登录页,无法再访问受保护页 UI-10 历史记录 编辑后有记录 P1 通过 编辑成功后历史记录页有对应数据
说明: UI-05、UI-06 预期原为「提交后提示错误」;实测为「按钮前置禁用」,属合理交互设计,记通过 。
三、接口测试 — 缺陷汇总 BUG-001 缺少全局异常类,错误未统一封装为 Result(影响 t002、t003、t005) 用例 Apifox 响应 后端 Java 表现 t002 密码错误 HTTP 500,Spring 默认 JSON 控制台有「用户名或密码错误」 t003 账号为空 HTTP 500,Spring 默认 JSON 控制台有「账号不能为空」 t005 邮箱格式错 HTTP 400,Spring 校验 JSON 校验已触发,未返回 Result
BUG-002 必填 Authorization 缺失时 Spring 直接拦截(影响 t011、t013) 现象: Apifox 收到 Spring 默认 400 Bad Request功能: 未授权请求已拒绝(记通过(功能) )四、接口测试 — 受全局异常类影响用例(5 条) 用例编号 用例标题 是否通过 t002 密码登录-密码错误 不通过 t003 密码登录-账号为空 不通过 t005 发送验证码-邮箱格式错误 不通过 t011 上传图片-无Token 通过(功能) t013 我的图片列表-无Token 通过(功能)
五、接口测试用例明细 用例编号 所属模块 用例标题 优先级 是否通过 t001 用户模块 密码登录-成功 P0 通过 t002 用户模块 密码登录-密码错误 P0 不通过 t003 用户模块 密码登录-账号为空 P1 不通过 t004 用户模块 发送验证码-成功 P1 通过 t005 用户模块 发送验证码-邮箱格式错误 P1 不通过 t006 用户模块 发送验证码-重复发送 P1 通过 t007 用户模块 退出登录-成功 P0 通过 t008 文件模块 上传图片-成功 P0 通过 t009 文件模块 上传图片-空文件 P1 通过 t010 文件模块 上传图片-非图片文件 P1 通过 t011 文件模块 上传图片-无Token P0 通过(功能) t012 文件模块 我的图片列表-成功 P0 通过 t013 文件模块 我的图片列表-无Token P0 通过(功能) t014 文件模块 图片编辑-成功 P0 通过 t015 文件模块 图片编辑-缺少指令 P1 通过 t016 文件模块 图片编辑-越权 P0 通过 t017 文件模块 图片合并-越权 P0 通过 t018 文件模块 文搜图-成功 P1 通过 t019 记录模块 历史记录-查询 P1 通过 t020 鉴权模块 Token失效-退出后访问 P0 通过
六、UI 自动化测试(Java + Selenium) 6.1 环境与工具 项 说明 被测地址 http://8.134.217.89 技术栈 Java、JUnit 5、Selenium、WebDriverManager、Chrome 测试账号 testa / 123456 脚本 auto001(密码登录)、auto002(未登录拦截)、auto003(退出后再拦截)
6.2 用例明细 用例编号 模块 用例标题 优先级 是否通过 实际结果摘要 AUTO-01 登录 密码登录成功 P0 通过 切换密码登录 Tab → 提交正确账号密码 → URL 含/edit,用户菜单可见 AUTO-02 登录/路由 未登录访问受保护页 P0 通过 清空登录态后访问/edit→ 跳转/login,且 URL 带redirect AUTO-03 登录/退出 退出后再次拦截 P0 通过 登录 → 退出 → 再访/edit→ 再次跳转/login
6.3 用例步骤与预期 AUTO-01 密码登录成功(auto001) 步骤 操作 预期 1 打开 http://8.134.217.89 进入登录页 2 点击「密码登录」Tab 出现用户名、密码输入框 3 输入 testa / 123456 并提交 登录成功 4 断言 URL 包含/edit;右上角用户按钮存在
AUTO-02 未登录路由守卫(auto002) 步骤 操作 预期 1 打开站点并清空 cookie / localStorage / sessionStorage 处于未登录状态 2 直接访问/edit 被路由守卫拦截 3 断言 URL 包含/login,且包含redirect参数(如?redirect=/edit)
说明: 前端路由在未登录访问需鉴权页时执行next({ name: 'login', query: { redirect: to.fullPath } }),用于登录成功后回跳原页面,故 AUTO-02 断言redirect。
AUTO-03 退出登录后未登录拦截(auto003) 步骤 操作 预期 1 密码登录成功进入/edit 登录态有效 2 点击用户菜单 →「退出登录」 回到/login 3 再次访问/edit 再次被拦截到/login 4 断言 当前 URL 包含/login(会话已失效)
6.4 与手工功能测试对应关系 UI 自动化 对应手工用例 说明 AUTO-01 UI-02 密码登录成功 AUTO-02 UI-01 未登录访问受保护页(自动化额外校验redirect) AUTO-03 UI-09 退出后无法再访问受保护页
七、性能测试(JMeter) 7.1 环境与工具 项 说明 被测地址 http://8.134.217.89 工具 Apache JMeter 5.5 压测机 本地 Windows(约 16 逻辑处理器) 测试账号 登录尖峰:loadtest01~loadtest10(CSV 参数化);列表/上传(testa):登录取 JWT 后复用 通过标准 错误率 ≤ 1%;核心读接口 P95 < 500ms;写接口以稳定性(低错误率)为主 结果来源 桌面/性能测试/login-report、list-report、upload-report的 HTML / statistics.json(2026-08-13 生成)
7.2 场景设计说明 从业务关键路径选取 3 类接口,避免只压单一 GET:
场景 接口 类型 设计意图 PERF-01 POST /api/user/auth鉴权入口 模拟多人同时登录尖峰 PERF-02 GET /api/file/my-images高频读 编辑页/我的图片常调用;使用有图片数据 账号 PERF-03 POST /api/file/upload/image写路径 验证 multipart 上传 + OSS/存储并发稳定性
7.3 场景明细与结果(以 HTML 报告为准) PERF-01 登录鉴权尖峰 项 配置 / 结果 方法 10 账号 CSV 参数化;多线程并发登录(含同步定时器尖峰) Header Content-Type: application/json(无需 Token)Body {"account":"${username}","password":"${password}"}样本数 500 平均 / 中位 702.5 ms / 701 ms 最小 / 最大 125 ms / 1312 ms P90 / P95 / P99 1105.9 / 1145.8 / 1253.9 ms 错误率 0.00% (0/500)吞吐量 43.5/sec HTML 性能测试/login-report/index.html结论 通过 — 鉴权入口稳定无错误;P90 约 1.1s
PERF-02 图片列表高并发读取(有图数据) 项 配置 / 结果 方法 前置登录提取 JWT → 全局属性传递 → 并发压列表 Header Authorization: Bearer ${__P(token)}样本数 登录 1 + 列表500 (合计 501) 登录耗时 163 ms(错误率 0%) 列表平均 / 中位 125.9 ms / 83 ms 列表最小 / 最大 29 ms / 21029 ms(存在个别长尾) 列表 P90 / P95 / P99 111 / 113 / 123 ms 列表错误率 0.20% (1/500)列表吞吐量 22.7/sec HTML 性能测试/list-report/index.html结论 通过 — P95 远低于 500ms;错误率 0.2% ≤ 1%,读接口表现良好
PERF-03 图片上传写路径 项 配置 / 结果 方法 前置登录取 Token;multipart 上传test.jpg;参数名file Header 仅Authorization: Bearer ${__P(token)}(Content-Type 由 JMeter 自动带 boundary) 样本数 上传50 平均 / 中位 15711 ms / 15690 ms (≈15.7 s)最小 / 最大 11005 ms / 21128 ms P90 / P95 / P99 19401 / 20391 / 21128 ms 错误率 0.00% (0/50)吞吐量 0.26/sec HTML 性能测试/upload-report/index.html结论 通过(稳定性) — 全部成功;耗时长符合写 OSS/存储特征,为后续优化重点
7.4 结果对比摘要 场景 样本(主接口) 平均 RT P95 错误率 吞吐量 结论 PERF-01 登录 500 702.5 ms 1145.8 ms 0% 43.5/s 通过 PERF-02 列表 500 125.9 ms 113 ms 0.2% 22.7/s 通过 PERF-03 上传 50 15711 ms 20391 ms 0% 0.26/s 通过(稳定性)
解读: 列表读最快且 P95 很低;登录中等;上传最慢但零错误。三者形态差异符合「读轻、鉴权中、写重」预期。
7.5 与功能 / 接口测试对应关系 性能场景 对应已有验证 说明 PERF-01 t001 / UI-02 功能正确后,验证登录并发能力 PERF-02 t012 / UI-08 功能正确后,验证列表高并发读取 PERF-03 t008 功能正确后,验证上传写并发
八、改进建议 实现全局异常类,修复 t002、t003、t005、t011、t013 的响应封装 接口修复后对上述 5 条执行回归 功能 / UI 自动化 / 性能三类基线已建立,后续迭代可做对比回归 性能方面可选增强:排查列表 0.2% 失败与超长尾(max≈21s);优化上传耗时(P95≈20s);AI 编辑/合并仅做低并发基线