[T.16] 团队项目:Beta 阶段测试报告

这个作业属于哪个课程 北航2026年春季软件工程
这个作业的要求在哪里 团队项目:测试报告
我在这个课程的目标是 完成软件开发,感受软件工程流程
这个作业在哪个具体方面帮助我实现目标 系统地完成软件测试并量化质量

一、测试计划

1.1 测试目标

依据规格说明书,对后端每个模块的正常路径、边界条件、异常与权限分支进行验证,做到可在任意机器与 CI 中稳定复现,并量化代码覆盖率,为 Beta 发布提供质量依据。

1.2 测试范围

覆盖后端四层全部模块:

  • 核心层:配置(config)、安全(JWT/bcrypt,security)、依赖与鉴权(dependencies);
  • 服务层:用户、POI、Token 黑名单、学期信息、课表解析、AI 学习计划、预习、体育配置、知识库、教务系统对接;
  • 数据层:ORM 模型、Pydantic Schema 校验;
  • 接口层:认证、用户、日程、POI、预习、空教室、教务导入、学习计划、AI 对话等路由。

异步用例统一 asyncio_mode = auto,接口测试使用 httpx.AsyncClient + ASGITransport 进程内调用。

1.3 测试规模

26 个测试文件,165 个测试用例,覆盖核心层、服务层、数据层、接口层全部模块。

二、测试过程

2.1 运行方式

cd backend
export JWT_SECRET_KEY="test-secret-key-for-testing-only-32chars"
pip install pytest pytest-asyncio pytest-cov httpx
pytest tests/ --cov=app --cov-report=term-missing -q

三、测试结果

指标 数值
用例总数 165
通过 (passed) 163
预期失败 (xfailed) 2(对应已定位 Bug)
失败 (failed) 0
代码覆盖率 94%(1356 行语句,未覆盖 82 行)
耗时 约 27s

分模块覆盖率(节选): 核心安全/配置、ORM 模型、全部 Schema、user_servicepoi_serviceknowledge_servicetoken_blacklistsports/study/user/preview API 等达 100%study_plan_service 93%、semester_service 92%、timetable_parser 86%、edu_system 80%、preview 82%。未覆盖主要集中在外部依赖(教务、AI)的异常分支与 dependencies.py(68%) 的部分鉴权回退路径。

四、问题回答

4.1 在测试过程中发现了多少 Bug?

测试共发现 3 个问题(1 个功能性 Bug + 2 个安全/配置隐患):

# 问题 严重级 修复状态
1 app/api/sports.pySportsVenueResponse(name=..., **venue.model_dump())model_dump() 已含 name,关键字重复 → 调用 /sports//sports/{venue_name}TypeError(HTTP 500),场馆列表/详情接口不可用 高(功能 500) 【待确认】改为 SportsVenueResponse(**venue.model_dump())
2 app/services/preview.py:硬编码真实形态的 MiniMax API Key 高(安全) 【待确认】改为环境变量读取并轮换密钥
3 main.py:CORS allow_origins=["*"] 过宽 中(配置) 【待确认】上线前收敛允许来源

4.2 你是怎么进行场景测试的?

围绕"不同用户如何使用本系统"设计端到端场景,验证功能组合是否满足真实需求。

用户画像与需求:

用户 目标 / 需求 用到的功能组合
新生 注册账号、首次配置课表 注册(8 位数字邮箱前缀自动提取学号)→ 登录拿 Token → 教务系统导入课表 → 冲突处理
在校生(日常) 管理日程,避免时段冲突 登录 → 日程增删改查 → 时段冲突校验
备考学生 生成 AI 学习计划并落地 登录 → 输入目标/周期/已占用时段 → 生成计划存 Redis → 确认导入日程
找场地/空教室的学生 查场馆、空教室、校内地点 体育场馆列表/详情 → 空教室入口 → POI 按分类/关键词/距离查询
预习/资料用户 获取预习资料、管理知识库 预习助手(本地→联网→兜底)→ 知识库上传/列表/删除(按用户隔离 + 权限校验)

这些场景如何被测试覆盖:

  • 认证全链路:注册 → 登录 → 访问受保护接口 → 登出(Token 入 Redis 黑名单)→ 刷新 Token;验证黑名单后旧 Token 失效、用户不存在/Token 失效均返回 401。
  • 权限组合:POI 查询公开,增改删需管理员——分别用普通客户端与管理员客户端验证 403/200 分流。
  • 日程冲突:插入重叠时段校验冲突逻辑,验证课表批量初始化。
  • AI 学习计划两步式:生成(存 Redis)与确认(导入日程)分开测;并测无 Key / 调用失败时回退本地兜底计划。
  • 预习三级回退:本地命中 → 联网生成 → 占位兜底,分别验证返回的 source 为 local/online/none。
  • 教务导入:mock CAS 登录与课表下载,验证 Excel 解析(真实生成 xlsx 解析)与导入冲突处理。

每个场景都覆盖"正常 + 边界 + 失败回退"三类路径,确保功能组合在依赖不可用时仍有合理降级。

4.3 测试矩阵

维度 取值
被测层 FastAPI 后端(API + 服务 + 数据层)
操作系统 Linux(Ubuntu 系容器)
数据库 SQLite 内存库(替代 MySQL)
缓存 FakeRedis(替代 Redis 7)
外部服务 教务 CAS、MiniMax —— httpx 打桩
测试类型 单元 + 接口集成(进程内 ASGI)

前端(微信小程序)建议矩阵

维度 建议取值
小程序端 微信开发者工具模拟器 + 真机:iOS、Android、鸿蒙
微信版本 当前稳定版 + 上一版本(验证基础库兼容)
屏幕/分辨率 小屏(如 iPhone SE)、大屏(主流安卓/iPhone Pro Max)
网络 正常 / 弱网 / 离线(验证降级与兜底)

4.4 Beta 版本的出口条件

满足以下条件即认定软件足够好、可发布 Beta:

  1. 核心场景可用:注册登录、教务导入课表、日程增删改查与冲突校验、AI 学习计划生成并回填、地图/场馆/空教室/POI 查询等典型场景端到端跑通,无阻断性故障。
  2. 无未关闭的高/严重级 Bug:所有 P0/P1 Bug(如 sports 接口 500、硬编码密钥)均已在 Issue 记录并修复关闭。
  3. 测试全绿:后端代码覆盖率 ≥ 90%(当前 94%),Ruff 与 mypy 检查通过。
  4. 真机验证通过:微信小程序在至少 iOS + Android 各一款主流机型上完成冒烟测试与核心流程真机调试,关键页面无崩溃/错位。
  5. 发布前置就绪:域名/服务器备案完成、后端在服务器稳定运行、小程序通过微信审核。

五、结论

后端测试通过率 100%(163 passed / 2 xfailed / 0 failed),覆盖率 94%,并定位出 1 个功能性 Bug 与 2 个安全/配置隐患。

posted @ 2026-06-16 10:58  练习日寸长两年半  阅读(6)  评论(0)    收藏  举报