码上面试平台测试报告:功能、后台管理、异常状态与 JMeter 性能验证

码上面试平台测试报告

项目 内容
项目名称 码上面试平台
测试对象 前端页面、后端接口、自动化单元测试、JMeter 性能测试
测试时间 2026-07-20
测试环境 Windows 11、本地 Docker 依赖、Spring Boot 后端、Vite 前端
测试账号 2023212064 / 111111;补充注册账号 test_20260720 / 111111
测试结论 前端页面与接口登录主链路可用;前端单元测试通过;后端全量单元测试存在 2 个失败;JMeter 登录接口触发限流,性能结果需按"部分通过"处理

一、项目背景

码上面试平台是一个面向求职面试训练的 AI 模拟面试系统,前端基于 React + Vite,后端基于 Spring Boot 3 + Java 17+,核心能力包括用户登录注册、AI 聊天、简历驱动模拟面试、面试报告、语音转写与 TTS 等。

本次测试报告用于验证项目在本地环境下的基础可用性、接口稳定性、自动化测试健康度和核心接口并发表现。参考 CSDN 测试报告类文章的组织方式,本报告以"测试用例设计、测试执行截图、测试代码/日志证据、性能测试结果、缺陷统计"为主线展开。

二、项目概述

2.1 已实现的主要功能

功能模块 说明
用户认证 登录、注册、登录态检查、退出登录
首页与导航 平台首页、登录入口、面试入口、聊天入口
AI 聊天 聊天页加载、会话入口、流式响应前端承载
模拟面试 面试介绍页、简历上传入口、面试房间、面试策略
面试报告 面试记录列表、报告详情、雷达图、复盘建议
语音媒体 实时语音转写、TTS 播放、麦克风错误处理
稳定性治理 AI Guard、Single-flight、限流、幂等、防重复提交

2.2 当前系统存在的不足

编号 不足 影响
R-01 后端全量 Maven 单元测试存在 2 个失败 CI 质量门禁不能直接判定通过
R-02 登录接口在 20 线程压测下出现 429 说明登录接口受限流保护,性能结论不能写成 100% 成功
R-03 依赖 AI/讯飞密钥的完整面试链路不适合直接做无桩压测 本报告仅验证本地可控接口与页面
R-04 参考博客正文无法通过本机浏览器读取 格式无法逐字核对,只能按样例结构和真实证据还原

三、测试目标

目标编号 测试目标 验收标准
T-01 验证前端页面可访问 首页、登录页、登录后核心页面正常渲染
T-02 验证用户认证链路 登录接口返回 token,前端登录后可进入受保护页面
T-03 验证接口基础可用性 健康检查、登录、注册、登录态检查返回符合预期
T-04 验证自动化测试健康度 前端 Vitest 通过;后端 Maven 测试结果如实记录
T-05 验证核心接口性能 JMeter 生成 .jtl 与 HTML Dashboard,统计响应时间、吞吐量、错误率
T-06 发现并记录缺陷 对失败测试和性能错误做缺陷归类

四、测试环境

类型 配置
操作系统 Windows 11
前端运行地址 http://localhost:5173
后端运行地址 http://localhost:8002
数据库依赖 MySQL 8.4 Docker 容器,宿主机端口 3307
缓存依赖 Redis 7.2 Docker 容器,端口 6379
文档数据库 MongoDB 7.0 Docker 容器,端口 27017
前端测试 Vitest 4.0.18
后端测试 Maven 3.6.3 + JDK 21
性能测试 Apache JMeter 5.5
浏览器截图 Chrome + Playwright

五、测试安排

阶段 内容 产物
需求与结构梳理 分析前后端模块、接口路径、认证方式 测试范围、用例思维导图
环境启动 启动 Docker 依赖、确认前后端服务 健康检查、页面访问截图
功能测试 登录、注册、页面跳转、移动端访问 页面截图
接口测试 健康检查、登录、注册、登录态检查 api-smoke-result.json
自动化测试 前端 Vitest、后端 Maven test 测试日志、失败用例
性能测试 JMeter 20 线程、5 次循环 .jmx.jtl、Dashboard、截图
缺陷统计 汇总自动化失败和性能限流 缺陷表

六、测试用例思维导图

补测后按"登录注册、面试主流程、简历异常、答题追问、报告会话、权限安全、多媒体草稿板、执行证据"重新整理未完成用例,分类图如下:

七、功能测试

7.1 功能测试用例

