一、基本概念
1.什么是接口测试:
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
2.为什么要做接口测试:
接口测试相对于UI来说,更加稳定,也可以说接口测试是一种特殊的单元测试,当一个系统提供了大量的后台服务,有较少或者基本没有页面操作,比较适合开展接口测试。例如某个系统大概有100多对外的接口,每次上线,测试人员不得不一个个验证,此时如果开展自动化,将大大提高回归的效率和测试的效率。
二、接口测试流程
其实流程和测试流程大概相似。
1.与产品、开发一起梳理需求,确定实现哪些接口和功能;
2.编写测试计划(开发人员开发预估时间、风险预估及解决时间,测试人员用例准备、数据准备、环境准备、与开发产品等协调测试等时间)
3.测试计划review
4.编写测试用例及自动化脚本
5.测试用例review
6.执行测试用例,提交bug,验证bug
7.测试总结(包括测试过程、开发过程遇到的问题,解决的问题,小组内讨论以后遇到同样问题如何更快解决)
三、接口测试常用工具
1、Postman
Postman是一个Chrome 扩展,能提供强大的 Web API & HTTP 请求调试功能。Postman能够发送任何类型的http请求,支持GET/PUT/POST/DELETE等,请求头中可以附带任何数量的headers信息。
Postman支持不同的认证机制(basic,digest,OAuth)
Postman非常简单易用,通过填写URL、header、body等就可以发送一个请求,这对于我们平时做一些简单的测试是够用的。
Postman有一个“集合”功能,用于存储所有请求相同的API/域,这个功能能方便我们重新发送请求。
2、Fiddler
Fiddler是一个HTTP/HTTPS协议调试代理工具, 它能够记录客户端和服务器之间的所有HTTP/请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试WEB应用、修改请求的数据、修改服务器返回的数据。当浏览器与服务器之间通过建立TCP连接以HTTP协议进行通信,浏览器默认通过系统HTTP代理发送到服务器,Fiddler工作于七层中的应用层默认端口为8888,可以访问 http://127.0.0.1:8888 会显示Fiddler的页面。
但一般fiddler是用来抓包的,可以用来抓取请求和返回的数据,查看内容,postman是模拟请求和返回的工具,填写对应的地址、参数和数据,就可以向服务器发送请求,查看返回值。
3.postman的使用
1)HTTP的五种请求方法:GET, POST ,HEAD,OPTIONS, PUT, DELETE, TRACE和 CONNECT 方法。
GET请求:请求指定的页面信息,并返回实体主体。(通常用来接收数据)。
POST请求:向指定资源提交数据进行处理请求,数据被包含在请求体中。POST请求可能会导致新的资源的建立、已有资源的修改。(通常用来发送数据)。
HEAD请求:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
PUT请求:从客户端向服务器传送的数据取代指定的文档的内容。
DELETE请求:请求服务器删除指定的页面。
CONNECT请求:能够将连接改为管道方式的代理服务器。
OPTIONS请求:允许客户端查看服务器的性能。
TRACE请求:显示服务器收到的请求,主要用于测试或诊断。
2)接口调用传参方式:key-value参数形式,Json串传参形式。
key-value参数:把参数拼接在url的后面由?相连,多个参数之间用&相连。
Json串传参:需要在请求的body写中,入Json格式参数。
5.fiddler的使用
通过主界面左下方的“web browser”按钮打开目标浏览器,这样就能监控到该浏览器所有的HTTP请求了。
下面开始分析主界面的功能区:
1、Fiddler菜单栏,上图黑色部分,包括捕获http请求,停止捕获请求,保存http请求,载入本地session、设置捕获规则等功能。
2、Fiddler的工具栏,上图黄色部分,包括Fiddler针对当前view的操作(暂停,清除session,decode模式、清除缓存等)。
3、Web Session面板,上图红色部分,主要是Fiddler抓取到的每条http请求(每一条称为一个session),主要包含了请求的url,协议,状态码,body等信息,详细的字段含义如下图所示:
#:顺序号,按照抓包的顺序从1递增
Result:HTTP状态码
Protocol:请求使用的协议,如HTTP/HTTPS/FTP等
HOST:请求地址的主机名或域名
URL:请求资源的位置
Body:请求大小
Caching:请求的缓存过期时间或者缓存控制值
Content-Type:请求响应的类型
Process:发送此请求的进程ID
Comments:备注
Custom:自定义值
另外,注意请求的host字段。可以看到有来自多个www.csdn.net的子域名的响应,说明在大型网站的架构中,大多需要多个子域名,这些子域名可能是单独用于缓存静态资源的,也可能是专门负责媒体资源的,或者是专门负责数据统计的(如pingback)
右键单击其中的一条请求。可以选择的操作有:save(保存请求的报文信息,可以是请求报文,可以是响应报文),将整条会话作为txt保存到桌面,当然你可以保存为zip。
4、详情和数据统计板,针对每条http请求的具体统计(例如发送/接受字节数,发送/接收时间,还有粗略统计世界各地访问该服务器所花费的时间)和数据包分析。如inspector面板下,提供headers、textview、hexview,Raw等多种方式查看单条http请求的请求报文的信息:
5、详情和数据统计板
(1)、inspector
提供headers、textview、hexview,Raw等多种方式查看单条http请求的请求报文的信息,分为上下两个部分,上半部分是请求头部分,下半部分是响应头部分。对于每一部分,提供了多种不同格式查看每个请求和响应的内容。
a、TextView 标签
HTML/JS/CSS 使用TextView 可以看到响应的内容。选择一条Content-Type是text/html的回话,点击TextView
b、Raw标签
Raw标签可以查看响应报文和响应正文,但是不包含请求报文
c、Auth标签
Auth则可以查看授权Proxy-Authorization 和 Authorization的相关信息
d、Cookies标签
Cookies标签可以看到请求的cookie和响应的set-cookie头信息。
(2)、AutoResponder标签
Fiddler比较重要且比较强大的功能之一。可用于拦截某一请求,并重定向到本地的资源,或者使用Fiddler的内置响应。可用于调试服务器端代码而无需修改服务器端的代码和配置,因为拦截和重定向后,实际上访问的是本地的文件或者得到的是Fiddler的内置响应。当勾选allow autoresponser 并设置相应的规则后(本例中的规则是将http://blog.csdn.net/aaa的请求拦截到本地的文件http://localhost:54321/WebForm1.aspx),如下图所示
(3)、Statistics面板
HTTP请求的性能和其他数据分析
我们可以从中看出一些基本性能数据:如DNS解析的时间消耗是8ms,建立TCP/IP连接的时间消耗是8ms等等信息。
(4)、composer面板
可以模拟向相应的服务器发送数据的过程(不错,这就是灌水机器人的基本原理,也可以是部分http flood的一种方式)。
(5)、Filters面板
Filter标签则可以设置Fiddler的过滤规则,来达到过滤http请求的目的。最简单如:过滤内网http请求而只抓取internet的http请求,或则过滤相应域名的http请求。Fiddler的过滤器非常强大,可以过滤特定http状态码的请求,可以过滤特定请求类型的http请求(如css请求,image请求,js请求等),可以过滤请求报文大于或则小于指定大小(byte)的请求
四、接口测试用例编写
1)接口测试用例编写要点
a)测试每个参数类型不合法的情况(类型不合法容易遗漏掉NULL型)
b)测试每个参数取值范围不合法的情况
c)测试参数为空的情况
d)测试参数前后台定义的一致性
e)测试每个参数的上下限(这里容易出致命的BUG,如果程序处理不当,可能导致崩溃)
f)测试每个参数取值不合理的情况(包括取的值不属于自己,取值在这阶段不会出现,取值超过了自己所拥有的数量或者范围)
g)如果两个请求有严格的先后顺序,需要测试调转顺序的情况
2)接口测试常见问题
a)可重复请求成功数据
b)可修改请求状态并正常完成请求
c)修改用户ID为其他用户ID,查看各显示项是否正常或异常的处理
d)用户车系、车型字段为负数,添加之后显示等
e)并发请求某个链接
五、接口测试质量评估标准:
a) 业务功能覆盖是否完整
b) 业务规则覆盖是否完整
c) 参数验证是否达到要求(边界、业务规则)
d) 接口异常场景覆盖是否完整
e) 接口覆盖率是否达到要求
f) 代码覆盖率是否达到要求
g) 性能指标是否满足要求
h) 安全指标是否满足要求