在被测接口并没有明确的接口文档给出时,我们需要借助抓包工具来帮助测试,利用抓包工具我们几乎可以获得接口文档中能给你的一切。常见的抓包工具有Charles和Fiddler, Fiddler只能用在Windows平台, 而Charles可用于Windows, Mac, IOS和Android多平台。
抓包的原理是通过成为电脑或者移动设备的代理截取请求和请求结果达到分析抓包的目的。就是说,咱们的请求从客户端发送,直到本地客户端显示出结果是经过了几个步骤的:请求发送给服务端,服务端接收请求并处理,服务端将结果返回给客户端。代理就是在客户端以及服务端之间设一道关卡,可以监控到来往的数据包,并且可以将其篡改。
fiddler
Charles
一、安装
下载地址:https://www.charlesproxy.com/download/
破解攻略:https://www.zzzmode.com/mytools/charles/
按照上面的内容,很容易就能安装好我们要的 Charles,打开如下:
Charles 提供了两个不同的视图方式:Structure & Sequence
Structure 是将请求按照域名进行分类,按照路径逐级分类:
Sequence 则是将请求按照访问时间先后顺序分类:
二、基本配置
上面我们提到,抓包工具其实是代理进行的,那么我们怎么设置代理的端口呢?
Proxy ==> Proxy Settings ==> Proxies ==> Port ,默认是 8888,这里我们不予更改,如果端口被占用,可以考虑修改此端口号进行抓包,将客户端(浏览器/移动端)的代理端口也设置成 8888 。Charles 才能正确建立代理
那么还有一个问题,我们怎么设置只抓取某个 ip 的请求呢?无关请求,我们不需要,比如某输入法,qq 等,是我们不需要的请求;而且,一般来讲,我们是抓取跟后台交互的请求,也就是说 js,css,jpg 等这些图片,我们是不需要抓取的,那么怎么过滤这些无关请求呢?
比如说,我们只要博客园的请求,那么我们就设置:Proxy ==> Recording Settings ==> Include ==> Add ==> Host 内填入想要抓取(博客园)的域名 ==> OK ==> OK
三、抓取 Windows 请求
抓取浏览器请求很简单,跟上面说明好的配置 ok 就成,假设我们也连接了移动端设备,Proxy 内选择 Windows Proxy 即可
那么怎么抓取 https 请求呢?
四、抓取移动端请求(Android 为例)
为什么用 Android 举例呢?因为本人用的就是小米6(Are you OK?),这里待补充,具体做法就是手机上要安装 Charles 证书,才能抓取到
五、篡改请求,拦截响应
仅仅知道怎么抓包远远不够,还需要掌握如何利用抓包工具对要发往服务器的请求与进行拦截并篡改,以及对服务端返回的数据进行拦截,篡改返回的数据。那么你可能会问了,为什么要改这些数据呢?
在我们的接口测试中,利用抓包工具拦截请求修改的话,可以初步验证该接口的某些问题。比如说:我们在前端页面上下拉框选择一个选项,然后查询,假设不能修改请求,就只能发送选择的请求;那么假设我们拦截了,修改成下拉框没有的内容,再发往服务器,就能验证前后端是否有校验。如果服务器接受了下拉框不存在的请求并且处理,说明后端是没有校验的。还有很多情况,例如修改 cookie ,前端限制了输入字符串的长度等,都可以通过接口去测试后端是否校验。
那么为什么我们要拦截返回的数据,修改在页面展示的情况呢?还是一样的,假设我们一个表单保存后,重定向到显示的列表,数字有位数限制,比如两位小数,那么我们可以修改返回的数据。
具体如何拦截修改呢?
假设,我们抓取 http://doc.nnzhp.cn/ 信息,篡改请求的内容,或者修改搜索的内容:
1、首先我们抓一下 http://api.nnzhp.cn/api/user/stu_info?stu_name=%E5%B0%8F%E9%BB%91 的响应结果,并且对相应的 url和路径打断点,这里要注意,这里的断点有个类似于作用域的范围,假设我们对某个路径进行断点,那么代表该路径下的所有请求都要会被拦截。
2、接着,我们清空 Charles 内的请求,然后去浏览器再请求一下该链接,将拦截的请求修改,看看结果:
发现浏览器页面一直在跳转,但是没结果,这说明请求成功拦截了,我们看看 Charles ,成功拦截下了请求,在 Edit Request 内可对请求进行修改,再发送到服务期内,我们将"小黑"改成"小白"试试:
修改为"小白",发送到服务器:
返回的结果如下:
这个返回的结果,我们也是可以修改的,也就是修改相应内容,我们把第一条"小白"改成"小王八",其他的不变,看看浏览器结果:
可以看到,我们发送的请求为 小黑,接收到的结果为:小王八+小白,这里举的例子是对 get 请求进行修改,那么 post 请求其实是一样的。
注意,断点打完了记得取消掉,否则请求将会被拦截哦