Compilify Alpha阶段测试报告
本文为Compilify编译课程平台Alpha阶段测试报告。
Bug列表
后端
bug现象 | bug原因 |
---|---|
作业顺序不齐 | 没有返回的保证作业顺序 |
管理员无法查看小测正确答案 | 后端没有设置 |
管理员无法查看用户教师 | 后端没有返回 |
前端
bug现象 | bug原因 |
---|---|
错误地修改用户信息后前端没有报错 | 前端直接刷新而非再次获取数据 |
下载图片和txt资源直接显示 | 前端获得url直接下载 |
添加用户部分user_name为空提示user_name过长 | rules的逻辑错误 |
带有分页的表格在分页大小处点击ALL后无法获取到所有信息 | ALL在该组件中代表0,所以发送给后端时认为传输了无效的值,于是被替换为默认值 |
管理员部分按钮被公告等内容挡住 | 组件的层次问题 |
md编辑器的语法提示弹窗会出现在编辑器下层 | 组件的层次问题 |
在日期选择的弹窗中,不可以通过点击最上方的年份数字对年份进行更改 | 该组件自身存在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单元测试
目前完成了用户、课程管理、作业管理的单元测试。覆盖率无法进一步提升是由于对数据库异常进行了一定的检测,部分无法覆盖。
- 用户单元测试,行覆盖率84.1%
- 对于
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的错误处理测试
- 对于
上图中file、forum、push、resource文件均非Alpha阶段文件,judge单元测试尚未完善。
后端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
时间如上所示,能够满足多位用户同时登录、访问资源的需求
评测端压力测试
场景测试
用户信息 | 用户情况 |
---|---|
姓名 | 刘狗 |
用户身份 | 计算机学院大三学生 |
用户情况 | 学习编译知识或者预习编译比赛 |
用户痛点 | 1.原版编译平台UI设计不合理 2.想要查看自己的历史测评信息 3.下载资源部分更便捷 |
软件对应功能 | 学习编译相关知识 |
预期使用场景实现该用户需求的功能 | 1.UI设计会更加简洁和美观 2.可以轻松查看历史测评信息 3.下载课程资源更便捷 |
用户信息 | 用户情况 |
---|---|
姓名 | 王跌 |
用户身份 | 计算机学院学生 |
用户情况 | 编译课程平台助 |
用户痛点 | 原版平台操作不舒服,缺乏便捷操作 |
软件对应功能 | 管理编译课程平台 |
预期使用场景实现该用户需求的功能 | 对用户管理更便捷,支持批量修改 |
用户信息 | 用户情况 |
---|---|
姓名 | rjd0 |
用户身份 | 计算机学院教授 |
用户情况 | 编译课程讲师 |
用户痛点 | 原版平台设计不好,llvm版本过低 |
软件对应功能 | 管理编译课程平台 |
预期使用场景实现该用户需求的功能 | 优化了编译平台页面,提高了编译版本 |
测试矩阵
OS | Browser | 登录 | 公告查看 | 课程作业 | 小测 | 提交评测 | 竞速排序 | 课程资料 | 个人中心 | 课程管理 | 用户管理 | 评测记录 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
macOS 13.3.1 | Chrome 112.0.5615.137 | 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 |
macOS 13.3.1 | Firefox 112.0.1 | 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 |
Windows 10 19044.2846 | Chrome 105.0.5195.127 | 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 |
- macOS火狐浏览器下保存用户名密码到浏览器后,点击修改密码自动填充相应字段
- macOS火狐浏览器、safari下登陆界面字体过小
出口条件
功能条件
完成原定Alpha阶段的指定需求:
学生用户需求:
- 个人相关
- 登录登出(注册方式见下方安装使用方法)
- 修改邮箱密码(其他信息不提供自由编辑,需联系助教/管理员修改)
- 公告相关
- 查看课程公告
- 资料相关
- 查看下载课程资料
- 作业相关
- 查看作业介绍、测验、评测
- 提交小测、查看小测答案
- 提交评测、获取评测结果、下载提交、查看详情
在学生用户的基础上,对管理员用户进一步提供用于管理的基本功能:
- 用户管理
- 添加删除用户
- 修改用户信息、重置用户密码为默认值
- 课程管理
- 添加修改删除课程
- 添加删除课程开放用户
- 公告管理
- 修改删除课程公告
- 资源管理
- 添加更新删除资源
- 作业管理
- 添加删除作业、修改作业题面
- 创建更新删除小测
- 延长作业时间
- 评测管理
- 添加更新删除评测
- 添加更新删除数据点
- 上传测试点文件
测试条件
编写并通过全部单元测试,尽可能提高测试覆盖率。
进行简单的后端压力测试、评测机压力测试。压测情况下系统稳定不崩溃。
数据条件
创建编译技术测试课程。
创建课程所需的题目、评测用例、评测脚本。