一、自动化测试框架

1.什么是自动化测试框架

简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境。自动化测试框架能够提供很多便利给用户高效完成一些事情,例如,结构清晰开发脚本,多种方式、平台执行脚本,良好的报告去跟踪脚本执行结果。

框架具有以下一些优点:

1)代码复用

2)最大覆盖率

3)很低成本维护

4)很少人工干预

5)简单报告输出

2.常见的测试框架分类

好多Selenium自动化测试开发人员是有QTP那边转过来的,所以,他们在早期设计的框架大致可分为以下几类:

1)基于模块的测试框架

2)基于库(Library)结构测试框架

3)数据驱动测试框架,和QTP很像

4)关键字驱动测试框架,也是QTP过来的

5)混合测试框,3 4和综合

6)行为驱动开发测试框架

这里我们不一一介绍这些框架,字面意思可以想象一些这些框架的背景和组件,本文只是对框架有一个基本了解。

3.框架基本组件

我们来思考下框架组成部分:

1)需要配置文件管理

2)业务逻辑代码和测试脚本分离

3)报告和日志文件输出

4)自定义的库的封装

5)管理、执行脚本方式

6)第三方插件引入

7)持续集成

解释:

我们需要一个配置文件去控制一些,环境信息,开关,配置文件可以是txt/xml/yaml/properties/ini,一般.properties使用较多在JAVA里,本文是Python系列,我可能会选择ini文件。

业务逻辑代码和测试脚本分离,不像我们刚开始学习Selenium那样,代码和脚本在一个类文件里演示。我们根本没有用到代码重构,复用。代码和用例文件分离后,更加清晰,去多人开发脚本,方便调试。

报告和日志文件输出,你执行了多少case,case结果如何,这都需要报告来展示,一般采用第三方插件来实现这个功能,好多报告格式是html,简单,明了的风格。日志输出也很重要,如果发生报错,脚本执行失败,通过日志快速定位发生问题位置。

用户自定义库,这个很好理解,我们很多功能需要重复调用,这样我们就写成一个公用方法,放到工具包下,每次方便调用,例如浏览器引擎类和basepage.py的封装。

管理和执行脚本的方式,例如Python中单元测试框架unittest使用率非常高。

第三方插件,有时候,我们一些功能,需要借助第三方插件,能够更好实现,例如AutoIT,来实现文件上传和下载。还有利用第三方报告插件生成基于html格式的测试报告。

持续集成,git,svn,ant,maven,jenkins,我们会把这整合到jenkins,达到持续集成,一键执行测试脚本。

根据以上的特点介绍,我大致用以下图来描述一下,一个简单的自动化测试框架,可能包含哪些组成部分。

框架的简单介绍就到这里,有些人把框架想得太复杂了,框架无非就是一些软件的集合,达到特定的目的。这里我们上图画出来的框架,就是一个简单的自动化测试框架,别笑,这确实是一个简单但又包含必要的组件的自动化测试框架设计实例,如果你学会了这个设计思路和思想,那么,你已经达到了自动化测试第二个阶段的水平:能够简单设计自动化测试框架和维护框架的能力。

二、简单介绍unittest单元测试框架

unittest是一个单元测试框架,是Python编程的单元测试框架。

unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是test,也就是一个测试用例。要了解unittest单元测试框架,先来了解以下几个重要的概念。

测试固件(test fixture)

一个测试固件包括两部分,执行测试代码之前的准备部分和测试结束之后的清扫代码。这两部分一般用函数setUp()和tearDown()表示。这里举例以下,例如要测试百度搜索selenium这个场景,我们的测试固件可以这样写,setUp()里写打开浏览器,浏览器最大化,和打开百度首页等脚本代码;在tearDown()里写结束搜索后,退出并关闭浏览器的代码。

测试用例(test case)

unittest中管理的最小单元是测试用例,一个测试用例,包括测试固件,和具体测试业务的函数或者方法。一个测试用例中,测试固件可以不写,但是至少有一个已test开头的函数。unittest会自动化识别test开头的函数是测试代码,如果你写的函数不是test开头,unittest是不会执行这个函数里面的脚本的,这个千万要记住,所有的测试函数都要test开头,记住是小写的哦。

