Compilify Beta阶段测试报告
本文为Compilify编译课程平台Alpha阶段测试报告。
Bug列表
后端
bug现象 | bug原因 |
---|---|
作业顺序不齐 | 没有返回的保证作业顺序 |
管理员无法查看小测正确答案 | 后端没有设置 |
管理员无法查看用户教师 | 后端没有返回 |
无法添加新用户 | 数据库里添加了教师的外键约束,后删除教师实体、约束后解决 |
前端
bug现象 | bug原因 |
---|---|
错误地修改用户信息后前端没有报错 | 前端直接刷新而非再次获取数据 |
下载图片和txt资源直接显示 | 前端获得url直接下载 |
添加用户部分user_name为空提示user_name过长 | rules的逻辑错误 |
带有分页的表格在分页大小处点击ALL后无法获取到所有信息 | ALL在该组件中代表0,所以发送给后端时认为传输了无效的值,于是被替换为默认值 |
管理员部分按钮被公告等内容挡住 | 组件的层次问题 |
md编辑器的语法提示弹窗会出现在编辑器下层 | 组件的层次问题 |
在日期选择的弹窗中,不可以通过点击最上方的年份数字对年份进行更改 | 该组件自身存在bug |
未读通知数量在更换课程时无法实时更新 | 没有刷新 |
提交评测的页面标题有误 | 复制粘贴后忘了改 |
进入讨论详情页控制台会有minio报错 | 头像被赋了初始值导致解析出错 |
指导书未渲染部分图片和行内公式 | |
通知管理的表格有时不刷新 | 缺少await |
修改密码时确认密码和新密码可以不一样 | 没有判断 |
修改密码输入错误的旧密码可能引发token无限刷新 |
评测端
bug现象 | bug原因 |
---|---|
多个评测机时会出错 | 没有给获取任务加锁,导致获取了错误的评测 |
前端测试
前端功能测试
前端功能测试采用手动点击前端页面方式进行测试,测试结果见前端 bug 列表
前端压力测试
使用 apache bench 模拟 200 路并发获取前端较大资源,结果如下:Benchmarking 10.212.30.38 (be patient)
Benchmarking 10.212.30.38 (be patient)
Server Software:
Server Hostname: 10.212.30.38
Server Port: 9201
Document Path: /assets/index-3a4db1b6.css
Document Length: 203617 bytes
Concurrency Level: 200
Time taken for tests: 6.521 seconds
Complete requests: 200
Failed requests: 0
Total transferred: 40775000 bytes
HTML transferred: 40723400 bytes
Requests per second: 30.67 [#/sec] (mean)
Time per request: 6520.841 [ms] (mean)
//用户平均请求等待时间
Time per request: 32.604 [ms] (mean, across all concurrent requests)
//服务器平均处理时间,
Transfer rate: 6106.47 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 6 18 1.4 18 20
Processing: 1032 5269 1091.3 5697 6487
Waiting: 9 563 537.8 576 2717
Total: 1049 5287 1092.0 5714 6504
Percentage of the requests served within a certain time (ms)
50% 5714
66% 5967
75% 6176
80% 6217
90% 6392
95% 6447
98% 6474
99% 6503
100% 6504 (longest request)
根据测试报告可以看出,前端访问资源的瓶颈在于带宽速度,服务处理的时间很短
前端压测的url有
http://10.212.30.38:9201/assets/index-2b6ab67a.js
http://10.212.30.38:9201/assets/Home-8fb1e6d5.js
http://10.212.30.38:9201/assets/menu-62e33bbf.js
http://10.212.30.38:9201/assets/api-121a8453.js
http://10.212.30.38:9201/assets/index-3a4db1b6.css
http://10.212.30.38:9201/assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ-4a4dbc62.woff2#
后端测试
后端API单元测试
完成了主要功能、访问需求量大的API的单元测试。覆盖率无法进一步提升是由于对数据库异常进行了一定的检测,部分无法覆盖。部分API由于测试条件较复杂编写难度较大,需要进一步完善。
- 用户单元测试,行覆盖率83.7%
- 对于
AdminAddUser
API,进行了功能测试400、401、403、500的错误处理测试 - 对于
AdminDeleteUser
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AdminResetUserPassword
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AdminChangeUserInfo
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
ChangePassword
API,进行了功能测试400、401的错误处理测试 - 对于
ChangeEmail
API,进行了功能测试400、401的错误处理测试 - 对于
ChangeCourse
API,进行了功能测试400、401、403的错误处理测试 - 对于
Login
API,进行了功能测试400、401、404的错误处理测试 - 对于
Logout
API,进行了功能测试401的错误处理测试 - 对于
ChangePhoto
API,进行了功能测试400、401的错误处理测试 - 对于
GetUserInfo
API,进行了功能测试401的错误处理测试 - 对于
AdminGetAllUser
API,进行了功能测试400、401、403的错误处理测试
- 对于
- 课程管理单元测试,行覆盖率92.5%
- 对于
AdminAddCourse
API,进行了功能测试400、401、403、409的错误处理测试 - 对于
tAdminAddCourseUser
API,进行了功能测试400、401、403、500的错误处理测试 - 对于
AdminDeleteCourseUser
API,进行了功能测试400、401、403、409的错误处理测试 - 对于
AdminChangeCourseInfo
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AdminDeleteCourse
API,进行了功能测试400、401、403、404的错误处理测试
- 对于
- 作业管理单元测试,行覆盖率77.5%
- 对于
AdminCreateContent
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AdminUpdateContent
API,进行了功能测试400、401、403的错误处理测试 - 对于
AdminDelContent
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AdminCreateQuiz
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AdminUpdateQuiz
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AdminDelQuiz
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
PostQuiz
API,进行了功能测试401、404、409的错误处理测试 - 对于
ExtendedTime
API,进行了功能测试400、401、403、404的错误处理测试
- 对于
- 讨论区单元测试,行覆盖率85.2%
- 对于
AddPost
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
ChangePostInfo
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
FollowLikePost
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
StarPinPost
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
DeletePost
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
GetAllPost
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
GetPostInfo
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AddReply
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
ChangeReplyInfo
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
LikeReply
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AdminVerifyReply
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
DeleteReply
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AdminAddTag
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AdminChangeTagInfo
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AdminDeleteTag
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AdminGetAllTag
API,进行了功能测试400、401、403、404的错误处理测试
- 对于
- 通知管理单元测试,行覆盖率70.2%
- 行覆盖率相较于别的较低是因为通知管理里面有websocket,ws没有测试
- 对于
AdminCreateNotice
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AdminPublishNotice
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AdminUpdateNotice
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
AdminDelNotice
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
UserReadNotice
API,进行了功能测试400、401、403、404的错误处理测试 - 对于
UserGetAllNotice
API,进行了功能测试400、401、403的错误处理测试 - 对于
AdminGetAllNotice
API,进行了功能测试400、401、403的错误处理测试 - 对于
UserGetAllNoReadNotice
API,进行了功能测试400、401、403的错误处理测试
后端API压力测试
使用 apache bench对涉及信息量最多的评测记录API(获取所有用户信息)进行测试,结果如下
全部
Server Software:
Server Hostname: 10.212.30.38
Server Port: 9200
Document Path: /user/get_all_user?page_size=2000
Document Length: 245067 bytes
Concurrency Level: 100
Time taken for tests: 4.077 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 24522200 bytes
HTML transferred: 24506700 bytes
Requests per second: 24.53 [#/sec] (mean)
Time per request: 4076.778 [ms] (mean)
Time per request: 40.768 [ms] (mean, across all concurrent requests)
Transfer rate: 5874.11 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 6 12 1.9 11 17
Processing: 68 2952 1035.0 3288 4025
Waiting: 31 612 221.6 611 1483
Total: 74 2964 1035.2 3298 4037
Percentage of the requests served within a certain time (ms)
50% 3298
66% 3649
75% 3818
80% 3849
90% 3949
95% 3994
98% 4003
99% 4037
100% 4037 (longest request)
单页 页面大小为10
Server Software:
Server Hostname: 0.0.0.0
Server Port: 9200
Document Path: /user/get_all_user?page_size=50
Document Length: 6173 bytes
Concurrency Level: 100
Time taken for tests: 0.328 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 632800 bytes
HTML transferred: 617300 bytes
Requests per second: 305.18 [#/sec] (mean)
Time per request: 327.677 [ms] (mean)
Time per request: 3.277 [ms] (mean, across all concurrent requests)
Transfer rate: 1885.91 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 4 0.8 4 4
Processing: 45 162 25.0 159 280
Waiting: 43 161 25.1 159 280
Total: 45 165 25.2 163 284
Percentage of the requests served within a certain time (ms)
50% 163
66% 179
75% 180
80% 181
90% 190
95% 190
98% 200
99% 284
100% 284 (longest request)
对于全部数据发现服务器平均处理时间为40.768ms,对单页数据的处理时间为3.277ms,能够保证助教和教师的查看
使用asyncio 和 aiohttp对后端使用次数多的API进行并发访问访问,其中登录2000路并发,管理员获取用户所有信息和用户查看历史提交200路并发
test_url: /user/get_all_user, number: 200, cost_time: 0.4110887050628662s
test_url: /user/get_all_user, number: 200, cost_time: 1.0943667888641357s
test_url: /user/get_all_user, number: 200, cost_time: 0.13801002502441406s
test_url: /user/get_all_user, number: 200, cost_time: 0.15606403350830078s
test_url: /user/get_all_user, number: 200, cost_time: 0.3288722038269043s
test_url: /user/login, number: 2000, cost_time: 3.7957608699798584s
test_url: /user/login, number: 2000, cost_time: 3.6607179641723633s
test_url: /user/login, number: 2000, cost_time: 3.694988965988159s
test_url: /user/login, number: 2000, cost_time: 3.7916181087493896s
test_url: /user/login, number: 2000, cost_time: 3.504262924194336s
test_url: /judge/history, number: 200, cost_time: 1.3025119304656982s
test_url: /judge/history, number: 200, cost_time: 1.1705520153045654s
test_url: /judge/history, number: 200, cost_time: 1.320146083831787s
test_url: /judge/history, number: 200, cost_time: 1.6104991436004639s
test_url: /judge/history, number: 200, cost_time: 1.5889379978179932s
时间如上所示,能够满足多位用户同时登录、访问资源的需求
评测端压力测试
评测机扩容测试
- 测试题目是一般的代码生成题目,共包含3个中等的测试点,mars中的代码指令条数在65535条以下,源代码形式为java共100次提交
- 5个评测节点耗时118.767s,平均每分钟评测50.5道题目(三个服务端节点两个虚拟机节点)
- 4个评测节点耗时136.178s,平均每分钟评测44.0道题目(两个服务端节点两个虚拟机节点)
- 3个评测节点耗时184.171s,平均每分钟评测32.6道题目(一个服务端节点两个虚拟机节点)
- 2个评测节点耗时275.074s,平均每分钟评测21.8道题目(一个服务端节点一个虚拟机节点)
- 1个评测节点耗时425.055s,平均每分钟评测14.1道题目(一个服务端节点)
3个以下的评测节点已经能够满足评测量不大时的评测要求,另外每分钟评测数量和评测节点数量基本上(考虑道不同机器的性能差异以及服务器增加节点导致平均性能下降)呈线性关系,在考试或者ddl等大规模提交作业的情况下可以通过扩容评测机来提升评测效果
压力测试
进行压力测试时共在服务端开启四个评测节点,共评测1000道题目,11500个测试点,包含源代码为java、cpp,目标代码为llvm、mips,题目类型为词法、语法分析、代码生成等各种类型的题目,共耗时39.8分钟
场景测试
用户信息 | 用户情况 |
---|---|
姓名 | 刘狗 |
用户身份 | 计算机学院大三学生 |
用户情况 | 学习编译知识或者预习编译比赛 |
用户痛点 | 1. 原版编译平台UI设计不合理 2. 无法查看指导书 3. 想要查看自己的历史测评信息 4.下载资源页面难以找到 |
软件对应功能 | 即时通知、讨论区、指导书、作业题面、作业小测、课程资料下载、提交评测、查看评测详情和竞速结果、个人中心 |
预期使用场景实现该用户需求的功能 | 1. UI设计简洁,美观,查看作业更加便捷 2. 可以在平台上查看指导书 3. 可以轻松查看历史测评信息,并添加自己的备注 4. 下载课程资源更便捷 |
用户信息 | 用户情况 |
---|---|
姓名 | 王跌 |
用户身份 | 计算机学院学生 |
用户情况 | 编译课程平台助教 |
用户痛点 | 原版平台操作不舒服,缺乏便捷操作 |
软件对应功能 | 1. 查看用户列表,查看课程、班级信息,查看评测列表和评测详情 2. 发布、修改作业及小测,管理、发布通知 3. 以图表的形式查看分数分布、编译器语言及目标语言占比 |
预期使用场景实现该用户需求的功能 | 1. 对用户管理更便捷,支持批量修改 2. UI简洁美观,对作业管理支持好 3. 可视化查看学生成绩 |
用户信息 | 用户情况 |
---|---|
姓名 | rjd0 |
用户身份 | 计算机学院教授 |
用户情况 | 编译课程讲师 |
用户痛点 | 原版平台设计不好,llvm版本过低 |
软件对应功能 | 1. 发布通知和作业 2. 通过清晰的表格和卡片形式管理用户、课程、班级,并查看评测列表 3. 以图表的形式查看指定班级、指定作业的学生分数分布、编译器语言及目标语言占比 |
预期使用场景实现该用户需求的功能 | 1. UI简洁美观,管理便捷 2. 提高了编译版本 3. 可视化查看学生成绩 |
测试矩阵
OS | Browser | 登录 | 公告查看 | 课程作业 | 小测 | 提交评测 | 竞速排序 | 课程资料 | 个人中心 | 课程管理 | 用户管理 | 评测记录 | 讨论区 | 通知 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
macOS 13.3.1 | Chrome 112.0.5615.137 | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
macOS 13.3.1 | Safari 18615.1.26.11.23 | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
macOS 13.3.1 | Firefox 112.0.1 | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
macOS 13.3.1 | Edge 112.0.1722.58 | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
Windows 10 19044.2846 | Chrome 105.0.5195.127 | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
Windows 10 19044.2846 | Edge 112.0.1722.58 | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass |
- macOS火狐浏览器下保存用户名密码到浏览器后,点击修改密码自动填充相应字段
- macOS火狐浏览器、safari下登陆界面字体过小
出口条件
功能条件
完成原定Alpha阶段的指定需求:
学生用户需求:
- 个人相关
- 登录登出(注册方式见下方安装使用方法)
- 修改邮箱密码(其他信息不提供自由编辑,需联系助教/管理员修改)
- 公告相关
- 查看课程公告
- 资料相关
- 查看下载课程资料
- 作业相关
- 查看作业介绍、测验、评测
- 提交小测、查看小测答案
- 提交评测、获取评测结果、下载提交、查看详情
- 讨论区
- 查看课程对应的全部讨论帖
- 发表讨论帖、修改删除自己发布的讨论帖
- 点赞关注讨论帖
- 查看讨论帖下面的回复
- 发表回复、修改删除自己发布的回复
- 点赞回复
- 通知
- 查看通知
- 接收关注的讨论帖有新回复的通知
- 指导书
- 查看课程指导书
- 通过chatbot提问指导书上相关内容
在学生用户的基础上,对管理员用户进一步提供用于管理的基本功能:
- 用户管理
- 添加删除用户
- 修改用户信息、重置用户密码为默认值
- 课程管理
- 添加修改删除课程
- 添加删除课程开放用户
- 公告管理
- 修改删除课程公告
- 资源管理
- 添加更新删除资源
- 作业管理
- 添加删除作业、修改作业题面
- 创建更新删除小测
- 延长作业时间
- 评测管理
- 添加更新删除评测
- 添加更新删除数据点
- 上传测试点文件
- 成绩管理
- 查看统计分析作业对应的成绩
- 讨论区管理
- 增删改查讨论帖
- 加精置顶讨论帖
- 管理讨论帖对应的标签
- 指导书管理
- 修改维护指导书内容
- 维护GPT
测试条件
编写并通过全部单元测试,尽可能提高测试覆盖率。
进行后端压力测试、评测机压力测试。压测情况下系统稳定不崩溃。
数据条件
创建编译技术测试课程。
创建课程所需的题目、评测用例、评测脚本。