Loading

Beta 阶段测试报告

测试计划

  • 前端功能测试(结果见 bug 列表)
  • 前端资源压测
  • API 压测
  • API 单元测试
  • WebSocket 压测
  • 评测压测

Bug 列表

Beta 阶段共测出 24 处 bug,15 处 refine。

后端

学生前端

教师前端

评测端

压测结果

前端资源压测

使用 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 春季学期计算机学院操作系统课程学生历次上机的成绩。

posted @ 2022-06-18 11:13  大本钟下你和我  阅读(119)  评论(0编辑  收藏  举报