转 fiddler常见的应用场景

在移动互联网时代,作为软件测试工程师,fiddler绝对是值得掌握并添加进技术栈里的工具之一。

那么,fiddler在日常的测试工作中,一般都有哪些常见的应用场景呢?

根据以往工作经验,大概有如下4类应用场景:

  • 辅助定位bug;
  • 构建模拟测试场景;
  •  APP弱网模拟测试;
  •  前端性能分析及优化;


1、辅助定位bug

合格的软件测试工程师,不仅仅需要能够发现bug,还需要能透过bug表象,分析出问题根本原因,从而提升bug的解决效率,突显bige。

通过fiddler可以抓取request和response,通过对参数进行分析,可以定位是前端问题还是后台问题。

例如:在APP界面输入数据,点击下一步时,提示错误;这时候不能判断问题的根本原因在哪里,是前端页面作限制导致?还是前端request的参数问题,又或者是后台程序挂了?

这个时候就可以通过fiddler抓包,分析request、response来判断问题根本原因所在。

(往往有些测试就是直接把APP页面报错信息截个图就提缺陷了,而没有去作bug定位,这样的缺陷又往往被开发人员所抱怨)

1.1、实例--APP抓包

前提:APP、fiddler在同一局域网

1.1.1、fiddler设置

Tools>Options>Connections,勾选Allow remote computers to connect,同时记住fiddler listen on port的端口号。

1.1.2、获取pc端ip

开始菜单>cmd>ipconfig

1.1.3、手机WiFi设置代理

设置>WLAN>进入WiFi页面>代理>手动,填写主机名(pc端ip)、端口(fiddler listen on port的端口),保存即可进行抓包操作了。

PS:若APP的请求是https协议,则还需要一个下载证书操作:

    手机浏览器打开:http://ip:port,点击fiddler certficate字样下载安装证书即可。(ip为pc端ip,port为fiddler listen on port的端口)

同时,在fiddler,Tools>Options>HTTPS,勾选capture https connects。

1.1.4、过滤请求

fiddler抓包时会把手机上所有的请求都铺抓,这时就需要进行过滤。

fiddler右边有个Filters,打开该页面后,勾选use Filters,然后根据需要设置过滤规则,再点击actions>run filterset now即可实现过滤。

PS:测试完成后,记得把WiFi代理恢复原样,不然手机无法正常上网。



2、构建模拟测试场景(mock)

在测试过程中,为了测试覆盖率,往往需要执行很多场景的用例来验证某一功能在各种场景下的业务处理能力,包括正常、异常的场景;

而仅仅通过页面端来发起交易,往往是不能够模拟所有场景的;

例如:常见的登录功能,输入超出长度的的账号、密码,一般都是在前端就提示错误了,这样就不能够测试服务端接收到超出长度的请求时的处理场景了。

又例如:天气预报,测试时只能根据当前的城市、天气情况来测试,如何快速的将全部天气信息匹配的icon和出行提示验证完毕,这就可以通过修改response数据来实现测试场景。

利用fiddler的Breakpoints、AutoResponsder等功能,可以通过修改request或者response的参数,来实现构建模拟测试场景。

2.1、实例--修改request参数

fiddler中选中Rules->Automatic Breakpoints->Before Requests;

页面进行业务操作,此时在fiddler页面可以看见对应的请求图标会有个红色通行标示,表示请求过程中设置了断点,客户端发出的请求被fiddler拦截了,如下图所示:

在左侧点击这个请求,在右侧Inspectors->TextView或WebForms等界面下会看到请求发送的具体内容,直接修改需要模拟的测试场景数据,再点击右下页面的run to complete按钮即可。

2.2、实例--修改response参数

fiddler中选中Rules->Automatic Breakpoints->After Requests;

页面进行业务操作,此时在fiddler页面可以看见对应的请求图标会有个红色禁行标示,表示响应过程中设置了断点,客户端发出的请求被fiddler拦截了。

在右下页面的响应tab页中,修改需要模拟的响应测试场景数据,再点击run to complete按钮即可。

PS:还可以通过命令行bpu的方式来实现断点功能。



3、APP弱网模拟测试

移动端测试区别于PC端测试的一点就是网络的多变性;不同的网络环境和网络制式的差异,都会对用户使用app造成一定影响。

例如:进地铁、上公交、进电梯等,如果app没有对各种网络异常进行兼容处理,那么用户可能在日常生活中遇到APP闪退、ANR、数据丢失等问题。因此,app网络测试,特别是弱网测试显得尤为重要。

