[T.11] 团队项目:Alpha 阶段测试报告
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 软件工程 |
| 这个作业的要求在哪里 | [T.11]Alpha 阶段测试报告 |
| 我在这个课程的目标是 | 掌握软件工程的核心理论,协作完成软件项目开发 |
| 这个作业在哪个具体方面帮助我实现目标 | 对团队在Alpha阶段的产品进行全面测试,明确出口条件 |
一、Bug列表
前端
| 问题描述 | 问题原因 | 是否解决 |
|---|---|---|
| 登录/注册页密码输入框无法手动准确控制隐藏/显示密码 | 浏览器自带的隐藏/显示键不稳定 | ✔️ |
| 广场卡片缺少删除功能 | 未添加删除按钮及对应的后端API | ✔️ |
| 设置页存在重复的“切换账号”与“退出登录”选项 | 功能冗余,未清理重复项 | ✔️ |
| 缺少修改密码功能 | 功能考虑不全 | ✔️ |
| “我的”页面下收藏答案与历史运势记录为空 | 前后端接口不匹配或未正确调用 | ✔️ |
| 运势卡片分享到广场功能未生效 | 分享逻辑未与后端连接或功能缺失 | ✔️ |
| 答案分享至广场功能未生效 | 分享逻辑未实现或后端接口未对接 | ✔️ |
| 心情日记MoodTag匹配错误 | 前后端标签列举不匹配 | ✔️ |
| 历史答案无法点击查看详情 | 缺少点击事件与路由跳转配置 | ✔️ |
| 已收藏的答案无法再次收藏 | 缺少卡片详情,收藏状态判断有误 | ✔️ |
| 历史运势记录数、收藏答案数为硬编码而非动态获取 | 未从后端动态获取记录数量 | ✔️ |
| 答案之书历史答案不同步 | 前端本地数据与API获取数据存在冲突 | ✔️ |
| 前后端登录请求参数名不一致 | 前端传参(username/phone/account)与后端期望字段不同 | ✔️ |
| 开发模式下控制台出现大量报错/刷屏 | 旧Service Worker未注销 | ✔️ |
| “我的”页面内跳转功能未集成 | 跳转路由事件处理不当 | ✔️ |
| 心情日历允许修改未来日期的记录 | 未对日期选择范围进行限制 | ✔️ |
| 日记模块记录有误 | 前端本地数据与API获取数据存在冲突 | ✔️ |
| 广场卡片评论功能缺陷 | 未删除多余评论UI,且未替换为后端数据 | ✔️ |
| 开屏页面无互动 | 运势看板抽签流程未接入 | ✔️ |
| 运势数据使用硬编码 | 未对接后端API | ✔️ |
| PWA添加主屏幕无法实现 | 应用域名审核中 | ❌️️ |
| 抽签后EChat折线图未更新 | - | ❌️️ |
后端
| 问题描述 | 问题原因 | 是否解决 |
|---|---|---|
| 未注册用户在登录页面登录失败 | 未注册用户在登录页面点击“获取验证码”,后端会因为手机号不存在而将 action 置为 'register'。之后该用户输入验证码点击登录,/sms/login 会因 action 不匹配直接返回 "未找到验证码,请先发送",导致登录失败。 | 已解决 |
| 前后端无法连接 | 在main.py中注册蓝图时引入了/v1前缀,而在API文档中没有更新 | 已解决 |
| 无法通过密码登录 | 密码登录接口对于 account 字段的处理逻辑模糊,导致将昵称误当作手机号处理 | 已解决 |
| 数据库迁移脚本在空环境初始化失败 | 生成迁移脚本时数据库不为空,导致前端开发人员本地空环境中初始化失败 | 已解决 |
二、测试阶段
前端测试
本次前端功能测试采用手动测试方式,覆盖所有交互流程与核心业务模块,首先进行冒烟测试以验证登录/注册、广场加载、我的页面访问等核心流程的基本可用性,随后逐一验证登录注册、广场卡片展示与删除、我的页面收藏与历史记录、运势看板抽签流程与历史叙事、心情日记标签匹配与日期限制、答案之书同步与收藏、设置页功能等模块。测试发现问题汇总见上前端 Bug 列表,涉及前后端接口对接、静态数据残留、交互逻辑缺失、页面跳转错误、数据不同步等类型。缺陷修复后,执行回归测试,确认问题解决且未引入新缺陷。
后端测试
单元测试
1.测试目标与范围
- 目标:验证后端路由层与服务层在正常流程、边界条件、异常处理、鉴权安全上的正确性与稳定性。
- 范围:
backend/tests/routes与backend/tests/services。 - 非范围:端到端场景联调、性能压测。
2. 测试设计覆盖点
- 参数校验:空值、非法枚举、越界分页、超长输入。
- 业务边界:limit 上下界、时间参数合法性、资源不存在分支。
- 鉴权安全:token 缺失、格式错误、过期 token。
- 异常路径:服务调用异常、输入类型错误、非 JSON 请求。
3. 执行结果汇总
| 测试集 | 总数 | 通过 | 失败 | 通过率 |
|---|---|---|---|---|
| 路由层 | 84 | 84 | 0 | 100% |
| 服务层 | 75 | 75 | 0 | 100% |
| 合计 | 159 | 159 | 0 | 100% |
4. 覆盖率结果
路由层覆盖率:
| 模块 | 行数(Stmts) | 未覆盖(Miss) | 行覆盖率(Cover) |
|---|---|---|---|
| backend/routes/answer_route.py | 54 | 6 | 89% |
| backend/routes/auth_route.py | 289 | 103 | 64% |
| backend/routes/diary_route.py | 85 | 19 | 78% |
| backend/routes/fortune_route.py | 28 | 2 | 93% |
| backend/routes/plaza_route.py | 70 | 7 | 90% |
| backend/routes/user_route.py | 181 | 70 | 61% |
| 汇总 | 707 | 207 | 71% |
服务层覆盖率:
| 模块 | 行数(Stmts) | 未覆盖(Miss) | 行覆盖率(Cover) |
|---|---|---|---|
| backend/services/content_generation_service.py | 106 | 10 | 91% |
| backend/services/fortune_service.py | 105 | 8 | 92% |
| backend/services/llm/providers/real_provider.py | 169 | 12 | 93% |
| backend/services/llm/providers/base.py | 12 | 0 | 100% |
| backend/services/llm/providers/mock_provider.py | 47 | 0 | 100% |
| backend/services/profile_analysis_service.py | 106 | 8 | 92% |
| backend/services/user_profile_service.py | 161 | 12 | 93% |
| backend/services/sms_service.py | 98 | 2 | 98% |
| backend/services/plaza_service.py | 90 | 9 | 90% |
| 汇总 | 894 | 61 | 93% |
压力测试
在完成服务器部署后,我们使用 Python 压力测试脚本对系统进行了压力测试。由于 Alpha 版本仅实现最小功能集,本次测试聚焦于正常使用场景下的并发承载能力,目标为定位当前系统的性能瓶颈,并为后续优化提供基线数据。
本次主要测试了以下 4 个核心业务接口:
| 接口名称 | 接口功能 | 涉及操作 |
|---|---|---|
| UserLogin | 用户登录 | 校验昵称+密码,生成 JWT Token |
| GetFortune | 获取今日运势 | 根据用户ID+当前日期查询 fortune_records 表(唯一索引 uq_user_date),返回单条运势详情 |
| GetFortuneTrend | 获取运势轨迹 | 查询用户最近7天的运势记录(fortune_records),按日期排序返回趋势数据 |
| GetPlazaCards | 获取广场卡片列表 | 游标分页查询 plaza_cards 表,按创建时间返回卡片列表(含用户信息、点赞状态) |
测试结果如下:
| 接口名称-并发数 | 平均延时 (ms) | 延时标准差 (ms) | 错误率 | 吞吐量 (req/sec) |
|---|---|---|---|---|
| UserLogin-80 | 5511.72 | 2974.94 | 5.00 | 7.87 |
| UserLogin-100 | 8289.97 | 2395.33 | 48.33 | 9.80 |
| GetFortune-200 | 2321.63 | 1190.97 | 0.00 | 43.48 |
| GetFortuneTrend-200 | 729.89 | 291.97 | 0.00 | 140.19 |
| GetPlazaCards-200 | 7580.25 | 4334.05 | 3.83 | 12.19 |
分析:从测试结果可以看出,系统在 Alpha 阶段的性能瓶颈主要集中在写操作密集型接口与复杂查询上:
- 登录接口是最大瓶颈:UserLogin 在 80 并发时平均延时已超过 5.5 秒,错误率达 5%;升至 100 并发后,延时进一步飙升至 8.3 秒,错误率激增至 48.33%,吞吐量几乎没有增长。这表明登录请求已严重阻塞,处理能力达到极限。主要原因在于密码哈希(如 scrypt/bcrypt)属于 CPU 密集型计算,在高并发下占用了全部计算资源,请求大量排队超时。这是当前系统无法承载 150 并发的主要原因。
- 简单查询表现优异:GetFortune 与 GetFortuneTrend 在 200 并发下均保持 0% 错误率,且平均延时较低(分别为 2.3 秒和 0.7 秒)。尤其是趋势接口,吞吐量达到 140 req/sec,说明数据库对索引优化良好的单表单点查询和简单范围查询支持良好,性能瓶颈不在数据库基础 I/O。
- 复杂查询存在隐患:GetPlazaCards(广场卡片列表)在 200 并发下虽错误率仅 3.83%,但平均延时高达 7.6 秒,标准差达 4.3 秒,吞吐量仅 12.19 req/sec。说明游标分页及关联查询(用户信息、点赞状态)消耗了大量数据库资源,响应时间波动剧烈,在高负载下容易成为性能短板。
- 整体性能特点:系统在纯读、简单数据模型下可承受 200 并发冲击。但一旦涉及密码校验或多表联查,服务端处理能力急剧下降,CPU 计算与数据库连接成为争用热点。根据 100 并发登录失败率接近 50% 的表现,推断系统当前稳定承载的并发上限约为 80 个请求同时发起(脉冲式)。
三、场景测试
根据[T.5]功能规格说明书中的用户分类,心运岛的目标用户可分为日常娱乐型、决策纠结型和社交互动型三类。以下是针对这三类用户的场景测试设计。
场景一:每日获取运势与情绪记录
用户画像
小雅,大二学生,平时课业压力适中,喜欢研究星座和运势相关内容。她追求轻松、治愈的娱乐体验,不愿意花费过多时间学习复杂功能,但对界面美观度有较高要求。
核心需求
- 每天快速获取有仪式感的运势内容,获得积极心理暗示
- 操作门槛低,打开即用,不想注册和登录
- 能够记录自己的心情,形成长期积累
测试路径
- 注册登录后访问心运岛首页,系统自动分配设备ID
- 进入运势看板页面,查看当日的综合运势卡片,包括爱情、事业、健康、财富四个维度的评分和宜/忌建议
- 点击今日运势卡片底部的“生成卡片”按钮,将运势结果转化为精美图片
- 点击情绪日记本,在日历视图上选择当天日期,选择心情标签(开心/平静/疲惫/焦虑/兴奋)并填写文字备注,提交保存
- 切换到历史运势记录页,查看本周各天的运势详情
测试目标
- 验证注册登录流程是否顺畅,登录后数据能否正确持久化
- 验证运势看板每日内容更新机制是否正常
- 验证运势卡片生成与保存功能是否正常工作
- 验证情绪日记的增删改查操作是否正确
- 验证用户画像匹配的情绪日记标签枚举值是否与前端选项一致
场景二:获取AI个性化建议与复盘
用户画像
阿杰,大四学生,面临求职与学业双重压力,经常陷入选择困难。他不满足于泛泛的鸡汤式回复,希望获得有启发性的、可操作的具体建议,并希望自己的提问和回答能被记录,方便日后回顾。
核心需求
- 面临具体决策时获得真诚、共情的个性化参考建议,而非玄学预言
- 提问和回答能被保存,可以随时翻看自己的思考历程
- 能够结合过往的情绪和运势记录进行自我复盘
测试路径
- 已注册用户登录心运岛,进入答案之书页面
- 在输入框中输入一个真实的决策困惑,如“我该不该接受现在这份实习offer?”
- 点击“开启”按钮,系统调用LLM生成哲思或治愈性回复(约50-150字)
- 查看回复
- 点击答案卡片底部的收藏按钮,将该条答案保存到收藏夹
- 进入“我的收藏”列表,验证收藏的答案是否正确显示且可取消收藏
测试目标
- 验证答案之书LLM生成回复的质量
- 验证内容审核API是否能拦截违规、敏感或极端文本,并在拦截后返回预设的安全文案
- 验证历史答案回溯和收藏功能是否正确存储与展示
场景三:社交互动型用户——分享与轻社交
用户画像
小琳,大三学生,社交媒体重度用户,热衷于在小红书、朋友圈展示个性内容。她喜欢高颜值、可互动、可炫耀的产品功能,但反感社交压力,希望社交能保持在轻松、匿名、无害的范围内。
核心需求
- 能够生成精美、有个性的运势卡片,方便分享到外部社交平台
- 产品内能够无需加好友即可获得点赞和评论
- 社交互动轻松无负担,有举报机制防止恶意内容
测试路径
- 已注册用户登录心运岛,进入运势看板页面,查看今日运势
- 点击分享按钮,将刚才生成的运势卡片发布到分享广场
- 切换到另一测试账号,进入分享广场,浏览用户发布的最新卡片
- 用户B点击某张卡片下方的点赞按钮,验证点赞计数是否实时更新,且同一用户对同一卡片只能点赞一次
- 用户A登录后,查看自己发布的卡片下方的点赞,验证可选择删除自己的卡片
测试目标
- 验证运势卡片生成的质量和美观度是否符合预期,Canvas/html2canvas渲染是否正常
- 验证分享广场的卡片发布、瀑布流浏览、分页加载是否正常
- 验证点赞等社交互动功能的正确性和安全性
四、测试矩阵
| 操作系统 | 浏览器 | 注册/登录 | 查看运势 | 分享运势 | 记录心情日志 | 查看多日运势 | 答案之书 | 查看过往答案 | 修改个人信息 |
|---|---|---|---|---|---|---|---|---|---|
| MacOS 15.6 | Chrome 146.0 | pass | pass | pass | pass | pass | pass | pass | pass |
| MacOS 15.6 | Sarafi 16.4 | pass | pass | pass | pass | pass | pass | pass | pass |
| MacOS 15.6 | FireFox 150.0 | pass | pass | pass | pass | pass | pass | pass | pass |
| Windows 11 | Microsoft Edge 147.0 | pass | pass | pass | pass | pass | pass | pass | pass |
| Windows 11 | Chrome 147.0 | pass | pass | pass | pass | pass | pass | pass | pass |
| Windows 11 | FireFox 150.0 | pass | pass | pass | pass | pass | pass | pass | pass |
五、出口条件
| 出口条件 | 达成情况 |
|---|---|
所有计划内的核心功能代码已合并至 main 分支,前端和后端服务可正常启动 |
✅ 已达成 |
| 后端单元测试通过率100%,覆盖认证、运势生成、答案抽取、日记CRUD等核心接口 | ✅ 已达成 |
| 核心流程端到端测试全部通过 | ✅ 已达成 |
| 无P0级和P1级Bug | ✅ 已达成 |
| 通过100并发压力测试,核心接口错误率<1%,95%响应时间<3秒 | ✅ 已达成 |
| AI生成内容及用户分享内容均经过内容审核API过滤,违规内容被拦截并替换为安全默认文案 | ✅ 已达成 |
| 隐私政策页面在应用内可访问,明示数据采集范围 | ✅ 已达成 |
| 兼容性测试覆盖macOS/Windows下的Chrome、Safari、Edge、FireFox,所有核心功能通过 | ✅ 已达成 |
| 线上环境能正常访问并完成注册、登录、运势查看、答案抽取等核心功能 | ✅ 已达成 |
| 测试过程中发现的Bug已分类归档,已知限制已写入发布说明 | ✅ 已达成 |
因此,我们认为心运岛已满足Alpha阶段发布标准,可以开放给用户试用并收集反馈。

浙公网安备 33010602011771号