用例编号 模块 测试点 操作步骤 预期结果 实际结果 结论
F-01 首页 首页首屏加载 访问 / 页面正常显示平台首页 正常显示 通过
F-02 登录页 登录表单展示 访问 /auth 用户名、密码、登录按钮显示 正常显示 通过
F-03 登录页 正确账号登录 输入 2023212064/111111 点击登录进入 跳转首页或进入登录态 跳转到首页 通过
F-04 注册接口 创建测试账号 调用注册接口创建 codex_test_20260720 返回 success 返回 success 通过
F-05 面试入口 登录后访问 /interview 登录后打开面试入口 页面正常显示 正常显示 通过
F-06 聊天页 登录后访问 /chat 登录后打开聊天页 页面正常显示 正常显示 通过
F-07 报告页 登录后访问 /interview/report 登录后打开报告页 页面正常显示 正常显示 通过
F-08 路由保护 未登录访问受保护路由 未登录访问 /chat 跳转登录页 首次截图停留登录页 通过
F-09 移动端首页 390px 宽度访问首页 移动端视口打开首页 页面不白屏、不明显错位 正常显示 通过
F-10 移动端面试页 390px 宽度访问面试入口 移动端视口打开 /interview 页面可访问 正常显示 通过

7.2 页面截图

7.3 UI 全覆盖截图补充

本节用于补足 UI 覆盖,覆盖范围不只包括首页和登录,而是扩展到注册、受保护路由、面试房间、策略选择、构思板、摄像头异常、报告详情异常态和移动端页面。以下截图均由本机 Chrome + Playwright 访问本地前端得到;其中依赖硬件权限、外部 AI 或历史报告数据的状态按 UI 状态验证处理,不等同于完整业务链路已跑通。

覆盖编号 UI 区域 状态 截图 结论
UI-01 登录页 默认登录态 ui-02-login-before.png 已覆盖
UI-02 登录页 输入账号密码 ui-03-login-filled.png 已覆盖
UI-03 注册页 注册模式 ui-15-register-tab.png 已覆盖
UI-04 注册页 密码不一致输入态 ui-16-register-password-mismatch.png 已覆盖
UI-05 未登录保护 面试房间跳转登录 ui-24-guest-interview-room-redirect.png 已覆盖
UI-06 未登录保护 报告页跳转登录 ui-25-guest-report-redirect.png 已覆盖
UI-07 面试入口 登录态入口页 ui-09-interview-intro-logged-in.png 已覆盖
UI-08 面试房间 待上传简历 ui-14-interview-room-upload-state.png 已覆盖
UI-09 面试策略 项目深挖选中 ui-17-strategy-project-deep-dive.png 已覆盖
UI-10 面试策略 基础摸排选中 ui-18-strategy-foundation-scan.png 已覆盖
UI-11 面试策略 查漏补缺选中 ui-19-strategy-gap-targeting.png 已覆盖
UI-12 构思板 空构思板打开 ui-20-sketchpad-open-empty.png 已覆盖
UI-13 摄像头 权限/不可用异常态 ui-21-camera-permission-error.png 已覆盖
UI-14 简历上传 非 PDF 文件选择/异常态 ui-22-upload-non-pdf-state.png 已覆盖
UI-15 聊天页 登录态聊天页 ui-10-chat-logged-in.png 已覆盖
UI-16 报告列表 登录态报告页 ui-11-report-list-logged-in.png 已覆盖
UI-17 报告详情 缺少 sessionId ui-23-report-detail-no-session.png 已覆盖
UI-18 移动端 移动端首页 ui-12-mobile-home.png 已覆盖
UI-19 移动端 移动端面试入口 ui-13-mobile-interview.png 已覆盖
UI-20 移动端 移动端登录页 ui-26-mobile-auth.png 已覆盖
UI-21 移动端 移动端面试房间 ui-27-mobile-interview-room.png 已覆盖
UI-22 移动端 移动端报告页 ui-28-mobile-report-list.png 已覆盖

7.4 补充测试用例矩阵

说明:本节按参考博客"按页面/模块拆分用例"的方式整理。上一版中尚未完成的补充用例已在本次补测中改为真实浏览器、真实 API、前端自动化、后端单元测试或 Mock 异常测试执行;发现不符合预期的场景单独标为"已执行,记录缺陷"。

