上篇 《web自動化測試(1):再談UI發展史與UI、功能自動化測試》,自動化測試工具眾多,
PC端常用的功能自動化測試工具
-
Selenium:開源工具集,用於迴歸功能測試或者系統用例說明,也可瀏覽器的相容性。支援JavaScript、java、C等主流語言
-
Monkey:安裝自帶的UI測試工具,主要用來對裝置上的程式進行壓力測試,檢測程式多久的時間會發生異常。monkey命令
-
Loadrunner:商業效能測試工具,收費,功能強大,適合做複雜場景的效能測試。java編寫測試用例
-
QTP(=》UFT):商業收費軟體,支援web,桌面自動化測試。主要是用於迴歸測試和測試同一軟體的新版本,支援VBScript
-
WinRunner
-
QARun
-
Robot
為什麼選擇selenium做講解呢?
selenium
selenium 是一個用於Web應用程式測試的工具。Selenium測試直接執行在瀏覽器中,就像真正的使用者在操作一樣。支援的瀏覽器包括IE7+,Firefox,Safari,Chrome,Opera等。
selenium主要功能
-
測試與瀏覽器的相容性:測試應用程式能否相容工作在不同瀏覽器和作業系統之上。
-
測試系統功能:錄製用例自動生成測試指令碼,檢驗軟體功能和使用者需求,用於迴歸功能測試或者系統用例說明。支援自動錄製動作和自動生成 .Net、Java、Perl等不同語言的測試指令碼。
與其他打交道的測試工具對比
Monkey
Monkey是Android自帶的一套命令列自動化測試小工具,使用 Java 語言寫成,在Android檔案系統中的存放路徑是: /system/framework/monkey.jar;Monkey.jar程式是由一個名為“monkey”的Shell指令碼來啟動執行,shell指令碼在Android檔案系統中 的存放路徑是:/system/bin/monkey;
monkey測試
Monkey測試,就像一隻猴子, 在電腦面前,亂敲鍵盤在測試。 猴子什麼都不懂, 只知道亂敲。通過Monkey程式模擬使用者觸控螢幕、滑動Trackball、 按鍵等操作,向系統傳送偽隨機的使用者事件流(點選、滑動、Application切換、橫豎屏、應用關閉),從而對裝置上的程式進行壓力測試,檢測程式多久的時間會發生異常。
monkey測試是一種為了測試軟體的穩定性,健壯性的快速有效的方法(如測試app 是否會Crash)。monkey測試是一種為了測試軟體的穩定性,健壯性的快速有效的方法(如測試app 是否會Crash)。app release版本(釋出)前,Monkey跑出來的結果中crash要為0,final release前,Monkey跑完的總次數應為25W,結果裡不允許有nullPointException出現。
Android monkey命令只針對Activity做測試,不能對Service做測試。
對於前端H5測試,我們可以編寫相應的monkey指令碼,完成基本的UI互動測試
關於monkey 推薦閱讀《Android壓力測試:monkey測試命令詳解與案例演示》
Loadrunner
Loadrunner之前廣州學了一下,放棄了。真的用起來還是在深圳百果園。不過現在有基本全忘記了。感覺這個東西就是測試工具中屠龍刀,奈何我只把當殺豬刀用(有java基本功、搞下效能測試啥的還是可以的)。
loadrunner的教程非常多,書也很多。慕課網上面的課程也不錯:https://www.imooc.com/search/?words=Loadrunner
所以,這裡也就不多說了。
PhantomJS
phantomjs headless(無頭) 瀏覽器,官網: http://phantomjs.org/,感覺非常硬核*_*,感動的淚流滿面。但是,我只是使用一下其API,也確實能夠整明白咯。
PhantomJS是一個基於WebKit的伺服器端JavaScript API,它無需瀏覽器的支援即可實現對Web的支援,且原生支援各種Web標準,如DOM 處理、JavaScript、CSS選擇器、JSON、Canvas和可縮放向量圖形SVG。PhantomJS主要是通過JavaScript和CoffeeScript控制WebKit的CSS選擇器、可縮放向量圖形SVG和HTTP網路等各個模組。PhantomJS主要支援Windows、Mac OS、Linux三個平臺,並且提供了對應的二進位制安裝包。
PhantomJS 的使用場景如下:
-
無需瀏覽器的Web測試:無需瀏覽器的情況下進行快速的Web測試,且支援很多測試框架,如YUI Test、Jasmine、WebDriver、Capybara、QUnit、Mocha等。
-
頁面自動化操作:使用標準的DOM API或一些JavaScript框架(如jQuery)訪問和操作Web頁面。
-
螢幕捕獲:以程式設計方式抓起CSS、SVG和Canvas等頁面內容,即可實現網路爬蟲應用。構建服務端Web圖形應用,如截圖服務、向量光柵圖應用。
-
網路監控:自動進行網路效能監控、跟蹤頁面載入情況以及將相關監控的資訊以標準的HAR格式匯出。
PhantomJS 已形成了一個功能非常強大的生態圈內容,相關專案如下:
-
CasperJS:一個開源的導航指令碼處理和高階測試工具
-
Poltergeist :測試工具Capybara的測試驅動
-
Guard::Jasmine:能夠基於Rails實現自動化測試Jasmine的Specs
-
GhostDriver:遠端 WebDriver 有線協議的開源實現
-
PhantomRobot:PhantomJS機器人測試框架
-
Mocha-PhantomJS:JavaScript測試框架Mocha的客戶端
此外,生態圈還包括基於PhantomJS實現了眾多截圖工具,如capturejs、pageres、phantomjs-screenshots、manet、screenshot-app等;以及Node.js、Django、PHP、Sinatra等語言的截圖API和Confess、GhostStory、Grover等眾多工具。
之前用這玩意兒做過爬蟲。現在用的最多還是資料頁面截圖及監控。用它做測試比較少。
PhantomJS VS Selenium
Selenium是 ThoughtWorks專門為Web應用程式編寫的一個驗收測試工具。Selenium測試直接執行在瀏覽器中,就像真正的使用者在操作一樣。支援的瀏覽器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。這個工具的主要功能包括:測試與瀏覽器的相容性——測試你的應用程式看是否能夠很好得工作在不同瀏覽器和作業系統之上。測試系統功能——建立衰退測試檢驗軟體功能和使用者需求。支援自動錄製動作和自動生成 .Net、Java、Perl等不同語言的測試指令碼。
用過的同學估計都有感受,就是這貨本質上是依賴於瀏覽器的,每一步操作都是直接操縱圖形化的瀏覽器,這樣無論是從效能還是可程式設計性上來說都差多了。
PhantomJS 則不然,它除了擁有 Selenium 的絕大部分功能之外,更強大的地方在於他是一個“無頭瀏覽器”,沒有圖形化介面,直接面向程式 API 介面,效能和可操作性比 Selenium 高了很多。
QPT
QTP是Quick Test Professional的簡稱,是HP公司的產品。
QTP是一個側重於功能迴歸的自動化測試工具。使用QTP的目的是想用它來執行重複的自動化測試,主要是用於迴歸測試和測試同一軟體的新版本。因此你在測試前要考慮好如何對應用程式進行測試,例如要測試哪些功能、操作步驟、輸入資料和期望的輸出資料等。
-- | Selenium | QTP/UFT |
---|---|---|
是否付費 | 開源免費 | 商用付費,成本涉及許可證。 |
IDE | 沒有IDE | 有IDE |
作業系統 | 各種作業系統 | 只支援Windows。 |
應用型別 | Web,不支援處理Windows控制元件 | Web、Java、.Net、ActiveX、VB、Oracle、PowerBuilder...支援操作Windows控制元件等 |
支援錄製 | 支援錄製,支援所有瀏覽器 | 支援錄製,上手容易,能夠快速實現自動化,錄製回放成功率高。 |
測試型別 | UI自動化、介面自動化 | UI自動化 |
開發語言 | Java、Python、Ruby、Perl、C#、PHP、HTML... | VBScript |
瀏覽器 | Internet Explorer、Firefox、Chrome、Edge、Safari、Opera...移動裝置驅動等 | Firefox,Internet Explorer和Chrome的特定版本。 |
瀏覽器功能 | 不能在瀏覽器中訪問控制。只支援部分IE對話方塊??? | 可以在瀏覽器中訪問控制,如收藏夾欄,後退和前進按鈕。支援各種IE對話方塊。 |
指令碼執行 | 指令碼作用於HTML的DOM(文件物件模型),重點是指令碼執行的進度。 | 指令碼作用於瀏覽器(模擬使用者操作),執行中需要焦點。 |
引數設定 | 必須依賴於程式語言,資料驅動要用程式設計實現。 | 引數是內建的,資料驅動支援靈活。 |
多執行緒 | 可以並聯使用Selenium網格執行測試。 | 不能並行執行測試,但將QTP整合到QC允許測試並行執行。 |
分散式 | 支援分散式執行指令碼 | 僅支援遠端平臺執行指令碼 |
第三方擴充套件 | 靈活輕巧,支援第三方擴充套件,公開DOM各種技術。 | 功能成熟且強大,但有限的附加元件和需要附加元件的技術。 |
恢復方案 | 任何功能部件,例如物件儲存庫/恢復方案 | QTP已經內建恢復方案。 |
測試報告 | 沒有預設生成測試報告。 | 預設的測試結果生成工具中。 |
移動測試 | 支援移動裝置。 | 支援第三方工具的移動裝置。 |
學習難易程度 | 資料較少,官方論壇 | 資料較多 |
UI物件的管理和儲存:QTP的內建了良好的支援。Selenium可以通過使用者擴充套件UI-Element來管理???,不過要在程式碼中寫死,不像QTP一樣可以自動錄製新增。
selenium的優勢
官網:https://selenium.dev/ 推介:Open source record and playback test automation for the web
selenium 是一套完整的web應用程式測試系統,包含了測試的錄製(selenium IDE),編寫及執行(Selenium Remote Control)和測試的並行處理(Selenium Grid)。
-
終端使用者的角度來測試應用程式:
通過編寫模仿使用者操作的 Selenium 測試指令碼,可以從終端使用者的角度來測試應用程式。框架底層使用JavaScript模擬真實使用者對瀏覽器進行操作。測試指令碼執行時,瀏覽器自動按照指令碼程式碼做出點選,輸入,開啟,驗證等操作,就像真實使用者所做的一樣,從終端使用者的角度測試應用程式。
-
selenium可以模擬真實瀏覽器,自動化測試工具,
Selenium的核心Selenium Core基於JsUnit,完全由JavaScript編寫,因此可以用於任何支援JavaScript的瀏覽器上。爬蟲中主要用來解決JavaScript渲染問題。
-
支援語言多:C、 java、ruby、python、或都是C# ,你都可以通過selenium完成自動化測試
概況為:Selenium是一款可以錄製使用者操作,幫助 Web 測試人員簡化重複勞動的開源軟體。
反正,selenium真香!
Selenium 實現原理
Selenium1 引入了 Remote Control Server 這樣一個代理 Server,JavaScript 指令碼注入和與 Server 通訊都通過這個代理 Server 來進行。如下圖所示:
之所以引入這個代理 Remote Control Server 是因為“同源策略”的限制,通過這個代理伺服器來“欺騙”遠端 Server,達到使其以為是從同一個地方 load 程式碼以正確返回請求資料的效果。
流程說明:
-
客戶端建立與 selenium-RC server 的連線。
-
Selenium RC Server 啟動一個瀏覽器(或是已經使用中),並注入 JS 程式碼
-
將 Selenese 程式碼傳到客戶端的 Selenium-Core 中。
-
Selenium-Core 翻譯並解析執行使用者錄製的操作。
-
讓代理 Server 進行通訊
-
Remote Control Server 負責跟遠端 Web 應用伺服器進行通訊。
-
操作完成,顯示結果,並執行下一指令。
以上就是 Selenium Remote Control 的執行原理,接下來的章節中將一步步以圖例加說明的方式快速說明如何使用 Selenium 來錄製指令碼,匯入 Java 工程,然後定期維護工程。
下篇終於回到重點,selenium 的使用實戰 《web自動化測試(3):selenium web測試用例與常用API簡介》
使用 Selenium 實現基於 Web 的自動化測試 https://www.ibm.com/developerworks/cn/web/1209_caimin_seleniumweb/index.html參考文章:
Android Monkey壓力測試使用 https://www.jianshu.com/p/c8844327f5e9
Android Monkey的使用 https://blog.csdn.net/zhaoyanjun6/article/details/71750907
Selenium與QTP的比較 https://www.jianshu.com/p/593736bd44b3
Web 自動化測試與智慧爬蟲利器:PhantomJS 簡介與實戰 https://cloud.tencent.com/developer/article/1043912
轉載本站文章《web自動化測試(2):選擇selenium優勢?與PhantomJS/QTP/Monkey對比》,
請註明出處:https://www.zhoulujun.cn/html/Operation/test/2017_0518_8312.html