前言

之前的系列博客,陆续学习整理了自动化测试环境的搭建、IE和Chrome浏览器驱动的配置、selenium-webdriver模块封装的元素定位以及控制浏览器、处理警示框、鼠标键盘等方法的使用,这些内容还需要后续多加练习掌握,以达到灵活运用的程度。but,这仅仅只是开始,说明咱们能够使用selenium框架下的webdriver写出一个个测试用例脚本,也仅仅写给自己看看,如果需要写100条、1000条测试脚本,并能够高效快速的编写完成并批量执行,且要看到完整的执行结果,失败多少,成功多少,等等诸多问题需要一个完善的解决问题的思想。说白了就是如何高效的组织测试脚本编写和后续的维护,并输出我们自动化测试的最重要的一个部分:测试报告,因此解决上述问题的思想就是需要写一个适用于测试团队的自动化测试框架,并在框架下持续的进行脚本开发和维护的过程。那么,何为框架?来来来,喝杯咖啡,提提神先~~~

1  自动化测试框架概述

所谓的框架其实就是一个解决问题的思维,前言中描述的诸多问题如果得到解决,自然而然这种得到良好解决的东西它就可以称之为一个框架,只是这个框架用来解决如何组织开展自动化测试。一个典型的自动化测试框架一般包括测试用例集模块、测试执行控制模块、测试报告生成模块、日志记录模块、发送邮件模块、测试截图或者断言验证等模块,这些模块之间不是相互孤立的,而是相辅相成的存在。下图为基本的自动化框架的基本单元或模块:

下面简要说明每个模块的作用:

  1. Test Case Module

测试用例模块包括具体的测试用例脚本集、测试数据的管理以及公共函数库

2.Test Run Control

测试运行控制模块是自动化用例执行组织模块,主要负责以什么方式执行测试用例脚本,以及什么时间执行、执行多少次、执行哪些用例等

3.Test Report Module

测试报告生成模块主要负责测试执行的结果集生成报表,报表一般以HTML格式体现,可以知道执行了多少条用例,成功数、失败数等信息

4.Logging Module

日志模块主要用来记录脚本执行的情况,便于更加高效的查看脚本执行的情况以及位置,和脚本执行失败的情况

5.Send Email Module

发送邮件模块主要实现测试报告以邮件的形式发送

6.Test image

测试用例执行后预期结果的验证,一般以截图或者日志以及测试断言的形式来判断用例是否符合预期结果

2  自动化测试框架需要的环境

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单元测试框架模块以及标准库和第三方库的使用,后续的博客会陆续总结出来

3  自动化测试框架设计思想:Python面向对象

面向对象的编程---object oriented programming,简称:OOP,是一种编程的思想。OOP把对象当成一个程序的基本单元,一个对象包含了数据和操作数据的函数或者方法。面向对象能极大的提高了编程的效率,使其编程的重用性增高。因此既然咱们是写测试脚本,当然希望能够快速开发并易于维护,写出层次清晰的代码。就比如:一个登录功能的脚本,咱们可以写成一个公共的函数,后续其他的脚本用例需要使用登录这块的,直接调用即可,这里就是一个简单的封装啦!Python从诞生开始就是一基于面向对象来设计的语言,类似于java面向对象的思想。那么Python面向对象都有哪些基本概念:

1、继承(inheritance)子项继承父项的某些功能,在程序中表现某种联系

  2、封装(encapsulation)把需要重用的函数或者功能封装,方便其他程序直接调用

  3、类:对具有相同数据或者方法的一组对象的集合

  4、对象:对象是一个类的具体事例

  5、实例化:是一个对象实例化的实现,就是一个具体的对象

  6、实例属性:一个对象就是一组属性的集合

  7、实例方法:所有存取或者更新对象某个实例一条或者多条属性函数的集合。

  8、类属性:属于一个类中所有对象的属性,

  9、类方法:在一个类中定义的方法

这里Python面向对象的话题较大,这里就不再深入探讨,咱们后续在实际的测试框架模块的实现过程中以一个个实例进行说明,反正Python面向对象的思想一定要深入骨髓,写多了就自然知道其好处。

4  自动化测试框架设计思想:POM(Page Object Model)页面对象模型

POM是非常流行的自动化测试模型,它是一种测试脚本开发思想,采用POM的目的是为了解决软件前端元素或者UI界面频繁变化,从而造成自动化测试脚本维护和更改困难,其基本理念是将软件各个页面抽象成一个单独的页面类,类中封装页面元素的定位和操作方法,这种页面模式是页面与测试用例之间的桥梁。如下图所示:

采取POM后,主要的区别就是,把页面元素和业务逻辑和测试脚本分离出来到两个不同类文件。ClassA只写页面元素定位,和业务逻辑代码操作的封装,ClassB只写测试脚本,不关心如何定位元素,然后继承ClassA中的方法去覆盖不同的测试场景。如果前端页面发生变化,只需要修改ClassA的元素定位,而不需要去修改ClassB中的测试脚本代码。下图为对比非POM模式下的情况:

POM主要有以下优点:

1. 把web ui对象从测试脚本分离,业务代码和测试脚本分离。

2. 每一个页面对应一个页面类,页面的元素写到这个页面类中。

3. 页面类主要包括该页面的元素定位,和这些元素相关的业务操作代码封装的方法。

4. 代码复用,从而减少测试脚本代码量。

