1、框架简介
1、1 框架设计思想
本框架是由selenium+testng+java+maven编写的数据驱动框架,对于用例的开放设计性比较强,分离了页面元素、页面元素操作、用例和检查点,也就是说,每个页面的元素、操作、检查点单独封装了,之后在用例中用到什么操作都可以调用之前写的。
对于测试数据,是单独保存在excel文件中的,同一个功能有正向和逆向测试,只要把测试数据保存在excel中,多种逆向可能性都可以列出来,包括检查的数据,程序会一一读取,并反馈检查点是否正确,这就避开了每个正向或逆向测试都要写一遍用例的麻烦。
对于失败的用例,我在监听器中加入了失败用例重跑功能,可设置重跑次数。因为有的时候用例的失败可能并不是出现bug,也许是网络原因或其他原因,可以再跑一次验证结果。
对于测试结果,我这里有保存log日志,可查看每个用例都做了哪些操作,用了什么数据、检查点等,最后运行是否正确都有记录,同时还有testng的运行结果,里面统计了运行成功和失败的用例。还改写和report,使运行失败的用例截图放在运行结果中,以便查看问题。更值得一提的是,框架里加入了发送邮件功能,可以配置邮箱数据,待程序运行完成后吧带截图的结果发送到指定的邮箱。
2、utils封装
2、1 从txt文件读取配置数据
Txt文件放置一些配置数据,保存在config文件夹下,内容格式如:name=lily。
目前放置的是驱动的路径和
2、2选择操作系统和浏览器
封装了选择操作系统和浏览器的方法,浏览器在xml文件中定义,操作系统由代码获取。
2.3日志获取和保存
日志方法用到的插件是log4j,方法主要是配置日志输出格式和路径,调用时先初始化
static Logger logger = Logger.getLogger(BaseParpares.class.getName());
2.4从excel文件读取测试数据
传参为文件名和sheet(用例名),返回的是参数值数组,具体可查看testng的@DataProvider。这里读取数据的时候,如果有多行会一并读取,每行都是一条测试用例。
2.5 获取随机数
2.6 连接数据库
2.7 获取用例描述
3、selenium常用操作封装
Seleniumutils,按不同功能分了好几个类,封装同类功能各种操作方法,其中Browser是对浏览器操作的封装,包含了driver的定义,由于所有的操作都需要driver,其他的类都需要继承Browser,不会出现no session的情况。
4、BaseParpares
基本数据和设置,所有的用例都从这里开始,继承这个类的数据,写了beforeclass和afterclass的操作,每个用例的class执行前后都会执行这两个方法。还有@BeforeMethod和@AfterMethod,每个用例@Test执行前后都会执行这两个方法。以及每个用例用到的数据提供者配置,获取到用例的包和用例编码,对应excel文件的文件名和sheet名。以及获取用例名称、路径、classpath等的方法。
5、用例设置
用例的设置包括三大块,pages、pagehandlers、testcases。
Pages:是每个页面的元素,调用org.openqa.selenium.By ,定义元素定位,如:
public static final By L_LOGIN = By.id("login_frame");
之后在pagehandlers中被调用。
Pagehandlers:是每个页面的功能和检查点封装。注意检查点不需要异常处理,且调用检查方法时用Assert.assertTrue();因为其他地基本方都做了异常处理,如果这个也用异常处理的话整个用例就不会停止也不会失败,报错后会一直运行,增加了不必要的等待时间。
Testcases:就是测试用例,调用pagehandlers的功能组合成用例。每个类都需要继承BaseParpares 。@Test的时候加入测试数据的读取@Test(dataProvider="testData") ,这样才能读取到对应的测试数据。这里读取数据的时候,如果有多行会一并读取,每行都是一条测试用例。所以要把用例先封装好,把测试数据作为方法的参数一并读取,再用@Test(dataProvider="testData") 获取excel数据同时传给一个用例。
6、监听器
TestResultListener:用例失败之后截图,通过重写testng的监听方法,需要导入org.testng.TestListenerAdapter;继承TestListenerAdapter。重写onTestFailure,加入截图的功能。同时加入了onTestStart、onTestSuccess等,onTestStart与base中的BeforeMethod有点重复,视情况重写。
这个监听器可放在BaseParpares,因为每个用例的类都继承了BaseParpares,放置方法:@Listeners({TestResultListener.class})
RetryListener:是重跑失败的测试用例。通过implements IAnnotationTransformer写了新接口,implements 是实现多个接口, 接口的方法一般为空的, 必须重写才能使用,还需要加载配置文件config.properties。
EmailableReporterListener:是运行完成后获取结果并发送到指定邮箱的监听器,重写了testng的EmailableReporter2,单独谢了发送邮件功能在这里调用,在testng套件里无论哪一级调用都得不到最终结果,所以最终选择在reporter调用,源码查看org.testng.reporters. EmailableReporter2。
监听器都配置在testng.xml文件中,才可以加载。
<listeners>
<listener class-name="com.test.listener.RetryListener" />
<listener class-name="com.test.listener.TestResultListener" />
<listener class-name="com.test.listener.EmailableReporterListener"/>
</listeners>
以上就是对于框架的介绍,代码我就不贴出来了,前面的博客有记录testng的一些扩展功能,博客上文提的失败用例截图,发送邮件等等,有兴趣可以看看