论坛自动化测试
简述
这是对一个论坛系统进行了部分功能的自动化测试。
进行自动化测试的一般步骤:
1.明确自动化测试目标和范围:
2.选择正确的自动化工具
3.制定详细的测试计划
4.设置测试环境
5.执行自动化测试脚本并收集结果
6.分析测试结果并生成报告
7.问题追踪与修复
8.重复和持续测试
这是个人,对尚未出现明显不符合需求的论坛系统,进行的自动化测试项目,所以第7点和第8点并未在项目博客中展示。
一.目标和范围
当前仅对论坛系统对论坛进行了web自动化测试。主要测试登录页面,注册页面,论坛列表页展示页面以及论坛帖子发布页面。
二.选择工具
这里主要使用了selenium自动化测试工具和Junit单元测试框架结合;
1. selenium具有很多优点,包括但不限于开源免费,支持多浏览器,支持多系统,支持多语言编程,以及提供了丰富的web自动化测试API,这对新手学习并实践自动化测试,十分具有友好性。
2.Junit提供了强大的注解功能和断言类,对测试人员编写测试代码十分方便。
三.测试计划(脑图)
四.设置环境
添加相关依赖pom.xml
<dependencies>
<!-- 添加selenium依赖-->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<!-- 保存屏幕截图需要用到的包-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<!-- 添加junit5依赖-->
<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>
</dependencies>
五.执行自动化测试脚本并收集结果
1.测试代码的内容:
以下创建了两个包,分别为common包和Tests包;
common包中存放一些公共的属性和方法;
Tests包中存放测试不同页面的类;
Tests包中含有ForumLoginTest,ForumRegisterTest,ForumListTest,ForumEditTest,DriverQuitTest,runSuite六个类
1.公共类AutoTestsUtils
- 创建公共的驱动对象,方便代码复用。减少内存消耗;
- 设置了无头模式,使自动化测试更高效、更易于管理,并且更多地集中于测试本身;
- 创建了截图功能,保留了具体的测试场景,利于测试回顾;
- 利用时间戳建立了日期文件夹,存放当日截图照片,方便测试管理;
- 利用时间戳和类名,为不同图片设置了不同名字,方便在测试遇到问题时,寻根溯源
2.登陆页面测试ForumLoginTest
- 创建了谷歌的驱动对象,并访问了论坛系统登陆系统界面;
- 测试论坛登录登录界面是否能正常显示;
- 测试正常登录情况,选择了三个正确的账号和密码进行测试;
- 测试异常登录情况,选择了三组账号和密码进行测试,分别是正确的账号和错误的密码,错误的账号和正确的密码,错误的账号和错误的密码;
- 注意测试正常登录情况,每次进行测试的时候,需要将上次输入的账号密码清空;
- 注意测试异常登录情况,每次进行测试的时候,需要将上次弹出来的警告刷新,防止造成代码测试判断异常;
3.注册页面测试ForumRegisterTest
- 论坛注册页面是否可以正常显示;
- 测试注册功能正常情况,注册成功会返回登录页面;
- 测试注册功能异常情况,用户名重复和两次密码不一致,报出警告,停留在注册页面;
- 注意执行用例之间的逻辑顺序关系。这里先进行注册成功测试用例的执行,再进行注册失败用例的执行。
4论坛列表页面测试ForumListTest
- 登录状态下,列表页面是否可以正常显示;
- 未登录状态,列表页面是否可以正常显示;
- 注意用例之间前后顺序,在未登录状态下,进入列表页面会弹出警告,多次进入会重回登录页面。在单独进行该案例测试的时候,可以检测是否弹出了警告或者回到了登陆页面,用来判断未登录状态下的,列表页面功能是否正常
5.论坛帖子编辑测试ForumEditTest
- 未登录状态,编辑页面是否可以正常显示,是否弹出警告或者多次进入而回到了登陆页面;
- 登录状态下,编辑页面是否可以正常显示,是否可以显示出编辑页面独有的元素;
- 登陆状态下,论坛帖子编辑功能是否正常
- 测试帖子分类模块,输入标题和内容,进行正常编辑功能测试;
- 只输入标题不输入内容,只输入内容不输入标题,以及标题和内容全都不输入的这三种情况,来进行异常编辑功能测试;
- 注意执行用例的前后逻辑关系,是否处于登录状态,这些逻辑对于整个论坛的整套测试来说,非常重要
6.驱动释放DriverQuiteTest
- 为了方便一整套测试流程的进行,也是为了节省资源,避免在每个类之后都进行驱动释放,这里我们新建了一个驱动释放类。可以放在测试套件中的最后一个,用来释放驱动
7.测试套件runSuite
- 可以在套件中按照计划的测试流程,来有序的添加测试类
2.测试过程收集的结果:
各个均测试通过,如下:
每个用例均有现场截图,放在下面代码中的文件夹中
3.测试的完整代码
六.分析测试结果并生成报告
1. 测试环境
- 测试工具: selenium,Junit
- 语言: Java
- 依赖:selenium-java,commons-io, junit-jupiter, and junit-platform-suite
- 操作系统:windows10
- 浏览器: Chrome
2. 测试过程
我们测试了论坛的主要功能页,包括登录页面,注册页面,论坛列表页,以及论坛帖子发布页面。我们创建了一系列的测试类并以适当的顺序执行,确保测试结果的可靠性和准确性。具体的测试类与用例如下:
- ForumLoginTest: 检查登录页面的正常显示以及用户的正确和错误登录情况。
- ForumRegisterTest: 检查注册页面可以正常显示,测试用户注册账号的正常和异常情况。
- ForumListTest: 验证已注册和未注册用户可正常查看论坛列表。
- ForumEditTest: 验证已登录和未登录用户的帖子编辑页面的正常显示,测试已登录用户的帖子编辑功能。
- DriverQuitTest: 释放驱动以释放资源。
- 由于selenium具有截图功能,我们把每个测试的结果截图保存,以便后续的问题回溯。
3. 测试结果
所有用例均测试通过,如下:
4. 结论
我们的测试覆盖了主要的功能页面,包括注册,登录,查看列表以及编辑帖子。通过selenium和JUnit的使用,我们能够自动化地和有效地执行这些测试。通过截图,我们可以回溯和了解每个测试的具体情况。所有的测试用例都顺利通过,论坛系统表现正常且稳定。不过,我将继续监控系统,并在必要时进行更多的测试。
七.项目的亮点
1.使用Junit5中提供的注解:避免产生了过多的对象,造成资源和时间的的浪费,提高了自动化的执行效率;
2.只创建了一次驱动对象:避免每个用例重复创建对象而造成时间和资源上的浪费;
3.使用了参数化:保持用例的简洁,提高了代码的可读性;
4.测试套件:降低了测试人员的工作量,通过套件一次执行所有要运行的测试用例‘
5.使用了等待:提高了自动化运行的效率,避免自动化代码因为未及时渲染页面而导致出现的错误,提高了自动化的稳定性;
6.使用了截图功能:便于问题的追溯与解决。