sinsonglew

     作者:Sinsonglew 出处:http://www.cnblogs.com/sinsonglew 欢迎转载,也请保留这段声明。thanks :)

 

     写起来有点操作手册的感觉,望各位园友见谅。

 

1. 背景

         如何测量某个http接口(资源加载)的性能,如何测量多个http接口的性能

 

2. 工具选型

      curl, charles, fiddler ?

      curl 无法提取接口时间

      charles 不支持批处理

      fiddler 支持批量,但不熟悉

     

3.  如何使用fiddler支持命令行

     fiddler支持customize rules, QuickExec命令行(类似浏览器里的console);

      customize rules 顾名思义就是支持用户编写脚本来对http请求进行处理。

  customize rules, QuickExec位置如下图所示:

  

 

            

    cutomize rule 打开是一个类似js脚本的文本文件,找到其中的OnExecAction(sParams: String[])函数,OnExecAction就是对QuickExec里输入的命令行的响应函数;

    在OnExecAction函数中存在多个内置的命令case分支,比如dump命令,是删除所有的fiddler的抓包。由此,个人需要的customize操作就是自己写一个新的case分支。

 

4.  我的catch分支

     代码含义如下: 分析一个页面、两个swf文件,1个api接口的请求响应时间,精确到毫秒,把单次请求的数据输出到本地,每次打开一个页面输出1个文件,注:gs_TextCounter是在OnExecAction函数外定义的静态全局变量

    case "catch":
        
        var s:String = "";
        var filter:String[] = new String[sParams.Length-1];//["abcde.html","player.swf","xxx.yyy.zzz/api","ad.swf"];
        for(var t = 0; t < filter.Length; ++t)
        {
            filter[t] = sParams[t+1];
        }

        var oSessions:Session[] = FiddlerObject.UI.GetAllSessions();
        for (var x = 0; x < oSessions.Length; ++x) {
            for(var y = 0; y < filter.Length; ++y){
              if((oSessions[x].url.EndsWith(".html") || oSessions[x].url.EndsWith(".swf") || oSessions[x].url.indexOf("api") > -1) && oSessions[x].responseBodyBytes.Length > 0 && oSessions[x].url.indexOf(filter[y]) > -1)
              {
                  s = s + filter[y] + ",";
                  //s = s + oSessions[x].Timers.ClientConnected.ToString("hh:mm:ss.fff") + ",";
                  s = s + oSessions[x].Timers.ClientDoneRequest.ToString("hh:mm:ss.fff") + ",";
                 // s = s + oSessions[x].Timers.ServerConnected.ToString("hh:mm:ss.fff") + ",";
                 // s = s + oSessions[x].Timers.ServerGotRequest.ToString("hh:mm:ss.fff") + ",";
                 // s = s + oSessions[x].Timers.ServerBeginResponse.ToString("hh:mm:ss.fff") + ",";
                 // s = s + oSessions[x].Timers.ServerDoneResponse.ToString("hh:mm:ss.fff") + ",";
                 // s = s + oSessions[x].Timers.ClientBeginResponse.ToString("hh:mm:ss.fff") + ",";
                  s = s + oSessions[x].Timers.ClientDoneResponse.ToString("hh:mm:ss.fff") + ",";
                  s = s + oSessions[x].Timers.ClientDoneResponse.Subtract(oSessions[x].Timers.ClientDoneRequest).TotalMilliseconds + "\n";
                  break;
              }
              //s.AppendFormat("{0},   {1},   {2},   {3},   {4},   {5},   {6},   {7}\n",

          }
         }
         //Utilities.CopyToClipboard(s);
         try
         {
             var sFileName:String = "d:/temp/" + filter[0] + gs_TextCounter + ".txt";
             var sw:StreamWriter = new StreamWriter(sFileName, false, Encoding.UTF8);
             sw.Write(s);
             sw.Close();
             ++gs_TextCounter;
         }
         catch (ex:Exception)
         {
             MessageBox.Show("Error.");
         }
         FiddlerObject.UI.actRemoveAllSessions();
         //FiddlerObject.UI.actClearWinINETCache();
         //FiddlerObject.UI.actClearWinINETCookies();
        return true;

 

5.  开始batch

    批处理脚本为bat文件,win7运行环境, 脚本的用途是发起2次请求,抓取红色字体的4个资源或接口

    注: sta.py python 脚本是把n次请求的数据处理为一个表单

 

start fiddler -quiet

timeout 4

for /l %%i in (1,1,2) do (

    rem /* Deletes browser cache, history, cookie */
    RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 4351

    start iexplore "abcde.html"

      timeout 10

    "C:\Program Files\Fiddler2\ExecAction.exe" "catch abcde.html player.swf xxx.yyy.zzz/api ad.swf "

      timeout 10

    taskkill /im iexplore.exe /f

        timeout 6
)

rem c:\Python34\python.exe sta.py  d:\temp\  abcde

exit

 

6.  参考文献

    http://fiddlerbook.com/Fiddler/dev/ScriptSamples.asp

     Debugging with Fiddler (google book, 可参考大部分fiddler的详细内容): http://books.google.com.hk/books?id=qyWhLU1armgC&pg=PA196&lpg=PA196&dq=FiddlerObject&source=bl&ots=Pr-NulyNv0&sig=LK5UHkbqe2Yh1l0dS2rGP6f-NDI&hl=en&sa=X&ei=GRlXVMeSLIKA8QXJn4LABA&ved=0CCgQ6AEwAw#v=onepage&q&f=false

  

 

分类:

技术点:

相关文章:

  • 2021-09-19
  • 2021-11-04
  • 2021-06-16
猜你喜欢
  • 2021-08-15
  • 2021-09-27
  • 2022-01-14
  • 2021-07-14
  • 2021-05-09
  • 2022-12-23
  • 2021-11-09
相关资源
相似解决方案