上個月自定義了一個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 100; } } }
5.編譯放入Fiddle中
將編譯生成的dll文件放入Fiddler安裝包的Inspectors文件夾下,再次打開Fiddler.選中一個請求,就會顯示出自定義的插件內容了。這里自定義的插件與TextView有點像,都是顯示請求的body內容。