测试套件 (test suite)

很简单,就是很多测试用例的集合,叫测试套件,一个测试套件可以随意管理多个测试用例。如果测试用例比作单个学生,测试套件就是好像是班级的概念。

测试执行器 (test runner)

test runner是一个用来执行加载测试用例,并执行用例,且提供测试输出的一个组建。test runner可以加载test case或者test suite进行执行测试任务。

我们举例来,练习一下test fixture和test case的使用,学习unittest的简单用法:

1. 新建一个testbaidu.py的文件

2. 导入unittest模块

3. 当前测试类继承unittest.TestCase,相当于当前利用unittest创建了一个test case,这个test case是能够被unittest直接识别。

4. 写setUP(),主要是打开浏览器和打开站点

5. 写一个test_search()用例写搜索的代码

6. 写tearDown(),主要是浏览器退出操作

相关脚本代码如下:

复制代码

# coding=utf-8

import time

import unittest

from selenium import webdriver

class BaiduSearch(unittest.TestCase):

def setUp(self):

"""

测试固件的setUp()的代码,主要是测试的前提准备工作

:return:

"""

self.driver = webdriver.Chrome()

self.driver.maximize_window()

self.driver.implicitly_wait(8)

self.driver.get("https://www.baidu.com")

def tearDown(self):

"""

测试结束后的操作,这里基本上都是关闭浏览器

:return:

"""

self.driver.quit()

def test_baidu_search(self):

"""

这里一定要test开头,把测试逻辑代码封装到一个test开头的方法里。

:return:

"""

self.driver.find_element_by_id('kw').send_keys('selenium')

time.sleep(1)

try:

assert 'selenium' in self.driver.title

print ('Test Pass.')

except Exception as e:

print ('Test Fail.', format(e))

if __name__ == '__main__':

unittest.main()

复制代码

解释:

最后结尾处的unittest.main(),添加这个是支持在cmd,里面,cd到这个脚本文件所在的目录,然后python 脚本名.py执行,如果不添加这一段,是无法执行cmd里面运行脚本的,在PyCharm中,不添加最后一段,也可以通过,右键 Run "unittest xxx",来达到执行效果。

三、什么是POM

POM,中文字母意思是,页面对象模型,POM是一种最近几年非常流行的自动化测试模型,或者思想,POM不是一个框架,就是一个解决问题的思想。采用POM的目的,是为了解决前端中UI变化频繁,从而造成测试自动化脚本维护的成本越来越大。下图,形象描述了POM的好处。

从上图看出,采取了POM设计思路和不采取的区别,左侧把测试代码和页面元素都写在一个类文件,如果需要更改页面,那么就要修改页面元素定位,从而要修改这个类中测试代码,这个看起来和混乱。右侧,采取POM后,主要的区别就是,把页面元素和业务逻辑和测试脚本分离出来到两个不同类文件。ClassA只写页面元素定位,和业务逻辑代码操作的封装,ClassB只写测试脚本,不关心如何元素定位,只写调用ClassA的代码去覆盖不同的测试场景。如果前端页面发生变化,只需要修改ClassA的元素定位,而不需要去修改ClassB中的测试脚本代码。

POM主要有以下优点:

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

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

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

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

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

6. 建议页面类和业务逻辑方法都给一个有意义的名称,方便他人快速编写脚本和维护脚本。

