抓包
1.什么是抓包?
在网络请求中, 我们用户与服务器之间进行数据交互, 是以数据包的形式传递的. fiddler可以拦截转发请求与响应, 在软件内进行记录.
2.fiddler抓包原理
2.1 测试与抓包
-
抓包:(package capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包经常被用来进行数据截取等。
-
功能测试用到抓包工具的场景:
-
通过抓包工具截取观察网站的请求信息,帮助我们更深入的了解网站
-
通过抓包工具截取、观察网站的请求与返回信息,帮助测试进行BUG定位与描述
-
通过抓包工具拦截修改请求信息,绕过界面的限制,测试服务端的功能
-
-
常用的抓包工具:Fiddler、Charles、F12开发人员工具等
2.2 Fiddler安装与配置
# Fiddler下载地址: https://www.telerik.com/download/fiddler/fiddler-everywhere-windows
Fiddler 配置:
(1).配置HTTPS协议
(2).配置抓取移动端
2.3 请求与响应
HTTP请求响应模型:
(1).请求:
请求可以分为两大部分: 请求内容与请求方法
请求内容:
- 请求行
- 请求头
- 请求体
请求方法:(常见8中)
- GET
- POST
- PUT
- DELETE
- HEAD
- CONNECT
- OPTIONS
- TRACE
# 1.请求行
位置在第一行, 包含了请求方式, 请求地址, 协议版本等信息
# 2.请求头
位置在第一行之后与空行之间, 其描述了客户端信息的相关参数, 一般以键值对形式存在.
1.Accept:请求报头域,用于指定客户端可接受哪些类型的信息
2.Cookie:也常用复数形式 Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前访问会话。例如,我们输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,后面我们每次刷新或请求该站点的其他页面时,会发现都是登录状态,这就是Cookies的功劳。Cookies里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上Cookies并将其发送给服务器,服务器通过Cookies识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容
3.Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如作来源统计、防盗链处理等
4.User-Agent:简称UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。
5.x-requested-with :XMLHttpRequest # 代表ajax请求
5.Accept-Language:指定客户端可接受的语言类型
6.Accept-Encoding:指定客户端可接受的内容编码
7.Content-Type:也叫互联网媒体类型(Internet Media Type)或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息。例如,text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型
# 3.请求体
位置在空行之后, 为传递到服务端的数据
注意: GET请求没有请求体
# 4.请求方法
常见请求方法如下:
- GET: 请求页面, 并返回页面内容
- POST: 用于提交表单数据或上传文件, 数据包含在请求体中
- PUT: 从客户端向服务器传送的数据取代指定文档中的内容
- DELETE: 请求服务器删除指定的页面
- HEAD: 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头
- CONNECT: 把服务器当作跳板,让服务器代替客户端访问其他网页
- OPTIONS: 允许客户端查看服务器的性能
- TRACE: 回显服务器收到的请求,主要用于测试或诊断
# 重点(背): GET请求与POST请求的区别是什么?
- 最直观的区别就是GET把参数包含在URL中,POST通过request body(请求体)传递参数。
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET请求只能进行url编码,而POST支持多种编码方式。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- GET请求在URL中传送的参数是有长度限制的,而POST么有(注意:这个限制是由浏览器导致)。
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
- GET参数通过URL传递,POST放在Request body中。
(2).响应
响应也可以按照请求的方式分为两大部分: 响应内容与响应状态码
响应内容:
- 响应行: 位置是在第一行,包含协议及版本、响应状态码、状态消息
- 响应头: 位置是在第一行之后,到空行之前,告诉客户端服务器相关信息,如web服务器类型等
- 响应体: 位置是在空行之后,如登录成功
响应状态码:
200系列:
200 成功 服务器已成功处理了请求 # 重点1
300系列:
301 永久移动 请求的网页已永久移动到新位置,即永久重定向 # 重点
302 临时移动 请求的网页暂时跳转到其他页面,即暂时重定向 # 重点
400系列:
400 错误请求 服务器无法解析该请求 # 重点
401 未授权 请求没有进行身份验证或验证未通过
403 禁止访问 服务器拒绝此请求 # 重点
404 未找到 服务器找不到请求的网页
500系列
500 服务器内部错误 服务器遇到错误,无法完成请求 # 重点
501 未实现 服务器不具备完成请求的功能
502 错误网关 服务器作为网关或代理,从上游服务器收到无效响应
504 网关超时 服务器作为网关或代理,但是没有及时从上游服务器收到请求
505 HTTP版本不支持 服务器不支持请求中所用的HTTP协议版本
2.4 Fiddler抓包原理与使用
(1).Fiddler抓包原理:
Fiddler抓包的原理: Fiddler在抓包的过程中充当了一个代理, 位于客户端与服务器之间, 客户端向服务器发送的请求会被Fiddler拦截, 然后在转发给服务器, 服务器返回给客户端的响应也会先经过Fiddler, Fiddler再转发给客户端, 实际上Fiddler就是服务器与客户端中间充当转发请求与响应的媒介. 示意图如下:
(2).Fiddler使用:
2.5 Fiddler扩展与弱网测试
(1).AutoResponder(扩展)
自动响应
1.进入AutoResponder
2.选择列表左侧请求,点击【Add Rule】添加mock请求(或点击【Add Rule】手动填写请求地址)
3.选择响应结果,模拟测试场景(此处支持打开本地文件,根据文件内响应数据(例如json文件)进行mock)
4.点击右下角【save】,保存响应设置
5.勾选上方选项:
(1)Enable rules:开启或禁用自动重定向功能,勾选上时,激活规则
(2)Unmatched requests passthrough:未匹配的请求穿透,即勾选上时,不影响那些没满足我们处理条件的请求
(3)勾选了这个选项,在规则里面就可以设置是立即返回响应,还是隔多少毫秒返回响应
(2).Composer(扩展)
(3).弱网测试
-
概念:在当今移动互联网盛行的时代,网络的形态除了有线连接,还有2G/3G/Edge/4G/Wifi等多种手机网络连接方式。不同的协议、不同的制式、不同的速率,使移动应用运行的场景更加丰富。
从测试角度来说,需要额外关注的场景就远不止断网、网络故障等情况了。对于弱网的数据定义,不同的应用所界定的含义是不一样且不清晰的,不仅要考虑各类型网络最低速率,还要结合业务场景和应用类型去划分。按照移动的特性来说,一般应用低于2G速率的都属于弱网,也可以将3G划分为弱网。除此之外,弱信号的Wifi通常也会被纳入到弱网测试场景中。
-
为何要进行弱网测试?
例如:进地铁、上公交、进电梯等,如果app没有对各种网络异常进行兼容处理,那么用户可能在日常生活中遇到APP闪退、ANR、数据丢失等问题。因此,app网络测试,特别是弱网测试显得尤为重要。
我当前所在项目的产品是一款适配于低资源环境的医疗IT系统,目前主要是在坦桑尼亚地区使用。根据资料显示,在坦桑尼亚等东非国家,普遍使用的都是2G网络,覆盖率达到40%以上,3G网络的覆盖都非常少,并且稳定性较差。由此,对于当前的App应用交付要求即至少在弱网以及无网状态下能正常运行。