4. 接口测试协议基础
4.1 接口协议
接口测试是基于协议进行测试的,接口协议有很多,我们在这里就简要的介绍下目前比较类型的http协议,在后面的具体实战中会更加明确的体现。在后面的第九章中我们也会介绍Dubbo协议。
4.1.1 Http协议介绍
HTTP协议是Hyper Text TransferProtocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

4.1.2 Http协议特点
HTTP协议有很多特点,主要特点如下:
1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST等。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
3.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
4.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
5、支持B/S及C/S模式。
4.1.3 Http协议工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
以下是 HTTP 请求/响应的步骤:
1、客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
2、发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
3、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4、释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:
①、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
②、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
③、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
④、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
⑤、释放 TCP连接;
⑥、浏览器将该 html 文本并显示内容;
4.2 协议报文捕获
HTTP协议本身是一个没有状态的协议体系,通过一个报文接口发送给服务器,服务器会对应的返回匹配的结构。这里关于HTTP协议体系具体的内容可以参考RFC2616文档和相关HTTP报文简介。
能够捕获HTTP协议报文的工具有很多,我们这里分别介绍Chrome F12、Fiddler两个主流工具。
4.2.1 Chrome F12
F12是一个快捷键,也是现在主流浏览器所提供的开发工具之一,在IE9.0+及Chrome浏览器上都具备该功能(Firefox通过Firebug实现)。
这里我们打开Chrome浏览器,并且通过F12快捷键启动开发工具。
这里我们以慕课网的课程页为例,接着我们刷新慕课网的课程页面,在标签Network中能够看到我们发送给服务器的每一个请求及服务器的每一个应答。

选择一个具体的请求,在右侧的Headers可以看到具体的发送给服务器的Request请求报文。在这里能够详细的查看到Request URL、Request Method、Request Headers、Form Data等信息。

切换到Response标签中,这里提供的就是服务器应答的内容。

4.2.2 Fiddler
Fiddler是一个代理拦截工具,它和chrome F12工具不太相同,它不依赖于任何浏览器,或者可以这样说它可以捕获任意通过它的HTTP数据包。
在Fiddler Option的设置里面提供了针对代理的端口配置,Fiddler将会监听8888端口,所有通过这个端口访问的HTTP协议均会被捕获,默认情况一般都不需要配置。

接着我们打开IE(当然也可以启动任意软件只要可以配置代理服务器即可,指向端口8888),查看IE的代理设置可以看到,IE的默认代理已经被配置指向了Fiddler。

接着我们在IE浏览器访问一个慕课网课程页面,就可以看到Fiddler会将对应的请求捕获。

接着我们来看一下这个请求的内容,点击Inspectors标签。

在上面可以看到完整的Request请求部分,而Response应答部分由于编码格式问题(一般是GZIP动态压缩),所以不会自动显示,我们需要在Transformer里面做一些配置。
这里我们设置返回的应答没有经过压缩NoCompression。

接着切换标签到TextView就可以看到完整的Response正文了。

上面介绍了2种常见的HTTP协议捕获方式,至于使用Wireshark工具来做HTTP
捕获我觉得可能稍微有些大材小用了,所以这里就不具体介绍了。Chrome F12、Fiddler的详细功能这里不做具体介绍,只是利用这两个工具来说明如何捕获http协议。
4.3 协议报文发送
PostMan是一款在Chrome上运行的请求发送插件,由于其需要在谷歌市场上安装,由于国内对google相关国外网站都禁止访问,所有我们需要使用FQ软件进行FQ,推荐使用”赛风3智能FQ”软件进行FQ。FQ后就可以在google应用市场上安装Postman应用。
安装完成后,在应用里面就能看到当前在Chrome中安装的应用,其中就有PostMan。

点击Postman按钮,就可以看到PostMan的主界面,左侧是已经访问过的历史记录,右侧是报文构建界面。

发送Get请求
在方法列表上选择Get请求,填写对应的URL和URL Param即可。

点击Send即可获得对应返回。

发送Post请求
同理,配置请求方式为POST配置对应的内容,点击Send即可,这里就不做复述了。
4.4 MockServer
何为Mock,Mock就是桩的意思,也就是说不管你怎么调用它都会返回你设定的内容。桩可以帮助我们访问一些不存在的环境或者没有实现的模块,实现集成的目的。
这里用Fiddler来实现MockServer的功能。
打开AutoResponder标签,勾选左侧的Enable rules选项,这个时候所有通过Fiddler的请求都会根据下面的过滤Rule规则进行返回。

这里可以通过从左侧拖动请求到右侧规则中,然后可以选择需要返回的responses模版,或者可以自己实现请求访问的自动报文返回,在规则上右键Edit response编辑相关的内容并保存即可。

最后需要注意在Fiddler选项中勾选允许远程电脑连接,避免别的访问失败的情况。

过滤规则设置完成后及相关配置完成后,在刷新下慕课网课程页,可以看到已经按mock rule正确的返回了response。


浙公网安备 33010602011771号