亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源功能測試工具 > Selenium
如何記錄Selenium自動化測試過程中接口的調用信息
作者:不再有的年月 發布時間:[ 2017/4/13 13:43:43 ] 推薦標簽:Selenium 功能測試 自動化測試

  上一篇博客,我寫了python自動化框架的一些知識和粗淺的看法,在上一篇中我也給自己提出一個需求:如果記錄在測試過程中接口的調用情況?提出這個需求,我覺得是有意義的。你在測試過程中肯定會遇到一些莫名其妙的問題,比如:web某個頁面一直在刷進度條,導致你定位元素失敗,但是,你再手動操作一遍可能無法復現....對于我們來說,肯定會遇到許多類似的問題。你會發現有時候僅僅靠一張截圖,你遠遠找不到bug的原因。這時候,我在想如果我能拿到這一系列操作所調用的接口信息多好,我能明白為什么發生這種問題了。比如一直在刷進度條我覺得有幾種情況:
  1.后端一直在等待某個接口的響應信息。
  2.網絡原因導致,接口響應很慢(局域網一般很少出現這類問題)、
  3.前端工程師沒有動態的把這個進度條display="None"....不論何種原因,我拿到相關的接口信息,能對錯誤逐個排除。比如我發現某個接口的響應時間很長.....或者所有接口的響應的時間多是大于1s的,又或者都正常響應,原來js沒有動態改變進度的屬性?反正無論如何我拿到自動化操作的接口信息是沒有壞處的吧?(小小的缺點我后面提到)
  那么問題是,我們如何的拿到這些信息?我開始的想法是通過firebug去拿,firebug我們平時用的也比較多,可以方便的看到控制臺信息(js的執行情況)和網絡信息(接口調用情況),但是我查了很多資料都沒有辦法完整的把這些信息給導出來....但是,我很快的想到了Fiddler。Fiddler是目前為止我用的好順手的一款http抓包工具(不要和我提什么wireshark,雖然經過網卡的信息它都能抓但是僅對http協議來說,真不如fiddler牛逼,誰用誰知道),更重要的是由于它是個代理服務器,所以能抓任何設置其為代理的終端,包括手機...想到這,心中一陣竊喜。下面我先說說思路,然后再詳細的說明,我是怎么做的。我的思路如下:
  1.設置fiddler過濾一下抓取信息,如:只抓取host為:*.csdn.net的接口信息。
  2.測試執行開始前,打開fiddler。
  3.當執行一個test時,先在fiddler控制臺輸入cls,清空當前sessions,防止接口信息過多或混在一起不方便排查錯誤。
  4.當執行test完畢,如果有錯誤,則保存此test執行過程中的所有sessions至一個文件夾。無錯誤不做操作(如果你非要保存也是可以的)
  5.重復2-3的步驟,直至所有測試結束。
  6.測試執行結束后,關閉fiddler。
  上面的想法,其實也是很簡單的,我們再一個個看看如何實現:
  對于步驟1/2/5  用python調用控制臺打開fiddler是有問題的(主進程會阻塞,其他應用程序沒問題),改用AutoIt的run方法,關閉沒問題。
  對于3/4是要想想辦法的。對于自動化人員來說AutoIt您應該是接觸過了,如果沒有去看看吧!AutoIt有弊端有優點,大的優點是編寫簡單、腳本能轉換成exe.大的缺點:windows非標準控件無法獲取。萬幸的是Fiddler的控制臺輸入框能被AutoIt識別!還有是如何改寫Fiddler的Scripts。(我們的需求很簡單,別被嚇到了)
  所以第一步:我們編寫清除fiddler session的腳本,轉換成C_interface.exe。腳本簡單到不能簡單了,如下:
Example()
Func Example()
Local $hWnd = WinWait("[Title:Telerik Fiddler Web Debugger]", "", 10)
WinActivate($hWnd);激活當前窗口
ControlFocus($hWnd, "","[CLASS:WindowsForms10.EDIT.app.0.141b42a_r6_ad1;NAME:txtExec]")
ControlSetText($hWnd, "", "[CLASS:WindowsForms10.EDIT.app.0.141b42a_r6_ad1;NAME:txtExec]","cls")
Send("{ENTER}")
EndFunc  ;
  照顧一下,剛開始看AutoIt的同學,Title中的Telerik Fiddler Web Debugger與ControlFocus中的CLASS、NAME是通過AutoIt Window info這個工具捕捉的,我們的可能不一樣貼圖一張:

  我們寫完了了清除session后,再來寫下保存接口信息的腳本,也很簡單保存為D_interface.exe:
Example()
Func Example()
Local $parment=$CmdLine[1];接受控制臺數據,$parment為fiddler接口保存路徑
Local $hWnd = WinWait("[Title:Telerik Fiddler Web Debugger]", "", 10)
WinActivate($hWnd);激活當前窗口
ControlFocus($hWnd, "","[CLASS:WindowsForms10.EDIT.app.0.141b42a_r6_ad1;NAME:txtExec]")
ControlSetText($hWnd, "", "[CLASS:WindowsForms10.EDIT.app.0.141b42a_r6_ad1;NAME:txtExec]","dump "&$parment)
Send("{ENTER}")
IF WinActive("[Title:Cannot Save SAZ]") Then
ControlClick("[Title:Cannot Save SAZ]","","Button1")
EndIf
EndFunc ;
  標紅部分的解釋是:當Fiddler沒有session時(雖然不太可能出現這種情況),執行dump命令會彈出個對話框,這時候要關閉對話框!!如果不關閉的話下面對fiddler的操作會出現問題,因為這時候彈出框是fiddler的窗口,可能導致腳本中使用Enter鍵無效...
  其次,由于python調用控制臺啟動Fiddler有問題(具體問題原因未知),所以我們也用AutoIt編寫,并轉換成S_interface.exe:
  Example()
  Func Example()
  Local $parment=$CmdLine[1]
  Run($parment)
  EndFunc   ;
  后,我們改下Fiddler的Script的,從菜單的Rules->Customer Rules打開腳本剪輯器,直接拉到script的末端修改方法OnExecAction如下:
