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自动化框架设计相关推荐

  1. Web UI自动化框架搭建

    本篇博文只从项目架构角度,提供一些建议供参考.不涉及具体代码编写.目前市场上主流的免费开源工具就是Selenium.大家可以根据自己项目技术栈,选择合适的语言+外加Unit Test框架,来构建自己的 ...

  2. Web UI自动化框架大比拼

    引子 对于测试从业者来说,手工测试是一个绕不过去的坎.当年我校招毕业以测试工程师岗位进了一家互联网公司.入职第一天就被师父"拉去干活",至今印象深刻,是一个投顾管理平台(投资顾问管 ...

  3. 手把手教你从0到1搭建web ui自动化框架(python3+selenium3+pytest)

    -前期准备 -环境 -实战: 从0开始 前期准备 为更好的学习自动化框架搭建,你需要提前了解以下知识: python基础知识 pytest单元测试框架 PO模式 selenium使用 环境 本次我们自 ...

  4. api/UI自动化框架设计(pytest)

  5. UI自动化框架如何设计及搭建?

    目录 UI自动化框架 自动化原则: 如何减少自动化维护成本? UI自动化框架优化方案:(在不增加维护成本前提下) UI自动化脚本可分为3种: 已经实现自动化的模块可以不做手工测试了吗? UI自动化公式 ...

  6. WEB UI自动化测试框架搭建(一)_公用方法Utils

    本栏目内的所有项目使用的都是PyCharm 2020.1专业版,可以下载后自行在网上找教程破解. WEB UI自动化测试框架搭建(一)~(七)源代码:https://download.csdn.net ...

  7. Java接口自动化框架系列07:Web接口自动化测试框架设计思路

    1.Java web接口自动化框架 框架名称:Java+Maven+httpClients+TestNg+Allure (因本次只讲解java部分,未包括git和jenkins,如果是包括git和je ...

  8. 分布式 Web UI 自动化系统的设计与实现

    背景 很久以前基于Robotframework + flask + reactjs开发了一套 Web UI 自动化系统,用于网站自动化测试和日常巡检.但是随着其应用覆盖的范围越来越广,发现存在一些设计 ...

  9. 10个优秀的 Web UI库/框架 详细出处参考:http://www.jb51.net/web/22251.html

    点评:UI(User Interface)即用户界面,也称人机界面.是指用户和某些系统进行交互方法的集合,实现信息的内部形式与人类可以接受形式之间的转换.本文为WUI用户整理了10个优秀的 Web U ...

最新文章

  1. vs 设置调试路径为exe所在的路径
  2. linux sed给空文件首行插入_linux下批量修改文件后缀名以及合并多行
  3. java 内存排序_详细解析Java内存,处理器重排序,编译器重排序以及它对线程的影响...
  4. Java List 排序 :Lambda表达式sort排序
  5. oracle查看数据库是否恢复成功_记一次解决docker下oracle数据库故障事例
  6. 分享一个NHibernate的博客链接
  7. C语言:用二维字符数组的每行存储键盘输入的字符串,将这些字符串按字典顺序升序排序,输出排序后的结果。
  8. html 图层嵌套特点,ps图层有哪几种类型?
  9. 计算机指法标准,标准盲打指法练习
  10. C++实现走迷宫算法(1)
  11. Hotspot 对象引用Reference和Finalizer 源码解析
  12. .mht文件转换为html
  13. Linux MD5 programming in C Language
  14. ios12.3beta2_如何回滚到iOS 11(如果您使用的是iOS 12 Beta)
  15. 360快剪辑怎么使用 360快剪辑软件使用方法介绍
  16. 浏览器原理 39 # 页面性能工具:如何使用 Performance?
  17. Electron-vue开发桌面应用调用TSCLIB.dll(tsc标签打印机连接库)
  18. Nginx实战学习之负载均衡
  19. 有了这几个软件安全测试工具,编写安全测试报告再也不愁
  20. 如何提高自己的写作水平

热门文章

  1. 接口自动化测试--入门
  2. 02 Dask源码剖析-Dask的数据模型-Bag
  3. VBA宏实现Word论文自动排版
  4. Python小游戏 猜字游戏
  5. 光引发剂市场分析-发展趋势-主要企业
  6. Firewalld报:WARNING: AllowZoneDrifting is enabled
  7. 一个更加牛逼的科技媒体将如何崛起
  8. 集成swagger时出现failed to parse JSON/YAML response的问题
  9. ubuntu20.4安装谷歌输入法
  10. android自动画线,Android自定义View——扇形统计图