当前位置: 首页 > news >正文

Oj系统测试报告

1.项目背景介绍

本系统是一个基于SSM(Spring、SpringMVC、MyBatis)框架实现的微服务在线编程平台,平台对管理员和普通用户进行了合理切割,分为B端和C端.B端为管理员的后台管理端,可以对系统进行管理,对题目的增加,删除和修改;限制用户权限,对违规用户可以进行拉黑处理;对于竞赛方面,可以添加竞赛、编辑竞赛、发布竞赛、撤销发布竞赛;C端为用户端,未登录状态表可以提供浏览题目列表,竞赛列表,竞赛回顾,限制了一定权限,进一步使用功能需要登录;对登录用户进一步提供用户答题,竞赛报名,竞赛答题,用户消息查看,对个人信息进行编辑修改。

2.项目功能介绍

2.1 B端功能

a.登录功能:
实现管理员登录功能,不对外提供注册功能,注册接口不对外开放,对注册的账号的密码经加密算法加密,存储在数据库中

b.用户管理:
即登录后跳转的页面,右上角显示登录的用户,浏览用户的个人信息,手机,邮箱,学校等个人信息,且可以对用户权限进行拉黑处理;还可以对用户的id,名称等信息进行对用户的查找,重置查询信息

c.题目管理:
页面浏览到题目的id,题目标题,题目难度,题目创建人,创建时间;对OJC端题目的管理,提供搜索Id和题目名称功能;还有对题目编辑修改,删除等功能

d.竞赛管理:
页面浏览到竞赛的id,竞赛名称,竞赛是否发布,竞赛开始时间,结束时间,创建人等基本信息;也提供根据竞赛开始结束时间和竞赛标题进行搜索,对以开始的竞赛不提供对竞赛的编辑等操作,未开始竞赛,对已发布的竞赛提供撤销发布,撤销发布后可对竞赛进行编辑,未发布的竞赛可以对竞赛进行编辑.

c.退出登录:
用户退出登录,删除登录凭证token

2.2C端功能

a.题目页面
页面有搜索功能,可以根据题目名称和题目难度进行搜索;还有答题功能、翻页功能.

b.竞赛页面
竞赛页面包括未完赛页面和历史竞赛页面,对于不同的页面展示的效果不同,未完赛页面对于未报名竞赛展示报名,对于报名的竞赛展示已报名;历史竞赛则展示,竞赛练习和竞赛排名.

c.消息页面
消息页面展示用户收到消息,可以对消息进行删除

d.登录页面
登录页面则采用的是手机号码登录,对于第一次登录的用户则是注册,老用户的话则是校验验证码是否正确,用户一天内最多接受三次验证码.

e.个人中心
个人中心则展示的是个人信息,头像、名称、学校、微信号等信息,可以对个人信息修改

f.我的竞赛
我的竞赛页面则展示的是已报名的竞赛,展示竞赛开始和结束信息,对已结束的信息,可以点击竞赛练习和竞赛排名

g.退出登录
退出登录删除token等信息跳转至登录页面

3. 测试计划

3.1 功能测试

3.1.1 B端功能测试

部分测试用例截图

成功登录:

登录失败:

用户管理查询:

题目管理查询:

根据日期搜索竞赛

添加竞赛失败:

3.1.2 C端功能测试

部分测试用例截图

正常登录:

异常登录:

根据题目搜索:

答题:

报名参赛:

查看竞赛排名:

4. 自动化测试

4.1 B端自动化测试

B端自动化测试大致的测试就是上述B端功能测试的截图。

简单说说,就是分为5 的方向进行测试:登录、未登录、用户管理、竞赛管理、题库管理界面

具体的代码可以看如下链接:

seleniumDemo/oj-test/src/test · wjm的码云/HTML - 码云 - 开源中国

我把B、C端的代码放在了同一个路径中。

对于具体的代码而言,其实没什么难度,主要是在查找 element 的时候比较烦,有时候找不到,或者说明明可以找到,但在代码层面就是报错,最多就原因就是 selenium 自动化测试的时候界面跳转的太快了,它还来不及反应就跳转到下一个页面了,自然找不到改元素,一般来说这种情况就需要给他进行一个等待即可。

