如何进行接口测试?API 测试该了解的技术细节

首先,我们想,什么是 API ?
简单来说,API,是应用程序接口(Application Programming Interface,又称为应用程序编程接口),是软件系统不同组成部分衔接的约定 。一个软件系统越庞大,需要用到的接口相对越多,同时接口的复杂度和接口的设计都需更好的设计和提升 。

如何进行接口测试?API 测试该了解的技术细节

文章插图
 
那么,什么是 API 测试?
API 测试其实是一种用程序或工具来发送数据,同时验收系统的返回值的方法 。这种测试更偏向于业务实现逻辑 。常见的网络协议有 TCP、Http、webservice、socket 等,http?和 webservice 都是基于 TCP/IP 协议的应用层协议,webservice 是基于 http 的 soap 协议传输数据 。我们今天主要说最常见的基于 http协议的API 的测试 。
一般来说,API 测试是除去单元测试和白盒测试之外最能够从底层发现问题的测试方法 。那么,API 测试需要注意哪些技术细节呢?换句话说,怎么做一个好的 API 测试呢?
【如何进行接口测试?API 测试该了解的技术细节】我们从以下四点说起:
1 、用例设计
如果把 API 看做一个黑盒的话,那么我们首先可以设计基于边界值法、等价类划分法等的黑盒用例,这些设计思想其实占据很大成分 。常见的比如参数值的边界,参数缺失/多余,参数空/非空,特殊字符等;对于复杂的参数,比如结构体/数组链表等,可以考虑其最大长度限制/内置特殊字符等 。
其次,请求方式/不合法的数据格式/不合法的cookie 也会影响到一个接口的返回值 。还有,有些接口涉及到加密解密,需要传一些密钥值,一些非合法秘钥的检验,来观察 API 的响应情况 。最后,如果手里有很详细的接口文档,把每个 return code 都覆盖到,很有必要 。比如正常是 200 OK,此外还有400(不合法请求),401(未授权),429(太多请求)等,或其它一些自定义的 error code,覆盖的过程,也是把工程代码分支覆盖的过程 。
 
2 、请求工具
一般用 Chrome 浏览器的话,postman 的使用频次应该是最多的了 。也可以下载postman 等位客户端 。之前用 Firefox 浏览器的时候,还用过 HttpRequester 。不管用哪种,方法一样 。
首先,填写好测试 URL,选择测试方法(GET/POST/PUT/DELETE),设置 Header(常用的有 content-type/Cookie 等),设置 authorization type(Basic Auth等),最后在 body 中填充测试数据 。接下来,点击 send 就好啦,这样就发送了一个请求到你的目标 API 了 。
这里面比较复杂的可能就是 body 了,常用的格式有 form-data, x-www-form-urlencoded, applictaion/json 等 。用哪种格式,正规的接口文档里开发同学就会注明 。此外,postman 有一个功能很 nice,就是它可以配置环境变量 。把配置信息抽象成类,不同环境对应不同的实例,初始化设定后,在 request 请求中通过实例成员变量来引用不同的值,从而在需要的时候通过切换环境来选择不同的配置信息 。比如:我配置了一个env1 环境,并添加了一组 key 和 value,那么当我引用{{}}这个变量时,就会替换成你所配置的 。
如何进行接口测试?API 测试该了解的技术细节

文章插图
 

如何进行接口测试?API 测试该了解的技术细节

文章插图
 

如何进行接口测试?API 测试该了解的技术细节

文章插图
 
3 、程序设计
首先是选择用哪种语言和相应的请求包,比如 Python 的话常用的就是 requests 库,而Golang 的话你可以使用 net/http 包或是 gorequest 包 。拿 python 来说,短短十来行代码就可以模拟发送一个请求 。
如何进行接口测试?API 测试该了解的技术细节

文章插图
 
但是难点并不于此 。
如何组织用例?
一般来说,用例可以分为单个接口用例和场景用例,单个接口很简单,针对一个接口的参数设置边界值,对应校验不同的返回;场景用例涉及到多个接口的调用,用以简单模拟用户行为 。
测试数据应该放在哪里?
测试数据可以放在用例里,也可以放在 json/yaml 等配置文件中 。如果涉及到图片/视频等比较大的测试文件,最好不要存在本地,可以在测试服务器搭建一个简单server,比如使用 ngnix,接下来只需要访问这些测试文件的链接就好了 。
使用哪种风格的测试框架?
现在基本有 BDD 和 TDD 两种框架之分,我更倾向于使用 BDD,也就是"行为驱动测试" 。这个风格有两个优点:


推荐阅读