征稿精选Fiddler大师之路系列

Posted 搜狗测试

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了征稿精选Fiddler大师之路系列相关的知识,希望对你有一定的参考价值。


小编
在平时的工作中,发现使用Fiddler的问题,并解决这些问题,再通过“搜狗测试”总结后分享给更多的人讨论学习,在分享中进步,在讨论中提升~~~心动不如行动,联系我们哦,稿酬大大滴~~~~~

需求


在开发/测试过程中有多台设备(PC/手机/模拟器)通过 Fiddler 代理上网时,如何方便地从满屏纷飞的 Session 中筛选出自己关心的那台设备的请求?


设想


通过 FiddlerScript 扩展,在 Session 的右键弹出菜单中添加一项,作为“查看所有设备请求”和“查看单个设备请求”的切换开关。

设计操作流程:

  1. 找到自己关心的设备发出的某一条请求,在它的右键弹出菜单里有我们添加的菜单项“开/关过滤单设备请求”。

  2. 点击该菜单项后:

    • 若当前状态为“查看所有设备请求”,则切换为“查看单个设备请求”状态,该设备为此条请求的发送者,并清除当前已显示的所有不关心的设备的请求。

    • 若当前状态为“查看单个设备请求”,则切换为“查看所有设备请求”状态。


实现


实现思路:

  • 通过修改 CustomRules.js,在右键弹出菜单上添加一个菜单项来切换请求筛选状态。

  • 每一条请求都带有 ClientIP,它在没有网络切换之类的情况发生时能较好地唯一标识一台设备。

  • 筛选规则是将非来自该 ClientIP 的请求隐藏掉。

实现步骤:

1. 打开 CustomRules.js。

启动Fiddler,依次选择菜单 Rules > Customize Rules...

2. 在 OnBeforeRequest 前添加如下代码:

// 是否过滤单设备请求标志
public static var gs_FilterDevice: boolean = false;
// 显示请求的设备的 
ClientIPpublic static var gs_FilterClientIP: String = null;
static function IsUnMatchClientIP(oS:Session):Boolean {
    return (oS.m_clientIP != gs_FilterClientIP);
}
public static ContextAction("开/关过滤单设备请求")
function ToggleDeviceFilter(oSessions: Fiddler.Session[]){
    if (gs_FilterDevice) {
        gs_FilterDevice = false;
        return;
    }
    var oS: Session = FiddlerApplication.UI.GetFirstSelectedSession();
    if (null == oS) return;
    if (!gs_FilterDevice) {
        gs_FilterDevice = true;
    }
    gs_FilterClientIP = oS.clientIP;

    // 删除当前已显示的非所关心设备的请求
    FiddlerApplication.UI.actSelectSessionsMatchingCriteria(IsUnMatchClientIP);
    FiddlerApplication.UI.actRemoveSelectedSessions();
}

最终效果如下图:

  • 筛选前【征稿精选】Fiddler大师之路系列(五)

  • 筛选后


缺陷


当前做法有如下缺陷,尚未想到好办法解决:

  • 菜单项并不能标明当前的状态,不知道筛选是开是关,这可以通过查看当前 Session 列表里是否有多种设备的请求来判断。

  • 当设备有网络切换时,比如重启了路由或者离开又回到某 Wifi,ClientIP 可能发生了变化,需要关闭筛选后在设备以新的 ClientIP 产生的请求上右键再次开启筛选。


点击“阅读原文”可以查看Fiddler的其他分享





以上是关于征稿精选Fiddler大师之路系列的主要内容,如果未能解决你的问题,请参考以下文章

Fiddler大师之路系列

Fiddler大师之路系列

fiddler大师之路

架构师之路,Q3好文精选,看你错过了哪些文章?

怪物大师!来自Taran Fiddler的怪物绘画作品

使用 python 抓取谷歌精选片段