上个月自定义了一个Fiddler的插件,可以根据请求生成接口自动化测试的RF和Python代码,这样测试人员只需要手动操作页面用Fiddler抓取报文,就可以直接生成RF、Python代码,然后只需要改一下改下变量部分就可以了。至于生成RF、Python代码主要还是字符串的拼接,虽然麻烦,但也不难,今天主要记录下自定义Fiddler插件。

一、Fiddler抓包工具

既然是Fiddler插件,肯定是基于Fiddler,这里我是基于Fiddler的5.0.20173.49666版本,这个版本号也是比较重要的,因为它会要求.Net的版本.用时它也公开的好几类接口.

1.全局类:IFiddlerExtension,IAutoTamper,IAutoTamper2,IAutoTamper3
      接口是面向一个全局的插件,插件出现的位置和Log,TimeLine同级,插件编译成dll只能放到 Scripts文件夹下
2.单个请求:Inspector2,IResponseInspector2,IRequestInspector2
      接口是面向于单独一个连接,插件会出现Inspector这个菜单下 和 Headers,TextView 同级,插件编译成dll只能放到 Inspectors 文件夹下
3.命令行:IHandleExecAction
            接口可以让你的控件接收到命令行传来的命令
4.导入导出:ISessionExporter,ISessionImporter
            批量对请求经行导入导出操作,位置出现在右键菜单Save-Selectd Session-中 和File-ImportSession 弹出的菜单中,dll需要放到ImportExport中

二、实现

由于这里使用的是Fiddler5.0.20173.49666版本,它是基于4.6.1的,如果选低的.net版本会报下面的警告.所以选的是.net4.6.1.

1.新建类库引入Fiddler

这里新建了一个名为CustomInspectors的类库,引用->右键->添加引用->浏览,找到Fiddler的安装目录下的Fiddler.exe.

2.AssemblyInfo.cs配置Fiddler

在AssemblyInfo.cs引入Fiddler.

[assembly: Fiddler.RequiredVersion("5.0.20173.49666")]

3.创建用户控件

选中类库,右键-添加-新建项-用户控件,这里为了演示,并没有实现生成RF、python代码功能,只是把请求的body显示出来,所以只用了一个富文本框。并把文本框属性设置为public.

4.新建类实现Inspector2, IRequestInspector2

这里创建了一个CatchInspectors实现Inspector2, IRequestInspector2,同时引入上面创建的用户控件,这样可以给用户控件的富文本框赋值,将Fiddler抓包的内容显示出来。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Fiddler; namespace CustomInspectors
{
public class CatchInspectors : Inspector2, IRequestInspector2
{
private HTTPResponseHeaders _responseHeaders;
public CusUserControl cusUserControl { get; set; } private byte[] _requestBody;
private bool _bDirty;
public bool _bReadOnly;
private HTTPRequestHeaders _requestHeaders; public HTTPResponseHeaders headers
{
get =>_responseHeaders; set => _responseHeaders =value;
}
public byte[]body
{
get=> _requestBody;
set {
_requestBody = value;
cusUserControl.RTxtBoxBody.Text = System.Text.Encoding.Default.GetString(value);
}
} public bool bDirty => true; public bool bReadOnly { get => true; set => _bReadOnly = value; }
HTTPRequestHeaders IRequestInspector2.headers
{
get => _requestHeaders; set => _requestHeaders = value;
} public override void AddToTab(System.Windows.Forms.TabPage o)
{
o.Text = "自定义插件";
cusUserControl = new CusUserControl();
cusUserControl.Dock = System.Windows.Forms.DockStyle.Fill;
o.Controls.Add(cusUserControl); } public void Clear()
{
cusUserControl.RTxtBoxBody.Text = string.Empty;
return;
} public override int GetOrder()
{
return ;
}
}
}

5.编译放入Fiddle中

将编译生成的dll文件放入Fiddler安装包的Inspectors文件夹下,再次打开Fiddler.选中一个请求,就会显示出自定义的插件内容了。这里自定义的插件与TextView有点像,都是显示请求的body内容。

