基于Excel和Selenium的JUnit UI测试框架
2017-10-16 00:00
615 查看
平时开发测试的时候都是手动测试,但是对于一些重复的基础测试,比如输入格式是否正确,选项是否可选,显示的文字提示是否正确,都可以用Selenium自动化测试代替,鉴于平常是使用Excel来管理测试用例数据的,所以这次想把Selenium和Excel结合起来,构建一个JUnit UI测试框架。
不过JUnit本身并不支持多线程,而在浏览器的操作本身是需要耗时不少,加上测试用例数据成百上千,如果只使用一个线程的话效率是很低的,而且,不像业务接口测试,这种UI自动化测试中有可能会因为各种各样的误差而导致测试不通过,遇到这种误差的时候就需要重试,但JUnit本身也不支持重试,综上所述,我们需要使用@RunWith对JUnit进行扩展。
扩展后的测试流程如下:
读取Excel中所有的测试用例数据
取出一条测试用例数据
启动浏览器
执行具体的测试逻辑
若测试不通过,并且未达到重试次数,则回到第4步,若已达到重试次数, 则截图
关闭浏览器,若仍有未取出的测试用例数据,则回到第2步
输出测试结果到Excel中
扩展后的JUnit已经包含了1,2,3,5,6,7这六个步骤,开发人员只需要实现第4步的具体的测试逻辑即可。
框架实现代码在https://github.com/hpq86zllw/junit-ui-test-framework
使用默认配置时的例子如下
Test_Case.xls为测试用例数据,Test_Case_Result.xls为测试结果
启用多线程和重试功能时的例子如下
threadNum为线程数,retryNum为重试次数
其他例子可以查看README.md,编写完测试逻辑后按照平时启动JUnit的方法即可。
不过JUnit本身并不支持多线程,而在浏览器的操作本身是需要耗时不少,加上测试用例数据成百上千,如果只使用一个线程的话效率是很低的,而且,不像业务接口测试,这种UI自动化测试中有可能会因为各种各样的误差而导致测试不通过,遇到这种误差的时候就需要重试,但JUnit本身也不支持重试,综上所述,我们需要使用@RunWith对JUnit进行扩展。
扩展后的测试流程如下:
读取Excel中所有的测试用例数据
取出一条测试用例数据
启动浏览器
执行具体的测试逻辑
若测试不通过,并且未达到重试次数,则回到第4步,若已达到重试次数, 则截图
关闭浏览器,若仍有未取出的测试用例数据,则回到第2步
输出测试结果到Excel中
扩展后的JUnit已经包含了1,2,3,5,6,7这六个步骤,开发人员只需要实现第4步的具体的测试逻辑即可。
框架实现代码在https://github.com/hpq86zllw/junit-ui-test-framework
使用默认配置时的例子如下
@RunWith(UITestRunner.class) public class SearchTest1 { @Test @InputAndOutput(inputArgs = { "/Test_Case.xls" }, outputArgs = { "/Test_Case_Result.xls" }) public void testSearch(Map<String, Object> testCaseData) { WebDriver driver = Browser.getDriver(); Index index = PageFactory.initElements(driver, Index.class); index.get(); index.search(testCaseData); Result result = PageFactory.initElements(driver, Result.class); result.check(testCaseData); } }
Test_Case.xls为测试用例数据,Test_Case_Result.xls为测试结果
启用多线程和重试功能时的例子如下
@RunWith(UITestRunner.class) public class SearchTest2 { @Test @InputAndOutput(inputArgs = { "/Test_Case.xls" }, outputArgs = { "/Test_Case_Result.xls" }) @RuntimeSetting(threadNum = 2, retryNum = 1) public void testSearch(Map<String, Object> testCaseData) { WebDriver driver = Browser.getDriver(); Index index = PageFactory.initElements(driver, Index.class); index.get(); index.search(testCaseData); Result result = PageFactory.initElements(driver, Result.class); result.check(testCaseData); } }
threadNum为线程数,retryNum为重试次数
其他例子可以查看README.md,编写完测试逻辑后按照平时启动JUnit的方法即可。
相关文章推荐
- 原创:Spring整合junit测试框架(简易教程 基于myeclipse,不需要麻烦的导包)
- android基础知识12:android自动化测试03—基于junit的android测试框架03
- 设计自己的基于Selenium 的自动化测试框架-Java版(1) - 为什么selenium还需要测试框架?
- 从零开始自动化测试框架设计:自动化测试环境搭建一:eclipse+svn+selenium+Junit+maven
- 基于RFS(robot framework selenium)框架模拟POST/GET请求执行自动化接口测试
- selenium进阶之基础--web自动测试框架(ant+junit+selenium)
- 【转载】基于 JUnit 的 InstallAnywhere 安装程序图形界面自动测试框架
- 设计自己的基于Selenium 的自动化测试框架-Java版(1) - 为什么selenium还需要测试框架?
- Junit测试Spring应用Dubbo测试框架之-Excel 工具类
- Dbunit(基于junit扩展的数据库测试框架。)vs Jmockit
- 一个基于JUnit的测试框架
- 基于Ant+Selenium+TestNG的测试框架配置
- 基于maven+testng的selenium测试框架搭建
- 设计自己的基于Selenium 的自动化测试框架-Java版(1) - 为什么selenium还需要测试框架?
- 设计自己的基于Selenium 的自动化测试框架-Java版(1) - 为什么selenium还需要测试框架?
- 基于RFS(robot framework selenium)框架模拟POST/GET请求执行自动化接口测试
- android自动化测试03—基于junit的android测试框架
- 基于 Excel 参数化你的 Selenium2 测试代码
- .net 基于selenium 框架的测试架构
- 基于Robotium框架的测试工程如何导入Robotium包的源码