用例编号 模块 测试点 前置条件 预期结果 执行状态
F-11 登录页 用户名输入框显示 访问 /auth 输入框可见、可输入 已执行
F-12 登录页 密码输入框显示 访问 /auth 密码框可见,输入内容隐藏 已执行
F-13 登录页 正确账号密码登录 输入 2023212064/111111 登录成功并跳转首页 已执行
F-14 登录页 空用户名登录 清空用户名后提交 页面提示或阻止提交 已执行(真实浏览器+前端自动化)
F-15 登录页 空密码登录 清空密码后提交 页面提示或阻止提交 已执行(真实浏览器+前端自动化)
F-16 登录页 错误密码登录 输入错误密码 登录失败并提示 已执行(真实浏览器+真实 API)
F-17 注册页 切换注册模式 点击注册标签 展示确认密码字段 已执行(真实浏览器+前端自动化)
F-18 注册页 新用户注册 使用新用户名注册 注册接口返回成功 已执行
F-19 注册页 重复用户名注册 使用已存在用户名注册 返回重复用户名提示 已执行(真实 API+前端自动化)
F-20 首页 首页首屏加载 访问 / 首页内容完整显示 已执行
F-21 首页 未登录点击面试入口 未登录状态 跳转登录页 已执行
F-22 首页 登录后点击面试入口 登录状态 进入面试介绍页 已执行
F-23 首页 登录后点击聊天入口 登录状态 进入聊天页 已执行
F-24 面试介绍页 页面基础信息展示 登录后访问 /interview 面试介绍页正常显示 已执行
F-25 面试介绍页 简历上传入口展示 登录后访问 /interview 上传入口可见 已执行(真实浏览器)
F-26 面试介绍页 策略模式选择 登录后访问 /interview 可选择面试策略 已执行(真实浏览器)
F-27 面试房间 未选择简历直接开始 登录状态 页面给出限制或提示 已执行(真实浏览器)
F-28 面试房间 答题输入框 已进入面试房间 输入框可编辑 已执行(真实浏览器)
F-29 面试房间 答案提交 已生成问题 提交后进入评分/追问流程 已执行(前端自动化 Mock AI)
F-30 聊天页 页面加载 登录后访问 /chat 聊天页正常显示 已执行
F-31 聊天页 空消息提交 聊天页 阻止空提交 已执行(前端自动化)
F-32 聊天页 普通消息发送 登录状态 展示用户消息和 AI 响应 已执行(前端自动化 Mock AI)
F-33 报告页 报告列表加载 登录后访问 /interview/report 页面正常显示 已执行
F-34 报告页 空数据展示 无面试记录 显示空状态或引导 已执行
F-35 报告详情页 详情路由访问 有报告 ID 显示分数、雷达图、复盘内容 已执行(报告数据自动化+真实浏览器缺失态)
F-36 退出登录 点击退出 登录状态 清除登录态并跳转登录页 已执行(前端自动化)
F-37 路由保护 未登录访问 /chat 清除 token 自动跳转 /auth 已执行
F-38 路由保护 未登录访问 /interview/report 清除 token 自动跳转 /auth 已执行
F-39 移动端 移动端首页 390px 宽度 不白屏、不横向溢出 已执行
F-40 移动端 移动端面试页 390px 宽度 页面主要内容可见 已执行
F-41 浏览器兼容 Chrome 桌面端访问 Chrome 页面正常加载 已执行
F-42 浏览器兼容 刷新登录态页面 登录后刷新 不丢失登录态 已执行
F-43 接口鉴权 无 token 访问保护接口 不带 token 返回未登录或被拦截 已执行,记录缺陷(真实 API 返回系统异常)
F-44 接口鉴权 Bearer token 访问 登录后带 token 返回当前用户状态 已执行
F-45 性能 5 线程并发登录 JMeter 顺序执行 0 错误或错误可解释 已执行
F-46 性能 10 线程并发登录 JMeter 顺序执行 0 错误或错误可解释 已执行
F-47 性能 20 线程并发登录 JMeter 执行 记录响应时间与错误率 已执行
F-48 安全 登录接口限流 并发请求 超阈值时返回 429 已执行
F-49 安全 报告隐藏 token 写报告时处理 不展示真实 token 已执行
F-50 可用性 错误提示可读性 触发错误 提示文案明确 已执行(真实浏览器+自动化)

7.5 核心面试流程专项测试设计

前一版报告覆盖了登录、首页、面试入口和报告页,但对核心业务链路覆盖不足。本次补测已把面试主流程拆成正常流、简历异常、答题追问异常、会话报告恢复、权限并发、多媒体草稿板六类;外部 AI 不稳定的场景使用 Mock 返回或构造异常执行,并在状态中注明证据来源。