自定义Fiddler插件一的更多相关文章

  1. 自定义Fiddler插件二

    在之前博客自定义Fiddler插件一中主要是实现了IRequestInspector2接口,这个接口主要是针对单个请求的,在写接口测试案例的时候也是对一个接口进行处理,如果想批量进行操作,那就可以使用 ...

  2. Fiddler插件---将Mapi请求自动转为HTTPRunner测试用例(YAML格式)

    背景 继之前鼓捣出了Mapi解密插件之后,在团队内已经使用了三年之久,一跃成为团队最爱欢迎的测试工具之一(加个之一,低调谦虚一点). 随着团队推行HttpRunner搞接口自动化:编写和维护Case带 ...

  3. 炫酷JQUERY自定义对话框插件JDIALOG_JDIALOG弹出对话框和确认对话框插件

    多种类型自定义对话框插件jDialog是一款基于jquery实现的轻量级多种类型的自定义对话框插件 在项目开发中.一般会美化 alert(); 的样式.那么今天我就和大家分享一款非常炫的插件 先来看一 ...

  4. 自定义jQuery插件Step by Step

    1.1.1 摘要 随着前端和后端技术的分离,各大互联网公司对于 Mobile First理念都是趋之若鹜的,为了解决网页在不同移动设备上的显示效果,其中一个解决方案就是Responsive Desig ...

  5. 使用自定义 jQuery 插件的一个选项卡Demo

    前几天闲着没事,想着编写一个 jQuery 插件,或许这将是一个美好的开始. 这里是html页面: <!DOCTYPE html> <html lang="en" ...

  6. 如何创建一个自定义jQuery插件

    简介 jQuery 库是专为加快 JavaScript 开发速度而设计的.通过简化编写 JavaScript 的方式,减少代码量.使用 jQuery 库时,您可能会发现您经常为一些常用函数重写相同的代 ...

  7. FiddlerScript高级技巧---自定义Fiddler菜单

    Tips 书接上回, Fiddler插件 在团队内部试用后,效果很不错,小伙伴们也提出了很多改进的建议: 最近一段Fiddler使用的仍较为频繁,以前碰到一些特殊测试需求时,总是自己在FiddlerS ...

  8. Fiddler插件 --- 解密Elong Mapi请求参数及响应内容

    当前问题: 在我们日常的Web/App测试过程中, Fiddler是一大辅助利器:在我们团队,也经常使用Fiddler进行App抓包测试. 艺龙 App使用的REST(内部称为Mapi)接口,在使用过 ...

  9. 自定义 Cordova插件(基础篇)

    cordova自定义插件 注意:存放自定义cordova插件目录不能有空格可能会报错 cordova的安装 下载node.js,安装完成后你可以在命令行中使用node和npm. 安装cordova使用 ...

随机推荐

  1. Python基础(六)

  2. TensorFlow数据读取

    TensorFlow高效读取数据的方法 TF Boys (TensorFlow Boys ) 养成记(二): TensorFlow 数据读取 Tensorflow从文件读取数据 极客学院-数据读取 十 ...

  3. k-th smallest 问题总结

    k-th smallest/biggest 问题大约有这几道: 373. Find K Pairs with Smallest Sums 从两个list里各取一个数求和,求所有可能的sum里第k小的 ...

  4. 使用CefSharp在.Net程序中嵌入Chrome浏览器(一)——简介

    有的时候,我们需要在程序中嵌入Web浏览器,其实.Net Framework中本身就提供了WebBrowser控件,本身这个是最简单易用的方案,但不知道是什么原因,这个控件在浏览网页的时候有些莫名的卡 ...

  5. 隐藏字符 BOM

    如果您在修改任何PHP文件後发生: * 不能登入或者不能登出: * 页顶出现一条空白: * 页顶出现错误警告: * 其它不正常的情况.   则多半是编辑器的问题. 本程序采用UTF-8编码.现在几乎所 ...

  6. Android开发 - 掌握ConstraintLayout(二)介绍

    介绍 发布时间 ConstraintLayout是在2016的Google I/O大会上发布的,经过这么长时间的更新,现在已经非常稳定. 支持Android 2.3(API 9)+ 目前的Androi ...

  7. Rocketmq日志收集与logback集成Demo

    官方文档有简洁的例子,这里就做一个简单补充和实践 直接上logback-boot.xml文件 <?xml version="1.0" encoding="UTF-8 ...

  8. jvm-class文件简介

    jvm全称 java virtual machine (java虚拟机),也就是在计算机上再虚拟一个计算机,它存在于计算机内存中并运行在操作系统之上的. javap -v class文件名 > ...

  9. jsp-静态包含和动态包含的区别

    include指令是静态包含.静态包含的意思就是:把文件的代码内容都包含进来,再编译! include指令是静态包含,include行为是动态包含.其实include行为就是封装了request.ge ...

  10. Java 基础学习总结(一)抽象类和接口

    接触java的时间不是很长,以前对抽象类和接口的定义和区别也是模糊不清,最近拿起学校的教程读了起来,也参阅了网上的博客大神理解和总结,于是决定自己按照自己的理解来总结一下. 抽象类(半成品)   一般 ...