从本期开始,我们会围绕“Python接口自动化”做专题连载,今天开始做第一讲——自动化测试分层。
目录:
1. 1.1.1 单元自动化测试
2. 1.1.2 接口自动化测试
3. 1.1.3 UI自动化测试
现在流行的是金字塔状的分层测试,将测试从上到下分为UI测试层、接口测试层、单元测试层三层。
在传统的UI自动化的基础之上更多实施基于代码的低级别自动化测试,而不仅仅通过用户界面进行端到端的测试。
按照测试方法中黑盒、白盒、灰盒的观点来看:
单纯的UI自动化-灰盒测试不能达到很好的需求覆盖,还需要实施接口自动化-灰盒测试,和单元自动化-白盒测试。
并且由于需求端的频繁更改,在接口实施自动化的投入相对最少,实施最稳定,具有很高的收益。
1.1.1 单元自动化测试
单元/模块自动化是直接对代码逻辑进行自动化测试,大多数由开发实施,少部分公司会由白盒测试实施。
常用的工具有Java的Junit、testNG,Python的unittest,pytest等。
驱动代码,桩代码和Mock代码:
●驱动代码是用来调用被测函数的,而桩代码和Mock代码是用来代替被测函数调用的真实代码的
驱动代码、桩代码和Mock代码三者的逻辑关系。
●驱动代码(Driver)指调用被测函数的代码,在单元测试过程中,驱动模块通常包括调用被测函数线的数据准备、调用被测函数以及验证相关结果三个步骤。
●代码桩(Stub)是用来代替真代码的临时代码。比如,某个函数A的内部实现中调用了一个尚未实现的函数B,为了对函数A的逻辑进行测试,那么就需要模拟一个函数B,这个模拟的函数B的实现就是所谓的桩代码。
某些情况下当项目结构层次较多时,还可以细分为:
1. 单元测试
2. 模块测试
单元测试:对程序最小单元的测试,一般是对类、对象、方法、函数的测试;
模块测试:对具有明显功能特征的代码进行的测试,认为单元测试只涉及这层测试的一部分。
1.1.2 接口自动化测试
1.1.2.1 接口测试的分类
按照系统的调用方式不同,接口可以分为三种:
1. 系统和系统之间的接口
2. 下层服务对上层服务的接口
3. 系统内部,服务和服务之间的接口
系统和系统之间的接口
可以是公司内部不同系统之间调用的接口,也可以是不同公司不同系统之间的接口。
例如:微信、微博提供的第三方登录接口,支付宝提供的第三方支付接口。
下层服务对上层服务的接口
应用层可以认为是UI层功能,对于web就是登录、注册、查询、删除等。
Service层,可以理解为服务器提供数据的处理数据库,主要用来存放数据,例如用户信息、商品信息等。
各层之间的交互就是通过接口,应用层和Service主要通过HTTP接口,Service层和数据库层通过
DAO(Data Access Object)数据库访问,例如pymysql。
系统内部,服务和服务之间的接口:
系统内部,服务与服务之间的调用,大多指程序之间的调用。本质是程序开发的函数或方法,提供入参与返回值。
1.1.2.2 接口测试的意义
●更早的发现问题
●缩短产品研发周期
●发现更底层的问题
接口测试比UI测试更简单全面覆盖底层的代码逻辑,UI层被称为弱验证,容易被绕过,很难发现后端的一些异常情况处理能力,而接口测试很容易验证。
1.1.3 UI自动化测试
UI自动化是目前做的最多的自动化,是自动化测试中最接近用户侧的测试,尝试将黑盒的功能和UI测试用程序或功能来执行。
UI层的自动化工具一般按照平台来分:有windows、Linux、Android、IOS、Web、微信小程序等。
目前常用的UI自动化的工具大致可以按照平台的不同分为:
1. 桌面自动化工具
2. web端自动化工具
3. App自动化工具
桌面自动化工具
桌面自动化目前实施的相对较少,工具很多,但是几乎没有特别主流的工具常用的有:AutoIt3,pywin32 ,Microsoft UI Automation。
Web端自动化工具
selenium是目前最主流的web自动化工具,几乎完美支持所有主流浏览器和主流编程语言,轻量并开源。
App自动化工具
目前最主流的是Appium,支持android和ios自动化,开源,支持多种开发语言。