Oj系统测试报告
1.项目背景介绍
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.测试登录失败
- 账号正确,密码错误
- 账号错误,密码正确
- 账号密码都为空
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).未开赛竞赛
- 编辑竞赛 --不允许未添加题目发布
- 发布竞赛
- 删除竞赛
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.使用无头模式启动
亮点:
- 只创建一次驱动对象,避免每个用例重复创建驱动对象造成时间和资源的浪费。
- 使用参数化:保持用例的简洁,提高代码的可读性
- 使用测试套件:降低了测试人员的工作量,通过套件一次执行所有要运行的测试用例。
- 使用了等待:提高了自动化的运行效率,提高了自动化的稳定性,减小误报的可能性。
- 使用了屏幕截图:方便问题的追溯以及问题的解决。
5.性能测试
使用jmeter进行测试,测试发送验证码(获取验证码上限已关闭),测试登录,题库列表,竞赛列表,答题功能等接口进行简单的性能测试.
上述有一部分是重复的,这里就不再分开,而是放在一起说了。
这些是开始测试前的准备工作:
C端接口请求默认值:由于我们访问的借口的地址、协议啊等等都是一样的,后续的接口就不用重复写了。
json 格式化:有些接口的请求数据是 json 格式,所以需要格式化
这三兄弟的作用分别是:方便查看吞吐量,响应时间,线程的的执行情况
BeanShell 后置处理程序:后端返回的数据不全是 utf-8的数据,有时候会出现乱码,需要它来进行处理,转成 utf-8 的格式
查看结构树:查看每个接口的请求和相应
聚合报告:模拟多个用户的进行请求的统计信息
token:
由于我们项目设置了每次用户的请求必须带有 token来进行验证,所以需要一个 请求头信息,每次请求接口时携带在 http 头信息中
由于我们这里需要先点击发送验证码再进行请求登录接口,所以需要一个事务,保证顺序性。
获取用户登录凭证:用于获取登录后后端返回的 token 信息。
CSV 数据文件设置:模拟不同的用户进行登录,具体的用户写在 xlsx 文件内
阶梯测压:
本机的性能并不好,所以没有使用很多用例,所以选了20个用户。
将编写好的测试脚本,在cmd中执行
执行命令为:
如下图所示:
等待执行完之后,会生成如下信息:
我们点击 index.html 就可以看具体的测试报告:
1)吞吐量:
2)响应时间:
3)线程的的执行情况: