一、接口测试的概念
1.什么是接口?
应用程序编程接口,也称为 API,通俗的说,就是某一个功能的实现或展示基于对另一个功能的调用,那么调用与被调用之间的连接点就是接口。
2.什么是接口测试?
接口测试,是测试系统组件间接口的一种测试。主要是检查数据 的交换,传递和控制管理过程,以及系统之间的相互逻辑依赖关系。
3.为什么做接口测试?
接口测试不同与手工测试,后者检测出的是表象,外层所暴露出的问题,而从最外层测试,无法保证全面的测试覆盖。子模块代码改动,如果没有接口测试,发现问题定位难度大,接口测试能够更好的定位出问题出处,从底层发现BUG,精准定位BUG。
接口测试,正如其名,测试的主要对象是接口,是测试系统组件间接口的一种测试方法,主要用于检测外部系统与被测系统之间以及内部各系统之间的交互点,其中会包括数据的交互、传递、关系等等。
以数据驱动的视角来看接口测试,接口测试就是按约定的格式(接口)给待测软件传入某种数据,之后检查接口给的返回值是否正确。
接口实际上是无处不在的,要解决接口这个抽象的概念,首先分离两个大概念,第一种是代码内部所谓的接口,代码A与代码B在组合的时候,必然需要定义一些名称以及参数、类型,这种在测试中一般划分在白盒测试中,也算是集成测试阶段,需要与开发有类似的代码知识才能上手。而另一种接口,是系统与系统之间,通过网络数据的传递进行交互,此类测试属于黑盒层面,也就是看不到代码,但可以通过各种手段将网络数据发送到接口从而得到接口的响应信息,达到测试的目标。
只要你测试的不是单机软件,就离不开接口,就算是网页从服务器上读一张图,实际上也是通过HTTP接口地址去获取图片文件,然后再界面上显示,只是这种类型的静态文件接口没有逻辑,确保图片地址和文件是匹配的即可。但程序动态接口则不一样,会涉及到各种各样的参数,即使同一个接口,也会因为接口传递的参数内容不同、用户不同、权限不同等等出现不一样的情况。接口、参数就是一种程序的输入,而接口返回的信息就是一种程序的输出,其实这也类似于在界面输入测试用例一样,但在接口中,用例的数量会大大提升,因为不受界面文本输入限制、不受选择内容限制,甚至还有很多界面上你根本看不到的东西。
接口测试的方法有很多,比较常见的是通过一些接口测试工具来实现接口数据的传递,也有编写代码来实现数据传递,以上都是可以在没有客户端界面的情况下做的,但需要对接口的实现比较熟悉。另外其实还有别的方式,比如在网络中将接口数据调包修改,或者以修改客户端的方式达到某些目的,且非常真实有效,最终达到测试的目的,找出程序的错误。
4、HTTP 接口协议
HTTP全称是超文本传输协议( HyperText Transfer Protocol),属于应用层的面向对象的协议,适用于分布式超媒体信息系统。
应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
传输层:TCP,UDP
网络层:IP,ICMP,OSPF,EIGRP,IGMP
数据链路层:SLIP,CSLIP,PPP,MTU
HTTP 协议的特点 :
(1)是一个基于请求响应的模型,支持客户/服务器模式。
(2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方式主要有GET,POST,PUT 等。
(3)http 允许传送任何类型的数据对象。
(4)无连接:限制每次连接只处理一个请求,节省了传输时间。
(5)无状态:协议对于事务处理没有记忆能力。
HTTP 协议工作流程
(1)首先客户机与服务器建立连接,点击超链接,http 开始工作。
(2)建立连接后,客户端发送请求给服务器。
(3)服务器接收请求,给予相应的响应信息,格式为一个状态行,包括信息的协议版本号,一个成功或错误的代码,后面是MIME信息。
(4)客户端接收服务器返回的信息,通过浏览器显示。
HTTPS 是 HTTP 的安全版本。HTTPS 其实是有两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上⼜加了⼀层处理加密信息的模块。
https://zhuanlan.zhihu.com/p/30984806 (比较有用)
https://zhuanlan.zhihu.com/p/22350260
https://zhuanlan.zhihu.com/p/30796518
https://zhuanlan.zhihu.com/p/31788304(什么是接口测试)
二、接口测试流程
1、了解需求,review定义好的接口需求,了解新接口的应用场景,以及尽可能多的细节。2、制定测试方案,除了功能以外,还可能需要考虑性能和安全性要求。根据这些需求设计测试用例。3、测试方案和测试用例review,一般发给相关方:开发,开发组长,运维,运维组长,测试,测试组长,不断根据大家的意见改进,直到大家都同意通过。4、在测试方案review的过程中开始准备测试数据,测试工具,或者自动化测试用例。5、执行接口测试,提交bug6、验证修复的bug7、发送测试报告,确定是否可以上线8、归档所有测试产出物9、如果有自动化测试用例,加入持续集成系统。如果接口有变更,相应地变更用例。如果持续集成系统的接口自动化测试发现代码变更的问题,提交bug。
三、接口测试工具
因为没有图形界面,我们需要有某种方式把准备好的数据传给要测的接口。这一步通常需要借助工具。举个例子,如果目标接口是一个http接口(可以参考w3cschool的web service教程来了解什么是http接口),那么在linux使用curl命令就可以去调用这个接口,把数据传给它了。
如果在windows上做接口测试,可以使用postman这个工具。
另外,抓包工具也是接口测试必备的,linux上可以tcpdump,windows可以fiddler或者charles,抓底层的包用wireshark。
本文主要以http接口为例子来解释接口测试的基础。
1、普通的黑盒手工web测试的流程:
这中间通过抓包,可以抓到我们要的数据,也就是浏览器给服务器传送的输入数据,和服务器向浏览器传送的返回值。
比如,用户登录时,输入数据是用户名密码,返回值是登录成功后生成的一个session id和cookie,以及“登录成功”这句提示信息。
这个就是一个典型的手工接口测试的流程:通过抓包或其他方法(比如看接口文档)准备好输入数据包,然后用发包的工具把数据发给服务端的接口,之后校验其返回值。
如果不清楚某个接口需要什么数据,可以看接口的设计文档或者联系相关的开发人员,一般会提供给一个调用的例子。
可以使用jmeter或soupUI作为测试工具,两者都不需要具备任何代码功底就能用。
使用python+requests+pytest/robotframework来做接口测试。如果用了python+requests,那么性能测试方面可以用python+locust。
2、常用 HTTP接口调试工具
在编写接口测试用例之前,我们首先需要找到一个可以进行接口调试的工具。我们可以选择浏览器插件工具或者命令行工具。
常用的浏览器插件工具有 Postman,DHC (aka Dev HTTP Client):
命令行工具可以使用 curl
https://weibo.com/ttarticle/p/show?id=2313501000014217896350938141(curl用法)
四、接口测试用例设计
按照接口测试的基本流程,首先需要确认需求,同时仔细查看接口定义文档,确保对被测接口有准确的认识。接下来才是进行测试用例的设计和代码编写。
典型的接口文档内容如下:
在根据接口文档设计接口测试用例的过程中,需要注意以下几点:
(1)确定请求的 uri、url 中的请求参数、header 中的参数,以及各参数的取值范围。
(2)确定响应的格式、有哪几种状态码、请求参数非法时对应响应的出错信息等。
(3)尤其注意要结合业务逻辑设计用例,接口测试不能脱离业务逻辑单纯的测试单个接口。