还有就是关于 vue 的元素,它是个动态的值,使用 css 选择器无法定位到改元素,需要使用其他的选择器进行定位,这里用的最多的是 XPath 选择器。

我所引入的依赖,如下图所示:

代码层调用的 api 没什么好说的,不懂的可以去查 api 文档。

代码逻辑

  • a.测试非登录下访问各个页面     预期-->返回登录页面
  • b.测试登录失败的各种情况         预期-->登录失败
  • c.测试登录成功情况                    预期-->登录成功
  • d.测试用户管理页面各个功能      预期--> 访问正常
  • e.测试题目管理各个功能             预期-->访问正常
  • f.测试题目管理各个功能              预期-->访问正常
  • d.测试竞赛管理各个功能             预期-->访问正常
4.1.1 B端自动化测试用例

1.非登录访问(NoLoginPage)

  • 访问用户管理页面
  • 访问题目列表页面
  • 访问竞赛管理页面
  • 访问竞赛添加页面

2.测试登录(LoginPage)
a.测试登录失败

  1.    账号正确,密码错误
  2.    账号错误,密码正确
  3.    账号密码都为空

b.测试登录成功

   账号密码正确跳转至用户列表页

3.测试用户管理页面(CUserPage)
a.测试翻页

  • 改变单页展示数量
  • 指定跳转页数
  • 下一页
  • 上一页

b.测试搜索

  • 搜索用户id
  • 搜索用户名称和ID
  • 重置

c.测试拉黑

d.测试取消拉黑

4.题目管理(QuestionPage)

  • a.测试搜索
    • 根据题目难度搜索
    • 根据题目名称搜索
  • b.测试添加题目
    • 正常添加题目
    • 添加重复题目
  • c.测试翻页
    • 改变单页展示数量
    • 指定跳转页数
    • 下一页
    • 上一页
  • d.测试编辑题目
  • e.测试题目删除

5.竞赛管理(ExamPage)

  • a.测试搜索
    • 根据时间搜索
    • 根据名称和时间搜索
  • b.添加竞赛
    • 添加重复竞赛
    • 添加未保存竞赛  --保存 --返回 -- 重新编辑
    • 添加未添加题目竞赛
    • 正常添加竞赛  -1.保存竞赛 2.添加题目 3.发布竞赛
  • c.测试编辑竞赛

1).未开赛竞赛

  1. 编辑竞赛       --不允许未添加题目发布  
  2. 发布竞赛
  3. 删除竞赛

2).已开赛竞赛

不允许编辑竞赛
测试翻页

  • 改变单页展示数量
  • 指定跳转页数
  • 下一页
  • 上一页

4.2 C端自动化测试

C端自动化测试大致的测试就是上述C端功能测试的截图。

4.2.1 C端自动化测试用例

1.未登录访问各个页面

题目页面

  • a.在右上角显示登录
  • b.未登录不允许答题
  • c.各个元素是否显示正常

竞赛页面

  • a.未完赛 ---点击报名,提示需要报名才能参加竞赛
  • b.历史竞赛页面--------竞赛练习,查看排名
2.验证码登录

登录失败

  • a.账号正确,验证码错误
  • b.账号错误,验证码错误
  • c.账号和验证码都为空
  • d.获取验证码最大次数
  • e.验证码已失效

注册

即第一次获取验证码登录为注册过程,入库

登录成功

账号和验证码都正确,进入登录页

3.题库页面

翻页

  • a.调整展示数量
  • b.前后翻页
  • c.指定跳转页面

搜索

  • a.根据题目名称搜搜
  • b.根据题目难度搜索
  • c.重置

答题

  • a.查看页面元素是否俱全
  • b.编写正确代码||编写错误代码
  • c.交提代码,检查通过||未通过元素是否齐全
  • d.测试,下一题,上一题,返回题库页面
4.竞赛页面

1.未完赛页面
a.翻页

  • 调整展示数量
  • 前后翻页
  • 指定跳转页面

b.报名竞赛

报名竞赛
已报名
到达规定时间

参与竞赛 ->测试答题功能一致
2.历史竞赛

  • 竞赛练习
  • 竞赛排名

5.退出登录

删除登录记录,token

小结

1.测试要关注测试的先后顺序

2.确保页面元素存在,确保不是动态的,是动态的需要确定的定位到具体的元素

3.确保是测试登录后再测试其他页面,其他页面都需要登录才能测试其他页面

4.驱动关闭最后确保是在执行最后,避免在执行其他用例的时候报错

5.使用截图工具确保精确到时分秒毫秒,避免执行程序过快会出现截图覆盖

6.隐式等待时间确保浏览器能渲染出元素,保证网络畅通

7.使用无头模式启动

亮点:

  1. 只创建一次驱动对象,避免每个用例重复创建驱动对象造成时间和资源的浪费。
  2. 使用参数化:保持用例的简洁,提高代码的可读性
  3. 使用测试套件:降低了测试人员的工作量,通过套件一次执行所有要运行的测试用例。
  4. 使用了等待:提高了自动化的运行效率,提高了自动化的稳定性,减小误报的可能性。
  5. 使用了屏幕截图:方便问题的追溯以及问题的解决。

5.性能测试

使用jmeter进行测试,测试发送验证码(获取验证码上限已关闭),测试登录,题库列表,竞赛列表,答题功能等接口进行简单的性能测试.

上述有一部分是重复的,这里就不再分开,而是放在一起说了。

这些是开始测试前的准备工作:

C端接口请求默认值:由于我们访问的借口的地址、协议啊等等都是一样的,后续的接口就不用重复写了。

json 格式化:有些接口的请求数据是 json 格式,所以需要格式化

这三兄弟的作用分别是:方便查看吞吐量,响应时间,线程的的执行情况

BeanShell 后置处理程序:后端返回的数据不全是 utf-8的数据,有时候会出现乱码,需要它来进行处理,转成 utf-8 的格式

查看结构树:查看每个接口的请求和相应

聚合报告:模拟多个用户的进行请求的统计信息

token:

由于我们项目设置了每次用户的请求必须带有 token来进行验证,所以需要一个 请求头信息,每次请求接口时携带在 http 头信息中

由于我们这里需要先点击发送验证码再进行请求登录接口,所以需要一个事务,保证顺序性。

获取用户登录凭证:用于获取登录后后端返回的 token 信息。

CSV 数据文件设置:模拟不同的用户进行登录,具体的用户写在 xlsx 文件内

阶梯测压:

本机的性能并不好,所以没有使用很多用例,所以选了20个用户。

将编写好的测试脚本,在cmd中执行

执行命令为:

如下图所示:

等待执行完之后,会生成如下信息:

我们点击 index.html 就可以看具体的测试报告:

1)吞吐量:

2)响应时间:

3)线程的的执行情况:

相关文章:

  • 湖北理元理律师事务所:债务化解中的心理重建与法律护航
  • C++——智能指针 shared_ptr
  • SSH登陆Linux常见问题大全
  • 【unity游戏开发入门到精通——通用篇】AssetBundle(AB包)和AssetBundleBrowser的使用介绍
  • 【Unity】R3 CSharp 响应式编程 - 使用篇(二)
  • 树莓派上遇到插入耳机后显示“无输入设备”问题
  • Java异常信息
  • “详规一张图”——香港土地利用数据
  • 6. MySQL基本查询
  • 如何安装并使用RustDesk
  • 【BUG解决】关于BigDecimal与0的比较问题
  • MySQL 表的内连和外连
  • RAG-Gym:一个用于优化带过程监督的代理型RAG的统一框架
  • 关于Dify聊天对话名称无法自动生成的原因和解决方法
  • java的纪录类--Record类
  • Elasticsearch中的自定义分析器(Custom Analyzer)介绍
  • JavaScript基础:运算符
  • 使用cephadm离线部署reef 18版并配置对接openstack
  • 使用Prometheus实现微服务架构的全面监控
  • Java Stream 高级实战:并行流、自定义收集器与性能优化
  • 女生做seo网站推广/西安百度竞价托管
  • 安徽网站建/泰州百度seo公司
  • scratch编程网站/手机怎么搭建网站
  • 网站建设资料 优帮云/百度下载app安装
  • 建设网站公司专业/平台推广是做什么的
  • 杭州做企业网站/百度贴吧热线客服24小时