一. 开发背景
开发人员:本人独立开发
技术栈:Spring Boot、Spring MVC、MyBatis、Mysql
开发时间:2023-06-01——2023-07-01
二. 项目功能
- 登录功能:用户在登录时除了需要填写用户名和密码之外还需要填写验证码,部分页面实现未登录拦截,密码错误五次锁定账户
- 注册功能:实现了注册功能,为用户的密码进行加密保存,可更改和找回密码
- 首页:该页面展示了所有用户发布的文章,一页只展示两篇文章,对于过长的文章会进行截取,可点击"查看全文"了解详情,提供了翻页功能
- 详情页面:会完整展示博客相关信息,还提供了阅读量,点赞,评论等供用户交流的功能,左侧会展示文章作者的基本信息
- 编写博客:提供了三种发布方式:现在发布,保存草稿,定时发布。保存为草稿的文章不会在首页中被别的用户看到,仅会出现在个人主页中。
- 个人主页:左侧展示用户信息,右侧展示该用户的所有文章,提供用户对文章的查阅,修改,删除操作,在该页面用户可以注销,修改密码
三. 测试计划
一)功能测试
1. 测试用例:
2. 实际执行测试的部分操作步骤
1)正常注册
2)正常登录
3)更改密码
4)个人主页
5)文章详情
6)评论
7)主页
8)找回密码
二)自动化测试
一. 代码
代码https://gitee.com/zhong-yunhan/learn/tree/master/mycnblog/src/test/java/com/example/demo
- 每个页面一个测试类,依据思维导图编写
- 创建启动和现场截图会频繁复用,用单独的类实现
- 添加隐式等待,确保页面正确加载
- 使用测试套件便于运行修改
1. 相关依赖
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0</version>
</dependency>
<!--保存屏幕截图文件需要用到的包 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.8.2</version>
<scope>test</scope>
</dependency>
2. 测试类和公共类
1)公共类 AutoTestUtils
- 创建驱动对象,定义登录方法
- 保留现场截图,使用当前时间和运行的方法名作为区分
2) 登录页面测试 blogLoginTest
- 检测页面是否正常打开
- 正常登录:多参数测试
- 异常登录:用户名/密码/验证码错误的情况(包括null)
- 验证码在自动化测试时使用了通用验证码来通过
- 按钮测试:主页,注册,找回密码
3)首页测试 blogListTest
- 检测页面是否正常打开
- 文章展示是否正确
- 分页功能是否正确
- 长文章截取展示,草稿不展示
- 按钮测试:个人主页——未登录将跳转到登录页面;查看全文
4)个人主页测试 blogMyListTest
- 检测页面是否正常打开
- 左侧展示用户信息是否正确
- 右侧展示用户所有文章是否完整(包括草稿)
- 按钮测试:首页,写博客,注销,修改密码,查看全文,修改文章,删除文章
-
5)文章详情页测试 blogContentTest
- 检测页面是否正常打开
- 左侧展示文章作者信息是否正确
- 右侧展示该文章所有信息是否完整(标题,正文,修改时间,阅读量,点赞数,评论)
- 登录用户:可点赞,评论
- 未登录用户:不可点赞,评论,点击会提示是否跳转到登录页面
6)新增博客 blogAddTest
- 检测页面是否正常打开
- 正常发布:标题和正文不为空
- 异常发布:标题/正文为空
- 检查保存草稿和现在发布是否正常
7)测试套件 runSuite
- 定义测试类的执行顺序
二. 代码测试
所有测试用例通过:
四. 小结
1)一定要关注测试用例的执行顺序问题
2)对于页面的检查一定要到位,如检查元素是否存在确保页面的正确性
3)注意多参数测试的页面导航问题
4)发现:当多参数(多用户登录)时就会出现高并发的服务器错误情况,该情况需要关注,交给开发人员处理。
5)注意:一定要关注执行顺序!
6)因为列表页等的测试是需要在登录成功后才能抵达的,所以在进行登录页面测试的最后一步应该是登录成功的状态,这样子是为了确保列表页等能够正确进入测试。【并不是绝对,但是需要进行关注】
7)驱动关闭的位置要注意,只有最后一个用例结束之后才进行关闭。
8)为了把所有的用例的执行结果保存下来,方便后续查错或查看,也就是保存现场,此时就需要直接在公共类中进行该方法的定义。
9)注意屏幕截图保存的方式:动态时间戳并进行时间格式化,然后期望按照某种维度(天、周)以文件夹的方式进行保存。
10)@SelectClasses的参数是可以指定执行类的顺序的(注意是类的顺序,不是用例的顺序)
11)获取元素的时候建议获取固定的元素,如时间、标题等;内容不建议获取,因为是动态的。然后元素的路径是不可变的,所以可以使用xpath来进行元素的定位。
12)可以适当关注用例执行时间,如果时间过长就需要考虑是我们自己写的测试用例的问题还是程序真的有性能问题呢
13)为了避免遗漏or遗忘驱动释放的位置,可以单独写一个类来存放驱动释放,然后直接放到套件测试类的最后就行。(注意命名Test结尾)
14)测试用例并不是越多越好
15)可以使用无头模式来创建驱动