利用fiddler的Simulate Modem Speeds功能,可以通过设置网络的上传、下载的网络流量大小来达到模拟弱网环境,从而实现弱网模拟测试,即通过延迟发送数据或接收的数据的时间来限制网络的下载速度和 上传速度,从而达到限速的效果。

3.1、实例--APP弱网测试

fiddler中选中Rules->Cutomize Rules,在文件中搜索关键字:m_SimulateModem;

修改m_SimulateModem值为true,即开启网络模拟:

var m_SimulateModem: boolean = false;

修改uploaded、downloaded的数据来模拟不同的弱网场景:

if (m_SimulateModem) {

// Delay sends by 300ms per KB uploaded.

oSession["request-trickle-delay"] = "384";

// Delay receives by 150ms per KB downloaded.

oSession["response-trickle-delay"] = "2560";

}

上传1KB需要300ms,转化一下上传速度:1Kb/0.3s = 10/3(KB/s),如果想设置上传的速度为50KB/s,你则需要设置Delay 时间为 20ms;(=1000/50)

PS:设置之后可以通过http://www.speedtest.cn/在线测试网速,看是否生效;

2G一般上行/下行速率约为:2.7、9.6kbs,模拟设置为:uploaded 约 2962 ms,downloaded 约 833 ms;(弱网一般指2G网络)

3G一般上行/下行速率约为:384、2560kbs,设置为:uploaded 约 2.6 ms,downloaded 约 0.39 ms;

PS:弱网模拟还可以通过其它工具实现,比如360WiFi的限速设置等;

3.2、扩展弱网络规则

可能在测试中不会想要一个同样虚弱的网络环境,而是随机强弱的网络,这样比较贴切真实情况,那么可以修改上述代码为:

static function randInt(min, max) {

return Math.round(Math.random()*(max-min)+min);

}

if (m_SimulateModem) {

// Delay sends by 300ms per KB uploaded.

oSession["request-trickle-delay"] = ""+randInt(1,2000);

// Delay receives by 150ms per KB downloaded.

oSession["response-trickle-delay"] = ""+randInt(1,2000);

}

这里的randInt(1,2000)应该很好理解,代表1-2000中的一个随机整数,这样就会出现偶尔有延迟偶尔网络又良好的情况。



4、前端性能分析及优化

前端性能在一定程度可以提升用户体验,而前端的性能数据可以通过fiddler的Statistics和Timeline来获取,从而为性能分析及优化提供依据。

4.1、实例--前端性能数据获取分析

通过陈列出所有的HTTP通信量,Fiddler可以很容易的向您展示哪些文件生成了您当前请求的页面。使用Statistics页签,用户可以通过选择多个会话来得来这几个会话的总的信息统计,比如多个请求和传输的字节数。

选择第一个请求和最后一个请求,可获得整个页面加载所消耗的总体时间。从条形图表中还可以分别出哪些请求耗时最多,从而对页面的访问进行访问速度优化。

同时,还可以通过Timeline分析资源加载时序图,可以很直观地看到页面上各个资源加载过程所需要的时间和先后顺序,有利于找出加载过程中比较耗时的文件资源,帮助我们有针对性地进行性能优化。



5、小结

总的来说,fiddler是移动互联网测试的利器,除以上介绍的这些常见的日用场景外,还有很多其它用途,如域名的重定向、API的测试等,这里就不一一列举,如有兴趣,可抽空一起探讨。

原文地址:https://www.cnblogs.com/wz123/p/9726264.html

时间: 2024-08-11 05:24:41

转 fiddler常见的应用场景的相关文章

iOS中常见的 Crash 场景以及解决方法

1. 常见的 Crash 场景 访问了僵尸对象 访问了不存在的方法 数组越界 在定时器下一次回调前将定时器释放,会Crash 2.  关于BAD_ACCESS  出现的原因: 访问了野指针, 比如访问已经释放对象的成员变量或者发消息, 死循环等; 解决方法: 1.  重写对象的respondsToSelector 方法, 先找到出现 EXECBADACCESS 前访问的最后一个 object; 2. 设置Enable Zombie Objects; 3. 设置全局断点快速定位问题代码所在行,接收

深入浅出 Java Concurrency (38): 并发总结 part 2 常见的并发场景[转]