7.5.1 正常主流程用例
用例编号 阶段 测试点 操作步骤 预期结果 状态
IV-01 会话创建 创建默认面试会话 登录后进入 /interview/room 页面进入面试房间,等待上传简历 已执行
IV-02 会话创建 选择基础摸排策略 在面试房间选择 FOUNDATION_SCAN 创建会话时携带策略模式 已有自动化覆盖
IV-03 会话创建 选择项目深挖策略 选择 PROJECT_DEEP_DIVE 后上传简历 后端按项目深挖策略生成题目 已执行(真实 API+前端自动化)
IV-04 会话创建 选择查漏补缺策略 选择 GAP_TARGETING 后答题 答题请求携带策略配置 已有自动化覆盖
IV-05 简历上传 上传合法 PDF 简历 选择 .pdf 简历文件 上传成功,展示文件名和解析状态 已执行(前端自动化 Mock 服务)
IV-06 简历解析 触发简历出题 上传 PDF 后等待解析 返回题目、建议、简历分数 已执行(前端自动化 Mock AI)
IV-07 题目展示 首题加载 简历解析成功后进入答题区 显示第 1 题和题号 已有自动化覆盖
IV-08 答题提交 正常提交文本答案 输入有效回答并提交 展示用户回答、AI 反馈、下一题 已有自动化覆盖
IV-09 追问流程 后端返回追问 提交回答后后端返回 isFollowUp=true 页面显示"追问第 N 轮"标识 已有自动化覆盖
IV-10 策略反馈 返回策略决策 答题后返回 strategyDecision 页面展示当前聚焦点、决策原因、下一步动作 已有自动化覆盖
IV-11 流程推进 非追问进入下一题 答题后返回下一题号 当前题号更新,下一题展示 已有自动化覆盖
IV-12 面试结束 答完最后一题 后端返回 finished=true 页面显示面试完成和总分 已有自动化覆盖
IV-13 报告保存 自动保存报告 面试完成后触发保存 只保存一次并提示成功 已有自动化覆盖
IV-14 报告跳转 手动结束面试 点击结束面试 调用 finish 接口并跳转报告页 已有自动化覆盖
IV-15 报告查看 通过 sessionId 查看报告 访问 /interview/report?sessionId=... 展示报告数据、雷达图、复盘建议 已执行(报告视图模型自动化)
7.5.2 简历上传与解析异常用例
用例编号 异常类型 操作步骤 预期结果 状态
IV-E01 未上传简历直接答题 进入面试房间后直接输入答案 输入框应禁用或提示先上传简历 已执行(真实浏览器+交互断言)
IV-E02 上传非 PDF 文件 选择 .docx/.png/.txt 文件 前端或后端拒绝,提示文件格式不支持 已执行(前端自动化)
IV-E03 上传空 PDF 选择 0KB PDF 拒绝上传或解析失败提示 已执行(前端自动化 Mock 异常)
IV-E04 上传超大 PDF 选择超过限制的 PDF 返回文件大小限制提示 已执行(前端自动化 Mock 异常)
IV-E05 上传损坏 PDF 选择无法解析的 PDF 预览失败或解析失败提示 已执行(前端自动化 Mock 异常)
IV-E06 上传过程中断网 上传时断开后端服务 页面显示上传失败,可重新选择文件 已执行(前端自动化 Mock 网络异常)
IV-E07 简历解析超时 AI 出题接口超过超时时间 页面显示解析失败或重试提示 已执行(前端自动化 Mock 超时)
IV-E08 简历解析返回空题目 Mock 后端返回空 questions 页面不进入可答题状态,提示解析异常 已执行(前端自动化 Mock 空结果)
IV-E09 简历预览非 PDF 响应 后端预览返回文本错误 前端显示预览错误,不误当 PDF 渲染 已执行(service 单元测试)
IV-E10 重复上传简历 同一会话重复选择文件 状态更新为最新文件或提示覆盖 已执行(前端自动化)
7.5.3 答题与追问异常用例
用例编号 异常类型 操作步骤 预期结果 状态
IV-E11 空答案提交 题目加载后提交空内容 阻止提交或提示请输入答案 已执行(前端自动化)
IV-E12 超长答案提交 输入超过 5000 字 后端校验失败,页面展示错误 已执行(前端自动化 Mock 失败)
IV-E13 当前题号缺失 当前题号为空时提交 不调用答题接口,提示题号缺失 已有自动化覆盖
IV-E14 答题接口返回失败 后端返回 isSuccess=false 停止思考状态,展示错误消息 已有自动化覆盖
IV-E15 答题接口 500 服务端异常 页面显示失败提示,不丢失用户答案 已执行(前端自动化 Mock 500)
IV-E16 答题接口超时 AI 评分超时 页面显示超时/重试提示 已执行(前端自动化 Mock 超时)
IV-E17 重复点击提交 快速连续点击发送 防重复提交或只处理一次 已执行(前端自动化)
IV-E18 requestId 重放 使用相同 requestId 重复提交 后端幂等返回或拒绝重复处理 已执行(前端 requestPolicy 单元测试)
IV-E19 追问次数上限 连续触发追问 达到上限后进入下一题 已执行(service 归一化单元测试)
IV-E20 追问问题为空 后端返回 isFollowUp=true 但问题为空 页面不追加空追问,提示异常 已执行(前端自动化)
IV-E21 分数为空 后端反馈无 score 页面不崩溃,按缺省值展示 已执行(service 单元测试)
IV-E22 策略决策为空 后端无 strategyDecision 策略卡片不展示,流程继续 已执行(组件单元测试)
IV-E23 策略服务异常 策略决策失败但追问规则可用 回退到原追问规则 已有自动化覆盖
IV-E24 AI 反馈含 Markdown 返回列表/代码块 页面正确渲染 Markdown 已执行(前端自动化)
IV-E25 AI 反馈含特殊字符 返回 emoji、尖括号、换行 页面不乱码、不注入脚本 已执行(前端自动化)
7.5.4 会话恢复、结束与报告异常用例
用例编号 场景 操作步骤 预期结果 状态
IV-R01 路由会话恢复 访问 /interview/room/{sessionId} 同步路由 sessionId 并加载当前题 已有自动化覆盖
IV-R02 空路由不自动恢复 本地有旧 session 但路由为空 不自动恢复旧会话 已有自动化覆盖
IV-R03 会话 DRAFT 状态恢复 恢复未上传简历会话 页面停留上传简历状态 已执行(真实 API)
IV-R04 会话 READY 状态恢复 恢复已生成题目会话 页面显示当前题 已执行(前端自动化 Mock 恢复)
IV-R05 会话 IN_PROGRESS 状态恢复 答题中刷新页面 消息和当前题恢复 已执行(前端自动化)
IV-R06 会话 COMPLETED 状态恢复 已完成会话进入房间 引导查看报告 已执行(前端自动化)
IV-R07 手动结束未开始会话 未上传简历时点击结束 后端安全结束或前端阻止 已执行(真实 API)
IV-R08 手动结束进行中会话 答题中点击结束 调用 finish 并跳转报告页 已有自动化覆盖
IV-R09 自动保存重复触发 完成状态多次 rerender finishInterviewSession 只调用一次 已有自动化覆盖
IV-R10 保存报告时并发请求 多个线程保存同一 session 只有一个成功,其余提示处理中 后端压力测试覆盖
IV-R11 报告列表为空 新用户访问报告页 显示空状态 已执行
IV-R12 报告详情不存在 访问不存在 sessionId 返回错误提示或空状态 已执行(真实浏览器+真实 API,记录返回空成功缺陷)
IV-R13 雷达图数据为空 后端无 radar 数据 页面不崩溃,显示缺省/空状态 已执行(报告视图模型自动化)
IV-R14 复盘总结为空 后端无 reflectionSummary 页面展示基础报告,不报错 已执行(报告视图模型自动化)
IV-R15 历史消息分页 会话消息超过分页大小 分页正确,无重复/缺失 已执行(聊天历史自动化)
7.5.5 权限、隔离与并发异常用例
用例编号 场景 操作步骤 预期结果 状态
IV-S01 未登录创建会话 不带 token 调用 /sessions 被拦截或返回未登录 已执行,记录缺陷(真实 API 返回系统异常)
IV-S02 未登录上传简历 不带 token 上传文件 被拦截 已执行(前端 request 鉴权单元测试)
IV-S03 未登录答题 不带 token 调答题接口 被拦截 已执行(前端 request 鉴权单元测试)
IV-S04 越权查看会话 用户 A 访问用户 B 的 sessionId 返回无权限或不存在 已执行(后端鉴权单元测试)
IV-S05 越权查看报告 用户 A 查看用户 B 报告 返回无权限或不存在 已执行(后端鉴权单元测试)
IV-S06 token 过期恢复会话 清除 token 后刷新房间 跳转登录页 已执行(路由保护自动化+真实浏览器)
IV-S07 多标签页同会话答题 两个页面同时提交答案 后端幂等/锁保护,不重复扣题 已执行(前端重复提交自动化+后端压力测试)
IV-S08 AI Single-flight 去重 同一题同一 requestKey 并发 只执行一次 AI 调用或结果回放 后端单元/压力测试部分覆盖
IV-S09 答题限流 高频提交答题请求 超阈值时拒绝 后端限流测试覆盖
IV-S10 大量报告分页查询 高频查询报告列表 响应稳定且分页正确 已执行(真实 API)
7.5.6 语音、摄像头与草稿板异常用例
用例编号 场景 操作步骤 预期结果 状态
IV-M01 麦克风授权拒绝 浏览器拒绝麦克风 清理录音资源并提示失败 前端自动化覆盖
IV-M02 语音转写连接失败 WebSocket 连接失败 页面提示语音不可用,不影响文本答题 已执行(前端自动化)
IV-M03 转写结果重复片段 AST 返回重叠片段 前端/后端去重,不重复显示 后端当前有失败用例
IV-M04 摄像头授权拒绝 点击摄像头后拒绝权限 显示摄像头错误提示 已执行(真实浏览器)
IV-M05 神态分析图片为空 上传空图片 后端拒绝并提示 已执行(后端单元测试/服务异常覆盖)
IV-M06 神态分析 AI 超时 表情分析超时 不阻塞主答题流程 已执行(前端自动化 Mock 异常)
IV-M07 草稿板打开关闭 点击草稿板 正常打开/关闭 已执行(真实浏览器+前端自动化)
IV-M08 草稿插入答案 草稿板写内容后插入 内容进入答题输入框 已执行(前端自动化)
IV-M09 草稿为空插入 空草稿点击插入 不改变输入框 已执行(前端自动化)
IV-M10 简历参考卡预览失败 PDF 预览失败 显示预览错误,不影响答题 已执行(前端自动化)

