[T.10] 团队项目:Alpha 阶段测试报告
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 2025年春季软件工程(罗杰、任健) |
| 这个作业的要求在哪里 | [T.10] 团队项目:Alpha 阶段测试报告 |
| 我在这个课程的目标是 | 通过实际开发体验软件工程流程 |
| 这个作业在哪个具体方面帮助我实现目标 | 通过实际开发体会实践与理论的区别 |
测试中出现的bug
前端部分
| bug描述 | 修复方式 | 负责人 | Issues链接 | 修复结果 |
| 博雅页面页数选择后显示错误,变成了字符串拼接方式 | 对于弱类型语言,进行强制类型转换使得运算逻辑正确 | 袁耀武 | 已修复 | |
| 在消息列表中删除消息失败 | 在发送请求前,检查消息id是否正确 | 张珺强 | 已修复 |
后端部分
| bug描述 | 修复方式 | 负责人 | Issues链接 | 修复结果 |
|---|---|---|---|---|
| 管理员端提供的数据无法满足分页所需 | 添加接口以满足web端分页所需数据 | 高子贺 | 已修复 | |
| 在进行北航身份验证接收邮箱验证码时,如果用户点击频率过高,会出现导致发送频率和数量检查失效,同时发送多封邮箱,并且最新收到邮件的验证码不正确 | 使用Redission分布式锁,对同一个用户加锁 | 饶晨烜 | https://github.com/XuanxuanRao/joinup-server/issues/8 | 已修复 |
| 在修改用户信息时,如果没有填写sso密码,那么修改后原来设置的sso密码会被置为空 | 数据库update操作时不仅要检查null,还要判断字符串不为空 | 饶晨烜 | https://github.com/XuanxuanRao/joinup-server/issues/9 | 已修复 |
| 用户头像存储在了微信服务器,无法加载其他用户头像 | 基于OSS搭建文件存储服务,将文件由服务器管理 | 饶晨烜 | 已修复 | |
| 获取加入队伍申请接口只返回了申请用户id,缺少姓名、头像等信息,前端展示效果差 | 调整接口,调用用户服务获取申请者信息 | 饶晨烜 | 已修复 | |
| 在预约课程时,如果预约的课程已经开始选课,未直接进行选课操作 | 增加时间判定逻辑,如果当前时间超过开始选课时间,则直接进行选课操作 | 安琦 | 已修复 | |
| 在北航博雅平台进行选课操作后,小程序显示结果与实际结果不符 | 当用户调用查看自己已选课程的接口时,将数据库数据与北航远程服务器进行同步 | 安琦 | 已修复 |
测试方法
单元测试
测试范围:
- 组件渲染逻辑
- 状态管理
- 工具函数和公共方法
- 自定义hooks
- 组件间交互
- 页面跳转逻辑
测试策略
- 使用mock模拟后端,完成api交互
- 模仿用户体验界面,验证完整的操作链路,完成基本的功能测试
- 要求组件测试覆盖率高于70%,关键路径覆盖率高于90%
测试工具与环境
- 构建工具:HBuilder+Uniapp+微信开发者工具
- 环境隔离:使用了Mock对象和环境变量隔离测试环境,避免对外部服务或数据库的依赖。
后端部分
后端采用微服务架构进行设计,由Spring部分和Django部分组成。
Django部分只涉及到了博雅选课模块,结构较为简单,因此在这一部分我们利用Django自带的测试框架,通过模拟用户的交互过程,以手动构造数据点的方式对每个视图类内部的方法进行了测试。
下面将重点介绍后端主体部分的单元测试流程:
测试范围
-
所有业务逻辑方法(Service 层)
-
对外接口转换与校验(Controller 层)
-
公共工具类、DTO/VO 转换与校验逻辑
测试策略
-
模拟隔离
-
使用 Mockito 完全模拟外部依赖
-
对数据库层测试可选用 H2 内存库,但必须在隔离模式下执行
-
-
场景覆盖
-
正常场景:关键流程、常见数据输入
-
边界场景:空集合、最大/最小值、字符串长度极限
-
异常场景:模拟依赖抛出异常、参数校验不通过
-
-
断言规范
-
使用 AssertJ 进行链式断言,保证可读性
-
校验返回值、状态码、异常类型与消息均符合预期
-
对关键交互调用使用
verify(...)检验调用次数及参数
-
测试工具与环境
-
测试框架:JUnit 5
-
模拟框架:Mockito
-
Spring 支持:spring-boot-test
-
断言库:AssertJ
-
覆盖率工具:JaCoCo(目标 ≥ 80%)
-
构建工具:Maven
-
CI 平台:GitHub Actions
场景测试
预期用户
| 用户类型 | 使用场景 | 目标 |
|---|---|---|
| 竞赛组队学生(如计算机学院小A) | 参加冯如杯等竞赛,需要快速找到队友 | 高效完成团队组建 |
| 兴趣社交学生(如大一羽毛球爱好者小C) | 寻找运动/兴趣伙伴 | 建立校园社交圈 |
| 选课辅助学生(如大三小E) | 抢博雅课程 | 提高选课成功率 |
测试场景一:竞赛组队学生 - 冯如杯参赛者李明
李明是计算机学院大二学生,他计划参加冯如杯科技竞赛但缺少队友。他打开了"搭伙儿"微信小程序,点击”发起新的组队“按钮,分别填写了队伍名称:”冯如杯组队“,队伍介绍:"需要2-3名有嵌入式开发经验的队友",队伍主题:”竞赛“和队伍标签:”冯如杯“,最后点击”确认创建按钮“。同时,为了更好的进行组队,李明在个人信息界面设置了自己的技能,即嵌入式开发。
发布后,李明可以在队伍界面查看所有的加入申请。一段时间后,李明选择联系其中一位自动化学院的同学,确认了合作意向,并在队伍界面内同意了对方的申请。最后,李明可以在个人中心的"我创建的队伍"页面看到新组建的团队信息
测试场景二:兴趣社交 - 羽毛球爱好者陈晨
陈晨是大一新生,想找球友每周三下午打球。他在"生活"板块进行浏览,发现已有3个标签为羽毛球的组队。其中一个组的描述"新手友好,器材提供"吸引了他。
陈晨进入队伍详情界面,点击"立即加入"提交了加入申请。10分钟后他在消息中心的组队消息界面收到了申请通过的消息,并点击了已读。此时陈晨可以在个人中心的”我加入的队伍“页面看到新加入的团队信息。
测试场景三:博雅抢课 - 手速慢的刘同学
刘同学点击博雅选课界面,查看当前所有的博雅课程,并点击选择了”法律文化节开幕式暨法治文化主题讲座“课程,点击预约了”智能革命与人类未来“课程。然后他可以在已选课程和预约记录界面查看自己已选和已预约的课程,并执行退课和取消预约操作。”智能革命与人类未来“这门课开放选课后,他可以在消息中心的博雅模块查看抢课结果。
压力测试
在系统设计时,我们基于Sentinel对部分耗接口和敏感接口做了限流达到服务保护目的,如下图所示:

具体测试方面,我们使用Jmeter对用户登录和发送验证码邮件这两个接口进行压力测试,参数设置如下:
- Number of Threads (users): 100
- Ramp-up Period (seconds): 1
测试具体结果为:

通过分析下图所示的系统负载,可以看到在系统并发量时,服务器的CPU利用率和内存使用量都出现了一定的升高,但此时系统的负载仍在可以承担范围内,在压力测试下表现优秀。

同时,针对课程爬虫部分,我们做了多实例部署,两个实例作为消费者,提高消息消费速度,防止消息挤压。消息队列设置如下:

测试矩阵
| 操作系统 | 浏览器 | 登录 | 创建队伍,修改队伍信息,删除队伍 | 查看所有队伍及其信息 | 查看自己创建和加入的队伍 | 申请加入队伍 | 同意或拒绝申请 | 查看消息 | 查看课表 | 预约或直接进行课程签到 | 修改头像等个人信息 | 设置个人兴趣 | 查看所有博雅课程 | 查看个人选课和预约信息 | 选课,退课,预约课程 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Windows11 | Google Chrome 135.0.7049.115(arm64) | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
| Windows11 | Microsoft Edge 136.0.3240.50(arm64) | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
| MAC | Google Chrome 135.0.7049.115(arm64) | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
| MAC | Microsoft Edge 136.0.3240.50(arm64) | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
| MAC | Firefox 137.0.2 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
| MAC | Safari 18.4 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
出口条件
功能条件
- 微信注册和登录:能通过微信认证用户身份。
- 北航邮箱验证:能向用户的北航邮箱发送验证码,并通过验证码进行身份验证。
- 组队模块:能发起组队,查看可选队伍,发起加入他人队伍申请,同意或拒绝他人申请。
- 消息模块:能查看未处理的组队申请,查看博雅选课结果和加入队伍的申请结果。
- 个人中心模块:能设置个人兴趣,修改用户名,头像等个人信息。
- 课程模块:能获取课程表,进行课程签到和预约。
- 博雅模块:能获取当前博雅课程,进行选课和预约操作,能查看已选课程和预约课程。
测试条件
- 通过所有单元测试,测试覆盖率满足要求。
- 前端请求的响应时间在可接受范围内。
- 后端能在高负载环境下稳定运行。
- 在长期的运行测试中,软件的前后端,服务器,数据库的功能正常,未出现崩溃和数据丢失问题。

浙公网安备 33010602011771号