python代码架构_Python架构相关推荐

  1. python代码风格_Python编码风格,看这篇就够了

    如果有人问起 Python 程序员他们最喜欢 Python 哪一点,他们一定会提到 Python 的高可读性.确实,对于 Python 来说,其高可读性一直是 Python 这门语言设计的核心.一个不 ...

  2. python代码测试_Python入门学习系列——Python代码测试

    Python代码测试 对于编写的代码,可以使用unittest模块中的相关方法进行测试. 测试函数 首先定义一个简单的函数,该函数用来合并名称并返回. name_function.py: def ge ...

  3. python代码片段_Python 常用代码片段

    1.[代码][Python]代码 1.生成随机数 import random #这个是注释,引入模块 rnd = random.randint(1,500)#生成1-500之间的随机数 2.读文件 f ...

  4. google python代码规范_Python代码这样写才规范优雅! (二)

    前文传送门:Python代码这样写才规范优雅! (一)参考:https://www.python.org/dev/peps/pep-0008/Python PEP8编码规范的内容如下: 1. Intr ...

  5. c#代码转python代码工具_Python至C#代码转换

    我正在尝试将下面的python代码行转换为C#: encoded_c = chr(abs(ord(string[i]) - ord(key_c) % 256)) 这是我在C#中得到的: char en ...

  6. 简述python程序结构_python架构的概念讲解

    Python就是这样一门受到全世界各地开源社区支持的语言,Python可以用来开发各种小工具软件.web应用.科学计算.数据分析等等. 本篇文章是关于Python构架的讲解,希望对于正在学习Pytho ...

  7. python代码书写_Python代码的优雅写法,让代码更简洁

    我们都知道,Python 的设计哲学是「优雅」.「明确」.「简单」.这也许很多人选择 Python 的原因.但是我收到有些伙伴反馈,他写的 Python 并不优雅,甚至很臃肿,那可能是你的姿势不对哦! ...

  8. word2vec python 代码实现_python gensim使用word2vec词向量处理中文语料的方法

    word2vec介绍 word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间的距离. 它将term转换成向量形式,可以把对文本内容的处理简化为向量空间中的向量运算,计算出 ...

  9. 有趣的python代码实例_Python之路:200个Python有趣的小例子一网打尽

    概述 博主最近在学习python,看完了一整套学习视频,然后呃呃呃,还是用不太流畅.碰巧在全球最大的 同性交友论坛GayHub(呸!是开源代码托管平台Github)上面发现了一个项目,该项目列举了20 ...

最新文章

  1. python爬虫中三种数据解析方式
  2. python大作业思路_python大作业
  3. sqlmap mysql案例_sqlmap简单mysql注入演示附截图
  4. oracle性能分析
  5. 在MFC框架下使用osg报内存泄露的解决办法
  6. Linux实时查看进程命令top笔记
  7. 【ArcGIS遇上Python】ArcGIS Python按照指定字段批量筛选不同类型的图斑(以土地利用数据为例)
  8. Chrome浏览器导入证书(谷歌浏览器导入burpsuite证书)
  9. iOS 为自定义返回按钮的页面添加右滑返回
  10. Deal with relational data using libFM with blocks
  11. 一分钟了解阿里云产品:企业级分布式应用服务EDAS五大热点技术问题分析
  12. Material Design(九)--CoordinatorLayout和App Bar
  13. js 小数自动补0_JS自定义保留小数,并支持补零(四舍五入)
  14. 炒冷饭系列:设计模式 工厂模式
  15. CSS3 column属性族firefox浏览器下的问题
  16. 推荐两个有意思的公号
  17. ZOJ 1111 Poker Hands
  18. QCC3040---peer UI module
  19. 广和通亮相世界宽带论坛2022,构建5G FWA全场景无线宽带体验
  20. python图片自动上色_自己实现黑白图片自动上色AI(一)

热门文章

  1. machine learning (6)---how to choose features, polynomial regression
  2. xp上vs2010+IE8无法调试脚本
  3. java动态代理上是否能再进行一层代理
  4. centos 升级mysql_CentOS 7下升级MySQL5.7.23的一个坑
  5. python写一个类方法_Python基础|类方法的强制重写与禁止重写
  6. 计算硼原子基态能级B---动能和势能
  7. linux7开启ipmi,通过IPMI安装CentOS7教程
  8. html post后404,为什么在vue-cli脚手架下启动的服务器POST返回404呢?WebStorm启动没有问题?...
  9. 【UWB】Savitzky Golay filter SG滤波器原理讲解
  10. 【控制】《多无人机协同控制技术》周伟老师-第3章-面向协同控制的无人机单机控制