......
case "dump":
UI.actSelectAll();
var bpMethod = sParams[1]
//UI.actSaveSessionsToZip(CONFIG.GetPath("Captures") + "dump.saz");
UI.actSaveSessionsToZip(bpMethod)
FiddlerObject.StatusText = "Dumped all sessions to " +bpMethod;
//FiddlerObject.alert(bpMethod);
UI.actRemoveAllSessions();
return true;
  修改case 'dump'的情況,bpMethod是由命令bump空格后的參數。對應于上文我們AutoIt腳本中的$parment參數(由控制臺輸入)。
  上面我們的準備工作的做的差不多了,總結一下,干了下面的幾個事情:
  1.用AutoIt生成了清除Fiddler session的一個exe
  2.用AutoIt生成了保存Fiddler session的一個exe
  3.修改了Fiddler的Script接受一個保存session路徑的一個參數
  在完成了以上工作后,我們來進行測試!注意:在此之前我們要明白一些事情:
  1.用Fiddler做代理后,可能影響接口的加載速度,畢竟有個第三者。但是我覺得速度影響在web自動化上不是那么重要的事情,畢竟現實中的訪問速度肯定比你公司內部訪問速度更差。(缺點之一)
  2.用Fiddler做代理后,我們知道在訪問https的時候比如訪問百度,可能顯示非安全鏈接,我們平常的做法是把fiddler的證書導入瀏覽器(具體百度上有說明),但是我們webdriver啟動的是個空白的瀏覽器,如何能自動加載Fiddler證書?
  3.用Fiddler做代理后,如果Fiddler崩潰或者沒啟動起來造成無法聯網導致所有腳本無法運行,這個風險我們如何規避?
  第一個問題跳過,我們看看第二個問題:
  在路徑C:Python27Libsite-packagesseleniumwebdriverfirefoxfirefox_profile.py下定義了一個FirefoxProfile類,這個類我們平時可能不太用的上,但是用不上不代表他不重要,這個類是個管理瀏覽器插件的類。我們說明一下:
  1.其構造函數傳火狐瀏覽器的插件路徑。火狐瀏覽器的插件一般在C:Users***AppDataRoamingMozillaFirefoxProfiles****.default-*****"這個路徑下面。構造函數會把這個路徑下的東西copy到c:\users\pf-211x3\appdata\local\temp\***\webdriver-py-profilecopy這個文件夾下。
  2.encoded函數。這個函數的文檔屬性這樣解釋:"A zipped, base64 encoded string of profile directory for use with remote WebDriver JSON wire protocol"具體很么意思呢?是這個函數會把上文中我們提到的c:\users\pf-211x3\appdata\local\temp\***\webdriver-py-profilecopy這個文件夾壓縮成ZIP格式文件,然后對這個文件進行base64的編碼,當啟動瀏覽器的時候,會將這個編碼一同發給服務器,服務器再對他base64解碼、解壓縮將您本地火狐插件完完整整的復制到新啟動的空白瀏覽器上,那么我們新啟動的瀏覽器擁有了本地瀏覽器所有的插件了。
  3.set_preference。傳遞一個鍵值對,是設置火狐瀏覽器的選項,比如設置代理等等....
  4.add_extension。傳遞一個***.xpi的路徑,是設置瀏覽器加載的插件,比如啟動瀏覽器加載firebug,把firebug插件路徑傳遞給add_extension即可
  經過我對FirefoxProfile類的說明,您大概知道了問題二的解決辦法了吧,對的是向FirefoxProfile類中傳遞插件的路徑。但是C:Users***AppDataRoamingMozillaFirefoxProfiles****.default-*****"這個文件是比較大的反正我的是50M,將這樣一個大的文件經過步驟2的操作,是個費事費力的事情。所以你們會發現,如果把完整的插件路徑傳遞給FirefoxProfile,經過一系列的壓縮、傳遞,啟動本地瀏覽器會非常非常慢!經過排除和嘗試法,我發現火狐對證書的控制是由插件文件夾下的cert8.db控制的,所有我們把這個文件給拷貝出來放在一個文件夾中,單獨傳這個文件夾路徑即可。

上一頁12下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 狠狠干人人干 | 日韩性生活大片 | 免费观看成人羞羞视频网站观看 | 亚洲无线码一区二区三区在线观看 | 天天插天天爽 | 国产伦一区二区三区高清 | 中文字幕一区在线观看视频 | 亚洲一区视频在线播放 | 欧美日韩在线播放一区二区三区 | 人人天天夜夜 | 国产成人午夜视频 | 人成网站在线观看 | 日韩在线观看高清 | 免费人成网站在线高清 | 在线视频一二三区 | 98精品国产高清在线看入口 | 欧美日韩国产免费一区二区三区 | 日韩欧美专区 | 欧美亚洲免费久久久 | 日韩午夜剧场 | 最近中文字幕免费完整 | 521a久久九九久久精品 | 国产三级在线视频观看 | 色网站免费在线观看 | 97色噜噜刺激有声小说 | 伦理 在线| 在线观看黄色大片 | 一级在线毛片 | 日韩色图区 | 1717she精品国产真正免费 | 免费在线看a| 国产成人综合在线观看 | 老色批在线播放视频网站免费 | 全免费午夜真人毛片视频 | 免费看黄网站在线 | 91视频免费入口 | 在线观看黄色大片 | 一区二区三区免费高清视频 | 色欧美片视频在线观看 | 老司机免费午夜精品视频 | 成人满18在线观看网站免费 |