5. 层次清晰,同时支持多个编写自动化脚本开发,例如每个人写哪几个页面,不影响他人。

总结:后续自动化测试框架各个模块单元的实现以及后续的测试脚本的开发编写,都会以Python面向对象和POM的设计模式来开展

Python3+Selenium2完整的自动化测试实现之旅(五):自动化测试框架、Python面向对象以及POM设计模型简介的更多相关文章

  1. Python3+Selenium2完整的自动化测试实现之旅(七):完整的轻量级自动化框架实现

    一.前言 前面系列Python3+Selenium2自动化系列博文,陆陆续续总结了自动化环境最基础环境的搭建.IE和Chrome浏览器驱动配置.selenium下的webdriver模块提供的元素定位 ...

  2. Python3+Selenium2完整的自动化测试实现之旅(一):自动化测试环境搭建

    1     环境搭建准备 (1)    下载Python3版本的安装包,直接官网下载即可:Python官网:https://www.python.org/ (2)    下载Python的基础工具包p ...

  3. Python3+Selenium2完整的自动化测试实现之旅(六):Python单元测试模块Unittest运用

    一.Unittest单元测试框架简介 Unitest是Python下的一个单元测试模块,是Python标准库模块之一,安装完Python后就可以直接import该模块,能在单元测试下编写具体的测试用例 ...

  4. Python3+Selenium2完整的自动化测试实现之旅(四):Selenium-webdriver操作浏览器、Cookie、鼠标键盘、警示框、设置等待时间、多窗口切换

    本篇学习总结webdriver模块操作浏览器.Cookie.鼠标键盘.警示框.设置等待时间.多窗口切换等方法的使用 1    浏览器控制 Selenium-webdriverAPI提供了对页面元素定位 ...

  5. Python3+Selenium2完整的自动化测试实现之旅(三):Selenium-webdriver提供的元素定位方法

    本篇以实例介绍selenium下的webdriver模块提供的定位页面元素(也可以称为对象)的方法和使用技巧,在此注意:在做WEB自动化测试前,需要对前端相关的技术有所了解,如HTML.XML.Xpa ...

  6. Python3+Selenium2完整的自动化测试实现之旅(二):IE和Chrome浏览器驱动配置

    上一篇写了自动化测试需要的最基础环境配置,地址:https://www.cnblogs.com/tdp0108/p/10412073.html 当前市面上很多公司开发的应用软件都是BS架构,即基于浏览 ...

  7. Anaconda在Python3和Python2之间切换,Conda命令,anaconda中python的升级和降级

    当在pycharm IDE中指定不同的Python版本时,设置方法 File->Setting->Project:XXXX->Project Interpreter    选择不同位 ...

  8. 手机自动化测试:搭建appium手机自动化测试开发环境

    手机自动化测试:搭建appium手机自动化测试开发环境   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大 ...

  9. 移动端自动化测试Appium 从入门到项目实战Python版☝☝☝

    移动端自动化测试Appium 从入门到项目实战Python版 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌)  说到APP自动化测试,Appium可是说是非常流 ...

随机推荐

  1. 【安全性测试】利用反编译查看对应activity的方法采用hook技术绑定劫持_入门

    本次主要为了研究手机端的安全性而写的一篇文章,在基于自己对手机安全性的研究下,想到了这些工具之间的结合,当然这也算是第一次对手机安全研究勇敢地踏出一步,也不知道是否成功,还是准备撞南墙撞到底吧! 使用 ...

  2. 181102 Windows下安装kivy(用python写APP)

    了解到Instgram,知乎等APP是用python写的.我也决定学习用python写APP.这里我们需要安装kivy. 环境:win7,python3.6 安装方式:DOS命令窗口 注意事项:目前不 ...

  3. 《SpringMVC从入门到放肆》十、SpringMVC注解式开发(复杂参数接收)

    上一篇我们学习了简单的参数接收方式,以及对编码的统一处理.今天我们来接收对象参数. 一.接收对象参数 jsp页面: <%@ page language="java" impo ...

  4. python爬虫第五天

            cookie           我们访问网页是通过http协议进行的,而http协议是一个无状态协议(无法维持会话之间的状态),比如我们登录一个网站成功后访问另一个网页,那么登录状态 ...

  5. Java spring boot 2.0连接mysql异常:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone

    解决办法:application.yml提示信息表明数据库驱动com.mysql.jdbc.Driver'已经被弃用了.应当使用新的驱动com.mysql.cj.jdbc.Driver' com.my ...

  6. 为bootstrap+angularJs打造的表格代码生成器

    private void btnCreateCode_Click(object sender, EventArgs e) { string objName = txtObjName.Text; if ...

  7. Flutter

    2015年, Google 内部开始测试另一种高性能的编程方式,那就 Google 的 Sky 项目.Sky 项目使用网页开发语言Dart开发原生Android 应用,强调应用的运行速度和与 Web ...

  8. TypeError: parse() got an unexpected keyword argument 'transport_encoding'

    错误: TypeError: parse() got an unexpected keyword argument 'transport_encoding'You are using pip vers ...

  9. FCC(ES6写法)Pairwise

    举个例子:有一个能力数组[7,9,11,13,15],按照最佳组合值为20来计算,只有7+13和9+11两种组合.而7在数组的索引为0,13在数组的索引为3,9在数组的索引为1,11在数组的索引为2. ...

  10. 1.9 From Native to HTML5

    The mobile technology has become more and more mature, and it has evolved from a ridiculous situatio ...