Compilify Beta阶段测试报告

该文详述了Compilify平台的Alpha测试结果,包括前端和后端的bug列表,单元测试覆盖率,压力测试性能,以及评测端的并发处理能力。测试涵盖了用户管理、课程管理、作业、讨论区和通知等多个功能模块,同时提出了针对不同用户角色的功能需求和优化建议。
摘要由CSDN通过智能技术生成

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. 可视化查看学生成绩

测试矩阵

OSBrowser登录公告查看课程作业小测提交评测竞速排序课程资料个人中心课程管理用户管理评测记录讨论区通知
macOS 13.3.1Chrome 112.0.5615.137passpasspasspasspasspasspasspasspasspasspasspasspass
macOS 13.3.1Safari 18615.1.26.11.23passpasspasspasspasspasspasspasspasspasspasspasspass
macOS 13.3.1Firefox 112.0.1passpasspasspasspasspasspasspasspasspasspasspasspass
macOS 13.3.1Edge 112.0.1722.58passpasspasspasspasspasspasspasspasspasspasspasspass
Windows 10 19044.2846Chrome 105.0.5195.127passpasspasspasspasspasspasspasspasspasspasspasspass
Windows 10 19044.2846Edge 112.0.1722.58passpasspasspasspasspasspasspasspasspasspasspasspass
  • macOS火狐浏览器下保存用户名密码到浏览器后,点击修改密码自动填充相应字段
  • macOS火狐浏览器、safari下登陆界面字体过小

出口条件

功能条件

完成原定Alpha阶段的指定需求:

学生用户需求:

  • 个人相关
    • 登录登出(注册方式见下方安装使用方法)
    • 修改邮箱密码(其他信息不提供自由编辑,需联系助教/管理员修改)
  • 公告相关
    • 查看课程公告
  • 资料相关
    • 查看下载课程资料
  • 作业相关
    • 查看作业介绍、测验、评测
    • 提交小测、查看小测答案
    • 提交评测、获取评测结果、下载提交、查看详情
  • 讨论区
    • 查看课程对应的全部讨论帖
    • 发表讨论帖、修改删除自己发布的讨论帖
    • 点赞关注讨论帖
    • 查看讨论帖下面的回复
    • 发表回复、修改删除自己发布的回复
    • 点赞回复
  • 通知
    • 查看通知
    • 接收关注的讨论帖有新回复的通知
  • 指导书
    • 查看课程指导书
    • 通过chatbot提问指导书上相关内容

在学生用户的基础上,对管理员用户进一步提供用于管理的基本功能:

  • 用户管理
    • 添加删除用户
    • 修改用户信息、重置用户密码为默认值
  • 课程管理
    • 添加修改删除课程
    • 添加删除课程开放用户
  • 公告管理
    • 修改删除课程公告
  • 资源管理
    • 添加更新删除资源
  • 作业管理
    • 添加删除作业、修改作业题面
    • 创建更新删除小测
    • 延长作业时间
    • 评测管理
      • 添加更新删除评测
      • 添加更新删除数据点
      • 上传测试点文件
  • 成绩管理
    • 查看统计分析作业对应的成绩
  • 讨论区管理
    • 增删改查讨论帖
    • 加精置顶讨论帖
    • 管理讨论帖对应的标签
  • 指导书管理
    • 修改维护指导书内容
    • 维护GPT

测试条件

编写并通过全部单元测试,尽可能提高测试覆盖率。

进行后端压力测试、评测机压力测试。压测情况下系统稳定不崩溃。

数据条件

创建编译技术测试课程。

创建课程所需的题目、评测用例、评测脚本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值