Python接口自动化测试
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 什么是接口

关于什么是接口、什么是API,如果读者去网上查询,可以找到的解释有很多,而且绝大多数都是很标准的官方解释,例如:

API(Application Programming Interface)即应用程序接口。你可以认为API是一个软件组件,或是一个Web服务与外界进行交互的接口。这里的接口可以和API画等号。

作为初学者,或者对接口了解很少的读者,这个解释其实并不好理解。那如何才能给读者解释清楚接口呢?如何由表及里地让读者理解接口的运转机制呢?下面笔者结合多年的接口测试经验,用逐层叠加的方式来解释。

1.从功能层面来说

从功能层面来说,可以将接口简单理解为一个黑盒子。其上游负责输入参数,下游负责输出参数,类似于平时的黑盒测试对象,如图2-1-1所示。

图2-1-1 接口理解1

这里以一个例子来说明:

(1)在Chrome浏览器中输入:https://www.v2ex.com/api/nodes/show.json?name=Python,按“Enter”键之后能看到如图2-1-2所示的数据。

(2)下面来分析这个过程。

在输入URL地址并按Enter键后,页面实际发送了一次接口请求。具体的请求是:接口地址(https://www.v2ex.com/api/nodes/show.json?)+请求参数及其值(name=python)。后面这个“name=python”就是输入数据;返回的数据就是浏览器展示的一个JSON格式数据。至于这个数据是怎么来的,目前还是看不到的。所以这就像黑盒子一样,输入不同的数据会得到不同的返回结果。这里读者也可以试试其他的参数,看看返回的数据内容是什么样子的,比如:

https://www.v2ex.com/api/nodes/show.json?name=java

https://www.v2ex.com/api/nodes/show.json?name=测试

图2-1-2 接口返回数据

名词解释

(1)JSON(JavaScript Object Notation):是一种轻量级的数据交换格式,独立于语言和平台。JSON解释器和JSON库支持不同的编程语言,是以{}括起来的键值对数据。

JSON数据格式如下:

{"name":"Michael","age":24}

在这个例子中,键是字符串形式,值可以取任意类型。name是键名,Michael是键对应的值。JSON是可以嵌套的,比如{"name":"Michael","birthday":{"month":8,"day":26}}。

(2)JSON格式的在线检查工具:

https://www.beJSON.com/

https://www.beJSON.com/JSONviewernew/

通过上面的在线检查工具,能检查JSON格式的正确性。

2.从数据流层面来说

从数据流层面来说,可以将接口理解为连接前端(Web页面、APP等)和数据库(Database)等后端的纽带,用于在二者之间传递数据、处理数据,如图2-1-3所示。

图2-1-3 接口理解2

在现在主流的框架结构中,后端一般都使用数据库来存储数据,而前端不能直接去数据库中操作数据,一方面不安全,另一方面效率低。要完成数据的交互,必然要有中间的纽带,那就是接口。所以,从这个层面来说,接口主要负责前端页面和后端数据库之间的数据传输和处理。

当下大部分的互联网产品都采用前/后端分离的方式,即前端的表示层负责展示数据及其样式,后端的数据层负责数据处理和存储,如图2-1-4所示,它们之间的业务逻辑层负责处理业务逻辑,其中最重要的就是接口。所以说,接口的健壮性、稳定性、抗压性直接决定了这个互联网产品的成败。前端页面通过调用接口传递约定的参数;接口收到请求后,会按照业务逻辑在后端进行处理,并将处理结果和需要的数据返回给前端;前端解析数据并展示在页面。这就完成了广义上的一次前/后端交互。

图2-1-4 三层结构

名词解释:

(1)前端(前台):可以直观看到和使用的内容都可被归为前端。比如,Web页面上一些可见的、可操作的界面。

(2)后端:不能被用户可见的内容。其实,后端是一个编程上的概念,具体是指业务逻辑和数据的处理。

(3)后台:通俗意义上是指管理系统,主要用来增加、删除、修改、查询数据,实际上是内部人士使用的一个Web系统。

3.从编程层面来说

从编程层面来说,可以将接口理解为业务逻辑处理方法的外在表现形式,如图2-1-5所示。它可以是一个类下面的方法,也可以是一个函数。

图2-1-5 接口理解3

从数据流层面来理解,接口会按照“业务逻辑”处理数据。那么业务逻辑在哪里呢?很显然,是在程序代码的函数或方法中。函数或方法按照逻辑返回不同的数据,这便是接口在不同参数下的不同返回信息。所以,从“白盒操作”角度来看,接口测试是直接对函数或方法的代码层进行测试。

以上从三个层面解释了什么是接口。读者没必要把接口想得过于复杂,认为接口和接口测试多么高深。实际上,接口和日常的页面测试没有本质的区别,只是在外在表现形式和测试方法上略微有差别。读者从以上三个层面可以窥探出接口测试的一般思路,后面还会逐步讲解,请耐心往下看。