# 1.为什么要做接口测试




很多同学反馈现在面试的时候都会问到为什么要做接口测试以及如何做接口测试的问题，那么我们就稍微来科普一下。

**本文讨论的接口均是服务级的接口，不是代码级**

### 接口是什么

在讨论为什么要做接口测试之前，我们可以先稍微了解一下接口是什么？

接口可以很不准确的理解成是与资源打交道，这个资源可能是本系统的，也可能是其他系统的。

举个例子，假如我们在开发1个bug管理系统，该系统需要拿到公司的所有开发和测试人员的信息，这样开发和测试人员不用注册都可以登录进去了，这应该很好理解。

那么这些人员的信息储存在哪里呢？一般存储在hr系统里。现在的需求更加明确了，我们要到hr系统中去拿到人员信息，获取hr系统中的人员资源。

怎么拿呢？很多种方式，可以直接把hr系统的数据库拷贝一份放到bug管理系统里，不过这样不好，因为数据的同步会有点麻烦；还可以直接连hr系统的数据库去查，这样也不太好，这样我们就需要了解hr系统的数据存储结构和逻辑，一旦hr系统的数据字段发生改变，bug管理系统也要去该，以便同步。

比较好的做法是，hr系统暴露一些接口，通过这些接口去获取人员信息资源，这样bug系统就不需要关心hr系统的数据存储实现了。

这些接口可能是这样的：

* 登录的接口，提供人员的用户名和密码，去hr系统中判断该人员是否存在，如果存在验证用户名和密码，如果验证通过就返回1个token，该token就是这个人员的通行证，通过token可以登录到bug管理系统中去；
* 获取人员信息的接口，返回该人员的职位：测试还是开发，以及用户名，昵称等信息；

综上：接口可以理解成是不同系统或模块之间资源交流方式；

### 接口测试实际上是黑盒测试

作为黑盒测试，基本的测试思路是通过输入和输出判断被测系统或者对象的逻辑。

获取人员的信息，我需要把人员的用户名传给hr系统接口，这样hr系统的接口会返回给我用户的一些更加具体的信息。这里的输入是用户名，输出是用户的详细信息。

### 为什么要做接口测试

既然是接口获取和操作资源的方式，而大部分系统和产品中，资源一般都是产品的核心，比如微信核心资源就是通讯录关系链和聊天记录等，因此资源是必测的。

另外接口中大部分的内容是数据，通过数据的对比我们能推测到系统和产品的逻辑，测接口就是测逻辑。

最后接口中的返回相对单纯，不像web页面，html代码中有太多ui的东西，ui最不稳定，变化太快，接口相对稳定一点点，但是里面的干扰信息更少，断言相对容易很多。


### 接口测试用例怎么写

还是3a原则，这个我以前的回答里有。


* A: arrange 初始化测试数据，就是造数据，这里的数据有我们输入的数据，也有目标接口所涉及的资源，比如hr系统中的用户信息，我们必须先有几条人员的详细信息才能去测获取人员信息的接口（当然只是正常的流程，我们有时候还需要清掉数据以便测试资源为空的情况）；

* A: act 调用接口，传入输入数据；

* A: assert 断言， 对返回的资源信息进行断言，比如获取用户信息的接口返回了用户信息之后，我们要判断返回的用户是不是我们想要的那个用户，我们获取的是李雷的信息，接口如果返回韩梅梅，那么接口的逻辑就是不对的；

### 接口测试笔试题

[测试教程网接口测试笔试题](http://www.testclass.net/interview/interface/)

### 有哪些常见的接口

* 携程订飞机票，飞机票的信息一般都是通过各大航空公司的接口拿到的；

* 淘宝的物流信息，一般淘宝的物流信息都是通过各个物流公司的接口拿到的；

* 第三方微博客户端，个人用户的微博等信息都是通过微博的接口拿到的；

### 常见的接口测试工具

* [postman](https://www.getpostman.com/)： 推荐。基本功能免费。最简单的基于http接口的调试和测试工具;
* [jmeter](http://jmeter.apache.org/)：后置处理器配合断言基本上可以满足接口测试需求，就是测试报告要做二次开发
* 自己撸代码：推荐。配合类似xunit测试框架，基本可以满足一切需求；[零基础实现python接口自动化视频教程，一起撸代码吧](https://ke.qq.com/course/232868#tuin=1eb87ef)
* [soapui](https://www.soapui.org/): 收费的；
* [insomnia](https://insomnia.rest/)：强力推荐。postman的弱化版，基本功能免费，重要的是工具代码开源，可以自己改；
* [paw](https://paw.cloud/): 强力推荐。mac上最强，淘宝买个授权好像就百把块钱；




原始封面

![课程图片](https://images.unsplash.com/photo-1506935412676-6fa7f9de5bda?w=300)


