以前的系列博客,陆续学习整理了自动化测试环境的搭建、IE和Chrome浏览器驱动的配置、selenium-webdriver模块封装的元素定位以及控制浏览器、处理警示框、鼠标键盘等方法的使用,这些内容还须要后续多加练习掌握,以达到灵活运用的程度。but,这仅仅只是开始,说明我们可以使用selenium框架下的webdriver写出一个个测试用例脚本,也仅仅写给本身看看,若是须要写100条、1000条测试脚本,并可以高效快速的编写完成并批量执行,且要看到完整的执行结果,失败多少,成功多少,等等诸多问题须要一个完善的解决问题的思想。说白了就是如何高效的组织测试脚本编写和后续的维护,并输出咱们自动化测试的最重要的一个部分:测试报告,所以解决上述问题的思想就是须要写一个适用于测试团队的自动化测试框架,并在框架下持续的进行脚本开发和维护的过程。那么,何为框架?来来来,喝杯咖啡,提提神先~~~前端
所谓的框架其实就是一个解决问题的思惟,前言中描述的诸多问题若是获得解决,天然而然这种获得良好解决的东西它就能够称之为一个框架,只是这个框架用来解决如何组织开展自动化测试。一个典型的自动化测试框架通常包括测试用例集模块、测试执行控制模块、测试报告生成模块、日志记录模块、发送邮件模块、测试截图或者断言验证等模块,这些模块之间不是相互孤立的,而是相辅相成的存在。下图为基本的自动化框架的基本单元或模块:java
下面简要说明每一个模块的做用:web
测试用例模块包括具体的测试用例脚本集、测试数据的管理以及公共函数库编程
2.Test Run Control设计模式
测试运行控制模块是自动化用例执行组织模块,主要负责以什么方式执行测试用例脚本,以及什么时间执行、执行多少次、执行哪些用例等浏览器
3.Test Report Module框架
测试报告生成模块主要负责测试执行的结果集生成报表,报表通常以HTML格式体现,能够知道执行了多少条用例,成功数、失败数等信息函数
4.Logging Module工具
日志模块主要用来记录脚本执行的状况,便于更加高效的查看脚本执行的状况以及位置,和脚本执行失败的状况单元测试
5.Send Email Module
发送邮件模块主要实现测试报告以邮件的形式发送
6.Test image
测试用例执行后预期结果的验证,通常以截图或者日志以及测试断言的形式来判断用例是否符合预期结果
Python3.6:因为Python2版本要逐步退出历史舞台,故选用主流的Python3版本,后续的测试脚本均基于Python3编写
PyCharm:Python IDLE开发工具,便于快速建立项目和开发脚本,以及它相应的代码错误检测和代码调试机制,防止代码语法错误,从而构建层次清晰的项目和代码结构。
Selenium2:使用Selenium自动化测试框架,主要用到Selenium Webdriver模块,能模拟提供浏览器、页面元素定位、元素操做、鼠标键盘等相关的操做和方法
Python Unittest:Python的单元测试框架模块,在此框架下编写具体的业务测试用例脚本,另外此框架能组织测试用例集的执行和测试场景恢复
Python相关的标准库:time模块主要提供对时间的相关操做, os.path 模块主要提供对文件路径相关的操做,logging模块主要提供对日志相关的设置 ,smtplib 模块主要负责发送邮件等
Python 相关的第三方模块库:HTMLTestRunner 模块主要用于生成HTML格式的可视化测试报告,xlrd模块是读取excel文件数据的模块,xlwt模块是向excel文件中写入数据的模块
其中Python单元测试框架模块以及标准库和第三方库的使用,后续的博客会陆续总结出来
面向对象的编程---object oriented programming,简称:OOP,是一种编程的思想。OOP把对象当成一个程序的基本单元,一个对象包含了数据和操做数据的函数或者方法。面向对象能极大的提升了编程的效率,使其编程的重用性增高。所以既然我们是写测试脚本,固然但愿可以快速开发并易于维护,写出层次清晰的代码。就好比:一个登陆功能的脚本,我们能够写成一个公共的函数,后续其余的脚本用例须要使用登陆这块的,直接调用便可,这里就是一个简单的封装啦!Python从诞生开始就是一基于面向对象来设计的语言,相似于java面向对象的思想。那么Python面向对象都有哪些基本概念:
一、继承(inheritance)子项继承父项的某些功能,在程序中表现某种联系
二、封装(encapsulation)把须要重用的函数或者功能封装,方便其余程序直接调用
三、类:对具备相同数据或者方法的一组对象的集合
四、对象:对象是一个类的具体事例
五、实例化:是一个对象实例化的实现,就是一个具体的对象
六、实例属性:一个对象就是一组属性的集合
七、实例方法:全部存取或者更新对象某个实例一条或者多条属性函数的集合。
八、类属性:属于一个类中全部对象的属性,
九、类方法:在一个类中定义的方法
这里Python面向对象的话题较大,这里就再也不深刻探讨,我们后续在实际的测试框架模块的实现过程当中以一个个实例进行说明,反正Python面向对象的思想必定要深刻骨髓,写多了就天然知道其好处。
POM是很是流行的自动化测试模型,它是一种测试脚本开发思想,采用POM的目的是为了解决软件前端元素或者UI界面频繁变化,从而形成自动化测试脚本维护和更改困难,其基本理念是将软件各个页面抽象成一个单独的页面类,类中封装页面元素的定位和操做方法,这种页面模式是页面与测试用例之间的桥梁。以下图所示:
采起POM后,主要的区别就是,把页面元素和业务逻辑和测试脚本分离出来到两个不一样类文件。ClassA只写页面元素定位,和业务逻辑代码操做的封装,ClassB只写测试脚本,不关心如何定位元素,而后继承ClassA中的方法去覆盖不一样的测试场景。若是前端页面发生变化,只须要修改ClassA的元素定位,而不须要去修改ClassB中的测试脚本代码。下图为对比非POM模式下的状况:
POM主要有如下优势:
1. 把web ui对象从测试脚本分离,业务代码和测试脚本分离。
2. 每个页面对应一个页面类,页面的元素写到这个页面类中。
3. 页面类主要包括该页面的元素定位,和这些元素相关的业务操做代码封装的方法。
4. 代码复用,从而减小测试脚本代码量。
5. 层次清晰,同时支持多个编写自动化脚本开发,例如每一个人写哪几个页面,不影响他人。
总结:后续自动化测试框架各个模块单元的实现以及后续的测试脚本的开发编写,都会以Python面向对象和POM的设计模式来开展