7.6 未完成用例补测执行记录

本次补测没有删除原有测试项,而是在原有矩阵基础上补充真实浏览器、真实接口和自动化执行证据。依赖外部 AI、摄像头、麦克风或用户历史数据的场景,以可控 Mock、权限拒绝、异常返回和空状态方式验证前端兜底逻辑;真实接口不符合预期的项目进入缺陷表。

执行类型 覆盖范围 执行结果 证据
前端全量自动化 登录注册、面试流程、简历预览、报告数据、草稿板、路由 25 个测试文件、127 条用例全部通过 results/frontend-vitest-supplemental.log
真实 API 补测 登录、错误密码、注册、重复注册、鉴权、创建会话、恢复会话、结束会话、报告列表、缺失报告 12 条已执行,3 条记录为接口缺陷或兼容风险 results/supplemental-api-results.json
真实浏览器补测 登录空值、错误密码、注册密码不一致、首页、面试入口、面试房间、草稿板、聊天、报告、缺失报告 12 张截图已留存 assets/screenshots/supplemental-ui/
异常与边界补测 空答案、重复提交、后端 500、请求超时、非 PDF、空 PDF、预览失败、Markdown 特殊字符 前端自动化通过 frontend/AI-Meeting-Frontend/src/hooks/interview/**

八、接口测试

8.1 接口测试用例

用例编号 接口 方法 输入 预期结果 实际结果 结论
I-01 /actuator/health GET 返回 UP 返回 UP 通过
I-02 /api/xunzhi/v1/users/login POST 2023212064/111111 success=true,返回 token 返回 36 位 token 通过
I-03 /api/xunzhi/v1/users/register POST codex_test_20260720/111111 注册成功 返回 success=true 通过
I-04 /api/xunzhi/v1/users/check-login GET Authorization: Bearer <token> 返回已登录用户 isLogin=true,用户为 2023212064 通过

8.2 接口冒烟结果

json 复制代码
{
  "health": "UP",
  "loginSuccess": true,
  "loginUser": "2023212064",
  "tokenLength": 36,
  "checkLoginSuccess": true,
  "checkLoginIsLogin": true,
  "checkLoginUser": "2023212064"
}

8.3 真实 API 补测结果

执行脚本:docs/testing/scripts/run_supplemental_api_tests.mjs

用例编号 接口/场景 状态码 实际结果 结论
API-LOGIN-OK 正确账号登录 200 code=0,返回 token 通过
API-LOGIN-BAD-PASSWORD 错误密码登录 200 code=A000001success=false 通过
API-REGISTER-NEW 新账号注册 200 code=0,注册成功 通过
API-REGISTER-DUPLICATE 重复用户名注册 200 code=B000201,提示用户名已存在 通过
API-PROTECTED-NO-TOKEN 无 token 创建会话 200 code=B000001,提示系统执行出错 已执行,记录缺陷
API-CHECK-LOGIN token 登录态检查 200 code=0,登录态有效 通过
API-CREATE-SESSION 创建 PROJECT_DEEP_DIVE 面试会话 200 code=0,返回 DRAFT 会话 通过
API-RESTORE-DRAFT 恢复 DRAFT 会话 200 code=0,返回会话数据 通过
API-FINISH-DRAFT 手动结束 DRAFT 会话 200 code=0,结束成功 通过
API-REPORT-PAGE 报告列表主路径 200 code=0,返回列表结构 通过
API-MISSING-REPORT 缺失报告详情 200 code=0,但缺少有效报告数据 已执行,记录缺陷
API-REPORT-PAGE-LEGACY 旧报告列表路径 200 code=B000001,系统执行出错 已执行,记录兼容风险

九、自动化测试

9.1 前端单元测试

执行命令:

powershell 复制代码
npm.cmd run test:run

执行结果:

指标 结果
测试文件 25 passed / 25
测试用例 127 passed / 127
耗时 7.99s
结论 通过

补测日志:results/frontend-vitest-supplemental.log,其中新增覆盖登录注册错误提示、面试答题异常、简历异常、报告空数据和草稿板异常。

前端自动化测试代码截图:

9.2 后端单元测试

执行命令:

powershell 复制代码
$env:JAVA_HOME='D:\Program Files\Java\jdk-21'
$env:Path="$env:JAVA_HOME\bin;$env:Path"
.\mvnw.cmd -B -ntp test

执行结果:

指标 结果
测试总数 94
失败数 2
错误数 0
跳过数 0
构建结果 BUILD FAILURE
结论 不通过,需要修复

失败用例:

用例 失败原因
InterviewRecordServiceImplTest.shouldFinishInterviewSessionBeforePersistingRecordFromRedis 期望 requireOwnedSession("interview-session-1", 1001L) 调用 1 次,实际调用 3 次
XunfeiAudioServiceAssemblerTest.noPgsPartial_ShouldReplaceCurrentLiveSnapshot 期望转写片段结果为 AB,实际为 AAB

十、性能测试

10.1 测试目标

性能测试严格围绕本地稳定可访问接口执行,不压测依赖外部 AI/讯飞密钥的长链路,避免把外部服务波动误判为本系统性能问题。

10.2 JMeter 测试设计

项目 配置
测试工具 Apache JMeter 5.5
测试计划 assets/jmeter/ai-meeting-performance.jmx
线程数 20
Ramp-Up 5 秒
循环次数 5
请求总数 200
请求接口 GET /actuator/healthPOST /api/xunzhi/v1/users/login
输出文件 .jtl、JMeter HTML Dashboard、运行日志

执行命令:

powershell 复制代码
E:\JavaSoft\apache-jmeter-5.5\apache-jmeter-5.5\bin\jmeter.bat `
  -n `
  -t docs\testing\assets\jmeter\ai-meeting-performance.jmx `
  -l docs\testing\assets\jmeter\ai-meeting-performance.jtl `
  -e `
  -o docs\testing\assets\jmeter\dashboard `
  -j docs\testing\assets\jmeter\jmeter-run.log

10.3 JMeter 汇总结果

指标 Total 健康检查接口 登录接口
样本数 200 100 100
错误数 9 0 9
错误率 4.5% 0% 9.0%
平均响应时间 7.63ms 6.46ms 8.80ms
中位数响应时间 7ms 5ms 8ms
最小响应时间 2ms 3ms 2ms
最大响应时间 37ms 37ms 28ms
P90 10ms 8ms 11ms
P95 13.95ms 15.70ms 13.95ms
P99 28.99ms 36.92ms 27.95ms
吞吐量 42.22/s 21.14/s 21.29/s

10.4 性能结果分析

本次 JMeter 压测显示,健康检查接口 100 次请求全部成功,平均响应 6.46ms;登录接口 100 次请求中 91 次成功、9 次返回 429。429 不是网络错误,而是系统限流策略在并发登录场景下生效。因此性能结论不能写成"全部通过",应写为:

  1. 健康检查接口响应稳定,低延迟。
  2. 登录接口平均响应时间较低,但在 20 线程并发下触发限流。
  3. 如果业务目标是保护登录接口、防暴力破解,429 属于预期防护效果。
  4. 如果业务目标是支持更高并发登录,需要调整限流阈值或增加登录流量白名单/分桶策略。

10.5 JMeter 额外对比压测

原 20 线程 JMeter 压测结果保留不变。为了补足参考博客中"结合不同结果图进一步分析"的写法,本节额外增加 5 线程、10 线程顺序压测,与原 20 线程结果做对比。

需要注意:5 线程和 10 线程不能与 20 线程同时运行,否则多个测试计划会共享登录接口限流桶,导致错误率互相污染。因此本节采用顺序执行:先执行 5 线程,等待限流窗口恢复,再执行 10 线程,最后与原 20 线程结果对比。

对比组 线程数 Ramp-Up 循环次数 总请求数 登录请求数 总错误数 总错误率 平均响应时间 最大响应时间 总吞吐量
低并发组 5 2s 5 50 25 0 0% 6.34ms 31ms 31.33/s
中并发组 10 3s 5 100 50 0 0% 6.17ms 35ms 37.27/s
高并发组 20 5s 5 200 100 9 4.5% 7.63ms 37ms 42.22/s

登录接口对比:

对比组 登录样本数 登录错误数 登录错误率 登录平均响应时间 登录最大响应时间 主要现象
5 线程 25 0 0% 6.88ms 10ms 登录接口正常响应
10 线程 50 0 0% 7.20ms 35ms 登录接口正常响应,最大响应时间增加
20 线程 100 9 9.0% 8.80ms 28ms 登录接口出现 429,限流生效

从对比结果看,5 线程和 10 线程下健康检查与登录接口都没有错误;当线程数提升到 20 后,登录接口出现 429。这个变化说明当前瓶颈不主要体现在响应时间上,而是体现在登录接口的访问频率控制上。也就是说,系统在低中并发下响应很快,高并发下不是"慢",而是被限流策略主动拒绝了一部分请求。

如果业务目标是防止登录暴力破解,这个结果是合理的安全保护;如果业务目标是高并发登录压测通过,则需要调高登录接口限流阈值,或把性能测试账号、测试 IP 纳入专用测试策略。

十一、安全性测试

用例编号 测试点 预期结果 实际结果 结论
S-01 密码输入框 密码不明文展示 type=password 通过
S-02 未登录访问受保护路由 自动跳转登录页 未登录访问受保护页停留登录页 通过
S-03 登录态接口鉴权 使用 Authorization: Bearer <token> 后可识别用户 check-login 返回 isLogin=true 通过
S-04 登录接口限流 高并发登录时可限制请求 JMeter 出现 429 通过,但需按业务目标评估阈值
S-05 敏感信息 报告不展示真实 token、密钥 只展示 token 长度 通过

十二、兼容性与可用性测试

用例编号 测试点 实际结果 结论
C-01 Chrome 桌面端首页 正常访问 通过
C-02 Chrome 桌面端登录页 正常访问 通过
C-03 Chrome 桌面端登录后页面 首页、面试、聊天、报告页可访问 通过
C-04 移动端 390px 首页 页面正常显示 通过
C-05 移动端 390px 面试页 页面正常显示 通过
U-01 登录表单可识别性 用户名、密码、登录进入按钮清晰 通过
U-02 空报告页可理解性 报告页可加载并显示当前状态 通过

十三、缺陷统计与分析

缺陷编号 严重级别 来源 现象 影响 建议
BUG-01 P1 后端单元测试 InterviewRecordServiceImplTest 期望所有权校验调用 1 次,实际 3 次 CI 无法通过;可能存在重复校验或测试断言过窄 核对 saveInterviewRecordFromRedissaveInterviewRecord 调用链,确认是实现重复还是测试期望需更新
BUG-02 P1 后端单元测试 XunfeiAudioServiceAssemblerTest 期望 AB,实际 AAB 实时语音转写可能出现片段重复 检查无 pgs partial 场景是否应替换 live snapshot,而不是追加
BUG-03 P2 真实 API 补测 无 token 调用创建会话接口返回 B000001 系统执行出错 未登录/鉴权失败场景对前端和用户不够明确,也不利于接口调用方判断 后端统一鉴权失败错误码,返回未登录或无权限语义
BUG-04 P2 真实 API 补测 查询不存在的报告详情返回 code=0 但缺少有效报告数据 前端可能误判为正常报告,报告详情空状态契约不清晰 不存在 session/report 时返回明确 not found 或标准空状态
BUG-05 P3 真实 API 补测 旧报告列表路径返回 B000001 系统执行出错 如果旧前端或外部调用方仍使用该路径,会出现兼容问题 明确废弃路径并返回 404/410,或保留兼容转发
PERF-01 P2 JMeter 登录接口 20 线程压测下 9% 请求返回 429 高并发登录成功率下降 明确登录限流阈值,区分安全防刷和容量目标
RISK-01 P3 参考资料 CSDN 参考正文无法访问 报告结构无法逐字对齐 如需完全对齐,需补充参考文章正文或截图

缺陷分布:

类型 数量
后端自动化失败 2
真实 API 补测缺陷/兼容风险 3
性能/限流风险 1
资料访问限制 1

十四、测试结论

本次测试完成了前端页面、后端接口、自动化单元测试和 JMeter 性能测试四类验证。已确认:

  1. 前端首页、登录页、面试入口、聊天页、报告页和移动端页面可正常访问。
  2. 用户登录、注册、登录态检查接口可用,登录接口返回 token,前端登录后可进入受保护页面。
  3. 前端 Vitest 测试通过,25 个测试文件、127 条测试用例全部通过。
  4. 后端 Maven 全量单元测试未通过,存在 2 个失败用例,不能作为通过状态交付。
  5. JMeter 压测真实执行并生成 Dashboard,健康检查接口稳定,登录接口在并发下触发 429 限流。
  6. 上一版标记为未完成的补充用例已完成执行分类整理;其中真实 API 补测发现 2 个接口缺陷和 1 个旧路径兼容风险,已单独进入缺陷表。

综合判断:当前系统基础页面、认证链路和主要面试入口可用,前端自动化补测已通过;但后端自动化质量门禁未通过,且部分鉴权/报告异常接口契约不够清晰。性能测试结果显示登录接口具备限流保护,但若目标是高并发登录容量,需要进一步调优限流策略。


感谢阅读,记得点赞、关注、收藏,欢迎各位评论区交流!!!

加粗样式

相关推荐
胡萝卜术18 小时前
当大模型遇上浏览器:用 React + WebGPU 在前端跑通 DeepSeek-R1 的实战笔记
前端·javascript·面试
浩哥学JavaAI19 小时前
2026年最新AI agent面试(10)_通信与行业动态
人工智能·面试·职场和发展
面试鸭1 天前
我说我们做 Agent 从来不怕死循环,面试官调出兜底日志:“第 47 次强制终止,是你半夜爬起来按停的?”
后端·面试·求职
jinyishu_1 天前
C++ 多态完全指南:从基础语法到底层原理
开发语言·c++·程序人生·面试
程序员清风1 天前
公司要裁员之前,都会有哪些信号?
java·后端·面试
兰令水1 天前
hot100【acm版】【2026.7.19打卡-java版本】
java·数据结构·算法·leetcode·面试
帅次1 天前
Android 高级工程师面试:Flutter 渲染与性能 近1年高频追问 20 题
android·flutter·面试·渲染·性能
为你学会写情书1 天前
从 Promise 到 Async/Await 的异步编程优雅进化
面试
hqyjzsb1 天前
非计算机专业学生怎么进入AI相关方向
人工智能·职场和发展·金融·数据挖掘·数据分析·aigc·业界资讯