WEB UI自动化框架设计
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的一些扩展功能,博客上文提的失败用例截图,发送邮件等等,有兴趣可以看看
WEB UI自动化框架设计相关推荐
- Web UI自动化框架搭建
本篇博文只从项目架构角度,提供一些建议供参考.不涉及具体代码编写.目前市场上主流的免费开源工具就是Selenium.大家可以根据自己项目技术栈,选择合适的语言+外加Unit Test框架,来构建自己的 ...
- Web UI自动化框架大比拼
引子 对于测试从业者来说,手工测试是一个绕不过去的坎.当年我校招毕业以测试工程师岗位进了一家互联网公司.入职第一天就被师父"拉去干活",至今印象深刻,是一个投顾管理平台(投资顾问管 ...
- 手把手教你从0到1搭建web ui自动化框架(python3+selenium3+pytest)
-前期准备 -环境 -实战: 从0开始 前期准备 为更好的学习自动化框架搭建,你需要提前了解以下知识: python基础知识 pytest单元测试框架 PO模式 selenium使用 环境 本次我们自 ...
- api/UI自动化框架设计(pytest)
- UI自动化框架如何设计及搭建?
目录 UI自动化框架 自动化原则: 如何减少自动化维护成本? UI自动化框架优化方案:(在不增加维护成本前提下) UI自动化脚本可分为3种: 已经实现自动化的模块可以不做手工测试了吗? UI自动化公式 ...
- WEB UI自动化测试框架搭建(一)_公用方法Utils
本栏目内的所有项目使用的都是PyCharm 2020.1专业版,可以下载后自行在网上找教程破解. WEB UI自动化测试框架搭建(一)~(七)源代码:https://download.csdn.net ...
- Java接口自动化框架系列07:Web接口自动化测试框架设计思路
1.Java web接口自动化框架 框架名称:Java+Maven+httpClients+TestNg+Allure (因本次只讲解java部分,未包括git和jenkins,如果是包括git和je ...
- 分布式 Web UI 自动化系统的设计与实现
背景 很久以前基于Robotframework + flask + reactjs开发了一套 Web UI 自动化系统,用于网站自动化测试和日常巡检.但是随着其应用覆盖的范围越来越广,发现存在一些设计 ...
- 10个优秀的 Web UI库/框架 详细出处参考:http://www.jb51.net/web/22251.html
点评:UI(User Interface)即用户界面,也称人机界面.是指用户和某些系统进行交互方法的集合,实现信息的内部形式与人类可以接受形式之间的转换.本文为WUI用户整理了10个优秀的 Web U ...
最新文章
- vs 设置调试路径为exe所在的路径
- linux sed给空文件首行插入_linux下批量修改文件后缀名以及合并多行
- java 内存排序_详细解析Java内存,处理器重排序,编译器重排序以及它对线程的影响...
- Java List 排序 :Lambda表达式sort排序
- oracle查看数据库是否恢复成功_记一次解决docker下oracle数据库故障事例
- 分享一个NHibernate的博客链接
- C语言:用二维字符数组的每行存储键盘输入的字符串,将这些字符串按字典顺序升序排序,输出排序后的结果。
- html 图层嵌套特点,ps图层有哪几种类型?
- 计算机指法标准,标准盲打指法练习
- C++实现走迷宫算法(1)
- Hotspot 对象引用Reference和Finalizer 源码解析
- .mht文件转换为html
- Linux MD5 programming in C Language
- ios12.3beta2_如何回滚到iOS 11(如果您使用的是iOS 12 Beta)
- 360快剪辑怎么使用 360快剪辑软件使用方法介绍
- 浏览器原理 39 # 页面性能工具:如何使用 Performance?
- Electron-vue开发桌面应用调用TSCLIB.dll(tsc标签打印机连接库)
- Nginx实战学习之负载均衡
- 有了这几个软件安全测试工具,编写安全测试报告再也不愁
- 如何提高自己的写作水平