常见的并发场景 线程池 并发最常见用于线程池,显然使用线程池可以有效的提高吞吐量. 最常见.比较复杂一个场景是Web容器的线程池.Web容器使用线程池同步或者异步处理HTTP请求,同时这也可以有效的复用HTTP连接,降低资源申请的开销.通常我们认为HTTP请求时非常昂贵的,并且也是比较耗费资源和性能的,所以线程池在这里就扮演了非常重要的角色. 在线程池的章节中非常详细的讨论了线程池的原理和使用,同时也提到了,线程池的配置和参数对性能的影响是巨大的.不尽如此,受限于资源(机器的性能.网络的带宽等等

MQ(消息队列)常见的应用场景解析

前言 j提高系统性能首先考虑的是数据库的优化,之前一篇文章<数据库的使用你可能忽略了这些>中有提到过开发中,针对数据库需要注意的事项.但是数据库因为历史原因,横向扩展是一件非常复杂的工程,所有我们一般会尽量把流量都挡在数据库之前. 不管是无限的横向扩展服务器,还是纵向阻隔到达数据库的流量,都是这个思路.阻隔直达数据库的流量,缓存组件和消息组件是两大杀器. MQ简介 MQ,Message queue,消息队列,就是指保存消息的一个容器.具体的定义这里就不类似于数据库.缓存等,用来保存数据的.当然

fiddler常见应用场景

1.辅助定位bug 我们在测试工作中经常会遇到这些情况, 例如:在APP界面输入数据,点击下一步时,提示错误:这时候不能判断问题的根本原因在哪里,是前端页面作限制导致?还是前端request的参数问题,又或者是后台程序挂了? 这个时候就可以通过fiddler抓包,分析request(http请求).response(http响应)来判断问题根本原因所在. (往往有些测试就是直接把APP页面报错信息截个图就提缺陷了,而没有去作bug定位,这样的缺陷又往往被开发人员所抱怨) 主要就是通过抓包来分析服

常见数据结构应用场景

通用数据结构 可以简单的按照速度将通用数据结构划分为:数组和链表(最慢),树(较快),哈希表(最快).增.删.改.查是四大常见操作,不过其实可以浓缩为两个操作:增和查.删除操作和和修改操作都是建立在查找操作上的,所以完美的数据结构应该是具有较高的插入效率和查找效率. 通用数据结构关系 可以根据下图选择合适的通用数据结构: 数组 使用场景 数组在以下三个情形下很有用: 1)数据量较小. 2)数据规模已知. 3)随机访问,修改元素值. 如果插入速度很重要,选择无序数组.如果查找速度很重要,选择有序数

关于“淘宝”得六个常见质量属性场景的描绘

首先啊,先来了解一下质量属性的六个常见属性与质量属性场景得定义. 质量属性的六个常见属性 1.可用性 2.可修改性 3.性能 4.安全性 5.可测试性 6.易用性 质量属性场景 包含六部分: 刺激源:这是某个生成该刺激的实体(人.计算机系统或者任何其他刺激器). 刺激:该刺激是当刺激到达系统时需要考虑的条件. 环境:该刺激在某些条件内发生.当刺激发生时,系统可能处于过载,或者运行,也可能是其他情况. 制品:某个制品被刺激.这可能是整个系统,也可能是系统的一部分. 响应:该响应是在刺激到达后所采取

[nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)

蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到耳机.游戏手柄.音响.电视, 再到手环.电子秤.智能医疗器械(血糖仪.数字血压计.血气计.数字脉搏/心率监视器.数字体温计.耳温枪.皮肤水分计等), 再到智能家居等领域均占有一席之地. 而蓝牙低功耗(BLE)是在蓝牙4.0协议上修改以适用低功耗应用场景的一种蓝牙协议. 随着上一股智能消费类电子大潮的到来,BLE的各种应用也像雨后春笋般在市场上铺开. 如果想 紧跟蓝牙协议的最新动态 ,可以在https://www.b

Ansible之玩转常见运维场景(个人总结)

一.环境描述 Ansible管理节点:192.168.1.101 被管理节点1:192.168.1.135 被管理节点2:192.168.1.128 二.Ansible实现 1.实现管理节点和被管理节点免ssh密码 思路:在ansible管理节点上生成一对ssh密钥,并把管理节点的公钥拷贝给被管理节点 1.1.ansible管理节点生成ssh密钥 [email protected]:~/.ssh# ssh-keygen 1.2.拷贝ansible管理节点的公钥文件到被管理主机 1.2.1.在管理

Runtime简介以及常见的使用场景(此内容非原创,为转载内容)

Runtime简称运行时,是一套比较底层的纯C语言的API, 作为OC的核心,运行时是一种面向对象的编程语言的运行环境,其中最主要的是消息机制,Objective-C 就是基于运行时的. 所谓运行时,是指尽可能地把决定从编译期推迟到运行期,就是尽可能地做到动态.只是在运行的时候才会去确定对象的类型和方法的.因此利用Runtime机制可以在程序运行时动态地修改类和对象中的所有属性和方法. 对于C语言,函数的调用在编译的时候会决定调用哪个函数.对于OC的函数,属于动态调用过程,在编译的时候并不能决定