技术文章

Python接口自动化——自动化测试分层(1)

从本期开始,我们会围绕“Python接口自动化”做专题连载,今天开始做第一讲——自动化测试分层。

 

目录:

1. 1.1.1 单元自动化测试

2. 1.1.2 接口自动化测试

3. 1.1.3 UI自动化测试

 

Python接口自动化

 

现在流行的是金字塔状的分层测试,将测试从上到下分为UI测试层、接口测试层、单元测试层三层。

 

在传统的UI自动化的基础之上更多实施基于代码的低级别自动化测试,而不仅仅通过用户界面进行端到端的测试。

 

按照测试方法中黑盒、白盒、灰盒的观点来看:

单纯的UI自动化-灰盒测试不能达到很好的需求覆盖,还需要实施接口自动化-灰盒测试,和单元自动化-白盒测试。

 

并且由于需求端的频繁更改,在接口实施自动化的投入相对最少,实施最稳定,具有很高的收益。

 

1.1.1 单元自动化测试

 

单元/模块自动化是直接对代码逻辑进行自动化测试,大多数由开发实施,少部分公司会由白盒测试实施。

 

常用的工具有Java的Junit、testNG,Python的unittest,pytest等。

 

Python接口自动化

 

驱动代码,桩代码和Mock代码:

 

●驱动代码是用来调用被测函数的,而桩代码和Mock代码是用来代替被测函数调用的真实代码的

驱动代码、桩代码和Mock代码三者的逻辑关系。

 

●驱动代码(Driver)指调用被测函数的代码,在单元测试过程中,驱动模块通常包括调用被测函数线的数据准备、调用被测函数以及验证相关结果三个步骤。

 

●代码桩(Stub)是用来代替真代码的临时代码。比如,某个函数A的内部实现中调用了一个尚未实现的函数B,为了对函数A的逻辑进行测试,那么就需要模拟一个函数B,这个模拟的函数B的实现就是所谓的桩代码。

 

某些情况下当项目结构层次较多时,还可以细分为:

 

1. 单元测试

2. 模块测试

 

单元测试:对程序最小单元的测试,一般是对类、对象、方法、函数的测试;

 

模块测试:对具有明显功能特征的代码进行的测试,认为单元测试只涉及这层测试的一部分。

 

1.1.2 接口自动化测试

 

1.1.2.1 接口测试的分类

 

按照系统的调用方式不同,接口可以分为三种:

1. 系统和系统之间的接口

2. 下层服务对上层服务的接口

3. 系统内部,服务和服务之间的接口

 

系统和系统之间的接口

 

Python接口自动化

 

可以是公司内部不同系统之间调用的接口,也可以是不同公司不同系统之间的接口。

 

例如:微信、微博提供的第三方登录接口,支付宝提供的第三方支付接口。

 

下层服务对上层服务的接口

 

Python接口自动化

 

应用层可以认为是UI层功能,对于web就是登录、注册、查询、删除等。

 

Service层,可以理解为服务器提供数据的处理数据库,主要用来存放数据,例如用户信息、商品信息等。

 

各层之间的交互就是通过接口,应用层和Service主要通过HTTP接口,Service层和数据库层通过

DAO(Data Access Object)数据库访问,例如pymysql。

 

系统内部,服务和服务之间的接口:

 

Python接口自动化

 

系统内部,服务与服务之间的调用,大多指程序之间的调用。本质是程序开发的函数或方法,提供入参与返回值。

 

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端自动化工具

 

Python接口自动化

 

selenium是目前最主流的web自动化工具,几乎完美支持所有主流浏览器和主流编程语言,轻量并开源。

 

App自动化工具

 

Python接口自动化

 

目前最主流的是Appium,支持android和ios自动化,开源,支持多种开发语言。