Beta 阶段测试报告
测试计划
- 前端功能测试(结果见 bug 列表)
- 前端资源压测
- API 压测
- API 单元测试
- WebSocket 压测
- 评测压测
Bug 列表
Beta 阶段共测出 24 处 bug,15 处 refine。
后端
- student_task 表中若干域应允许空值
- 评测机心跳记录应在中间件实现
- swagger 应采用相对路径获取 json
- 评测机轮询后端带来的一个问题
- 没有数据时应返回 200 OK,返回数据为空数组 / 空字典等
- 查讨论帖回帖作者没有头像
- 查讨论帖返回的作者都是 root
- 测试服 swagger 代理到了生产服后端
- 讨论区 api 问题
- 通知 API 返回问题
- 课程更新 API 无法更新教程链接
学生前端
教师前端
- 删除增加确认按钮
- 课程创建/编辑时传入教程 url
- 在评测机错误时正常显示详细信息
- 评测结点心跳时间错误
- 评测令牌创建时的样式错误
- 无法正常显示结构化信息
- 考试配置中仅显示考试
- 评测节点轮询
- 编辑题目的界面需要更新
评测端
压测结果
前端资源压测
使用 apache bench 模拟 100 路并发获取前端资源,结果如下:
Server Software: openresty/1.19.9.1
Server Hostname: osome.act.buaa.edu.cn
Server Port: 80
Document Path: /dev/js/chunk-vendors.fa91a7e4.js
Document Length: 1089721 bytes
Concurrency Level: 100
Time taken for tests: 26.564 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 10899800000 bytes
HTML transferred: 10897210000 bytes
Requests per second: 376.45 [#/sec] (mean)
Time per request: 265.637 [ms] (mean)
Time per request: 2.656 [ms] (mean, across all concurrent requests)
Transfer rate: 400710.08 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.3 0 4
Processing: 21 264 64.0 251 558
Waiting: 1 251 67.2 241 543
Total: 21 264 63.9 251 558
Percentage of the requests served within a certain time (ms)
50% 251
66% 265
75% 280
80% 295
90% 344
95% 414
98% 473
99% 498
100% 558 (longest request)
API 压测
我们选取了 Beta 阶段的典型功能中的讨论区 API 进行压测,模拟 100 路并发查看讨论贴,结果如下:
Server Software: openresty/1.19.9.1
Server Hostname: osome.act.buaa.edu.cn
Server Port: 80
Document Path: /dev/api/student/discussion/query-topic?id=8
Document Length: 5849 bytes
Concurrency Level: 100
Time taken for tests: 21.606 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 59990000 bytes
HTML transferred: 58490000 bytes
Requests per second: 462.84 [#/sec] (mean)
Time per request: 216.058 [ms] (mean)
Time per request: 2.161 [ms] (mean, across all concurrent requests)
Transfer rate: 2711.49 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.4 0 6
Processing: 6 215 174.3 190 884
Waiting: 5 215 174.3 190 884
Total: 6 215 174.3 190 884
Percentage of the requests served within a certain time (ms)
50% 190
66% 310
75% 355
80% 382
90% 451
95% 515
98% 584
99% 636
100% 884 (longest request)
WebSocket 压测
使用 Python 模拟用户登录并建立用于接收通知的 WebSocket 连接
- 测试 2000 个用户登录并建立 WebSocket 连接,学生端可正常接收通知,教师端可正常发送通知
- 增加至 15000 个用户登录并建立 WebSocket 连接,学生端依旧正常接收通知,教师端发送通知出现卡顿
评测压测
- 评测压测涉及多道题目,共计处理 6745 个评测请求。
- 评测自 6 月 17 日 14:03:56 开始,至 6 月 17 日 18:02:15 结束,共评测 6745 个评测请求,其中:
- 6711 个请求正常评测;
- 34 个请求出现评测机错误:
- 评测请求本身不合法,因此评测机给出“错误”反馈
- docker 的 DNS bug 导致评测机评测流程出现异常
- 在物理服务器上一共开启了 4 个评测结点。
- 在不启用临时扩容机制时,平均每分钟可评测 28 个评测请求,560 余个测试点。
后端 API 单元测试情况
在期末压力下,后端仅对新增的 API 中较重要的一部分进行了单元测试,最终后端代码覆盖率达到 54.5%。涉及单元测试如下述所示:
var stages = [][]func(*testing.T){
{rootLogin, staff1Login, staff2Login, studentLogin, illegalLogin},
{tokenExpirationAfterLogout, tokenExpirationAfterResetPassword},
{rootCreateAccount, staffCreateAccount, illegalCreateAccount},
{rootUpdateAccount, staffUpdateAccount, illegalUpdateAccount},
{rootResetAccountPassword, staffResetAccountPassword, illegalResetAccountPassword, illegalSetPermission},
{rootQueryAllAccounts, staffQueryAllAccounts, illegalQueryAllAccounts},
{getAllTeachers},
{rootGetAccountPermissions, staffGetAccountPermissions, illegalGetAccountPermissions},
{rootGetAccountCourses, staffGetAccountCourses, illegalGetAccountCourses},
{getAllAnnouncements},
{rootCreateAnnouncement, staffCreateAnnouncement, illegalCreateAnnouncement},
{rootUpdateAnnouncement, staffUpdateAnnouncement, illegalUpdateAnnouncement},
{rootDeleteAnnouncement, staffDeleteAnnouncement, illegalDeleteAnnouncement},
{rootGetAllCourses, staffGetAllCourses, illegalGetAllCourses},
{rootCreateCourse, staffCreateCourse, illegalCreateCourse},
{rootUpdateCourse, staffUpdateCourse, illegalUpdateCourse},
{rootQueryAllJudgeResults, staffQueryAllJudgeResults, illegalQueryAllJudgeResults},
{selfJudgeResult},
{rootGetJudgeResultDetail, staffGetJudgeResultDetail, illegalGetJudgeResultDetail},
{rootGetAllLabs, staffGetAllLabs, illegalGetAllLabs},
{rootCreateLab, staffCreateLab, illegalCreateLab},
{rootUpdateLab, staffUpdateLab, illegalUpdateLab},
{rootDeleteLab, staffDeleteLab, illegalDeleteLab},
{rootChangeLabsOrder, staffChangeLabsOrder, illegalChangeLabsOrder},
{discussionTest},
{notificationTest},
{rootCreateProblem, staffCreateProblem, illegalCreateProblem},
{rootUpdateProblem, staffUpdateProblem, illegalUpdateProblem},
}
共有 76 个测试用例,测试用例的代码行达到 2267 行。
场景测试
教师工作
典型场景 | 教师工作日常 |
---|---|
用户 | 黄锐 |
知识层次与能力 | 教授 |
生活情况 | 给同学们上课、答疑,做科研 |
动机、目的、困难 | 管理教学班级、关注同学们的学习情况,无奈学生太多 |
用户偏好 | 班级管理简便,教学与考试情况一目了然;又可深度分析具体学生的学习状况 |
场景描述 | 添加、管理班级学生、助教,查看学生课下测试情况,查看学生具体提交情况 |
典型场景 | 教师工作日常 |
---|---|
用户 | 吴天域 |
知识层次与能力 | 副教授 |
生活情况 | 研究分布式系统,兼顾 OS 课程教学 |
动机、目的、困难 | 查看本班同学们的课下完成情况、导入学生名单 |
用户偏好 | 更喜欢 GUI 界面,不喜欢操作数据库 |
场景描述 | 在前端可以查看学生完成情况,在课程开始前使用 CSV 导入学生信息 |
助教工作
典型场景 | 助教工作日常 |
---|---|
用户 | 葡萄味 |
知识层次与能力 | 计算机专业本科 |
生活情况 | 睡大觉 |
动机、目的、困难 | 睡大觉、睡大觉、干活影响睡大觉 |
用户偏好 | 喜欢好的教程,喜欢快的访问速度,喜欢看小朋友发讨论贴 |
场景描述 | 查看并编辑教程,浏览讨论贴,校对排版 |
典型场景 | 助教工作日常 |
---|---|
用户 | 夜捉人 |
知识层次与能力 | 计算机专业本科 |
生活情况 | 关在学校里,每天吃吃喝喝睡大觉,给同学答疑 |
动机、目的、困难 | 查看题目、配置题目、查看评测记录、维护评测机 |
用户偏好 | 懒得用 SQL 查数据库、喜欢好看的界面、喜欢观察学生输出找 bug、时刻盯着评测机状态 |
场景描述 | 查看题目、验题、查验评测信息、查看评测结点的“心跳” |
学生工作
典型场景 | 学生情况 |
---|---|
用户 | 青文王 |
知识层次和能力 | 计算机专业本科 |
生活情况 | 被困学校,每天被 OO 和 OS 夹击 |
动机、目的、困难 | 阅读题目、查看评测记录、提交代码 |
用户偏好 | 喜欢直观的 UI 界面,喜欢看以前的提交记录来帮助 debug,参与讨论 |
场景描述 | 阅读题目、查看评测记录、提交代码、发讨论区帖子与回复他人的主题 |
恶意攻击
典型场景 | 恶意攻击系统 |
---|---|
用户 | 辰囸添 |
知识层次和能力 | 计算机专业本科 |
生活情况 | 在家睡大觉、摸大鱼 |
动机、目的、困难 | 看看能不能黑进管理员账户,或者把系统 D 瘫痪,但 hardconnect 不让我伪造 TCP 数据报 |
用户偏好 | 喜欢弱密码、喜欢私钥泄露、喜欢 SQL 直接拼接、喜欢 HTML 代码不过滤、喜欢用世界上最好的语言写的项目 |
场景描述 | nessus 服务器、sqlmap 各个 API、用弱口令字典破密码、在可控输入的位置 XSS 等 |
测试矩阵
平台信息 | 浏览器版本 | Alpha 版本功能 | 重测 | 讨论区使用 | 讨论区管理 | 讨论区通知 | 考试通知 | 考试控制 | 统计信息 | 评测节点 | 权限模板 | 教程 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Windows NT 10.0; Win64; x64 | Chrome/80.0.3987.163 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Windows NT 10.0; Win64; x64 | Chrome/100.0.4896.127 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Windows NT 10.0; Win64; x64 | Chrome/101.0.4951.54 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Windows NT 10.0; Win64; x64 | Edg/101.0.1210.39 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Windows NT 10.0; Win64; x64; rv:100.0 | Firefox/100.0 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Windows NT 10.0; Win64; x64; rv:100.0 | Safari/537.36 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Macintosh; Intel Mac OS X 10_15_6 | Safari/605.1.15 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Macintosh; Intel Mac OS X 10_15_6 | Chrome/101.0.4951.44 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
X11; Linux x86_64 | Chrome/101.0.4951.54 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
X11; Linux x86_64 | Chrome/101.0.4951.64 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
出口条件
功能条件
完成原定的 Beta 阶段预计的讨论区、教程、考试管理等功能。
测试条件
编写并通过全部单元测试,尽可能提高测试覆盖率。
进行简单的后端压力测试、评测机压力测试。压测情况下系统稳定不崩溃。
数据条件
导入 2022 春季学期计算机学院操作系统课程学生历次上机的成绩。