摘要:
隨著我行自動化測試實施範圍的不斷擴大,參與介面自動化測試的應用系統越來越多。我行的應用系統現階段多採用商用工具QTP(UFT)作為執行工具來進行介面自動化測試,採購的QTP license是有限的,使得資源的競爭越來越激烈。未來,使用開源/免費的介面自動化測試代替QTP,是必然發展的趨勢。本文基於前期調研結果,對比分析了幾款業界主流的開源介面自動化測試工具,供自動化測試相關人員學習參考。
關鍵字:開源、自動化測試、Selenium、UIAutomation
- 調研背景與意義
自動化測試由手工測試發展而來,在當前商業銀行“持續迭代、快速交付”的大背景下,自動化測試是必然趨勢。對於投產前的全量回歸測試和大量資料的業務邏輯改寫測試,自動化測試將大大的減少人力投入,提升測試效率,擴大測試改寫面,降低投產風險。
前期,我行介面自動化測試工具主要依賴QuickTest Professional(簡稱QTP,現已升級更名為UFT)。該軟體具有價格昂貴、客戶端架構龐大、license有限、對部分C/S類應用(比如:BoEing客戶端、銀企通客戶端、海外分行OIBS客戶端等)支援不良等原因,其被開源或免費的自動化測試工具取代是必然趨勢。
- 工具介紹
前期,系統支援部組織調研了十餘款介面自動化測試工具,下麵介紹幾種業界主流的開源/免費介面自動化測試工具。
2.1 Selenium
Selenium是Throught Works公司開發的開源Web功能測試工具集,是當前web端系統最受歡迎的開源自動化測試工具之一。Selenium包含了測試的錄製(Selenium IDE),測試的並行處理(Selenium Grid),編寫與執行(Selenium Remote Control)。Selenium Grid主要架構圖如圖1所示,Selenium Grid主要包含兩個核心元件:Selenium Hub與Remote Control(簡稱RC,或Selenium RC)。Selenium hub負責分發測試用例給Selenium RC;Selenium RC負責呼叫瀏覽器驅動執行自動化測試指令碼。
圖1 Selenium Grid架構圖
Selenium中定義瞭如下強大的描述元素的定位方法:
(1)透過id、name定位,如:selenium.tye(“id=abc”,“百度”);selenium.type(“name=search”,“百度”)。
(2)透過link=連結文字定位,如selenium.click(“link=最近更改”)。
(3)根據xpath定位,如selenium tpye(“xpath=//input[@name=‘user.email’,“xxx@qq.com”)。
(4)Dom選擇及Css選擇器定位(不常用)。
2.2 UIAutomation
UIAutomation是微軟開發的介面自動化測試工具,是.NET Framework的元件之一,可進行C/S類應用的介面自動化測試。此自動化庫一開始就是為可訪問性和UI測試自動化任務而專門設計的,使用UI自動化庫來測試執行支援.NET Framework的作業系統,例如Windows XP、Windows Vista、Windows 7、Windows Server 2003和Windows Server 2008等作業系統主機上的Win32應用程式、.NET Windows窗體應用程式和WPF應用程式。
在UIAutomation中,所有的窗體、控制元件都表現為一個AutomationElement,AutomationElement中包含此控制元件或窗體的屬性,在實現自動化的過程中,透過其相關屬性進行對控制元件自動化操作。所有顯示在桌面上的UI,其實際上是一個UI Tree,根節點是Desktop。在UIAutomation中,根節點表示為AutomationElement RootElement。透過根節點,可以透過窗體或控制元件的Process Id、Process Names或者Windows Name找到相應的子AutomationElement,例如Dialog、Button、TextBox、CheckBox等標準控制元件,透過控制元件所對應的Pattern進行相關的操作。
UIAutomation的體系結構如圖2所示:
2 UIAutomation的體系結構
(1)在服務端由UIAutomationProvider.dll和UIAutomationTypes.dll提供;
(2)在客戶端由UIAutomationClient.dll和UIAutomationTypes.dll提供;
(3)UIAutomationCore.dll為UI自動化的核心部分,負責Server端和Client端的互動;
(4)UIAutomationClientSideProvides.dll為客戶端程式提供自動化支援。
2.3 Watir
Watir是基於Ruby庫的開源Web自動化測試工具,支援Firefox、Opera、IE等瀏覽器。Watir指令碼以.rb為檔案副檔名,指令碼頭應為“require ‘watir’”,確保可以訪問Watir工具。Watir指令碼的執行樣式是Watir-WebDriver,Watir-WebDriver是基於Ruby開發web驅動框架,支援所有的HTML元素。目前網上關於Watir的介紹資料較少。
在設計Watir自動化測試指令碼時需要熟悉常用的Ruby指令碼語法。Watir常用語法列舉如下:
(1)建立一個IE的測試實體:ie=Watir::IE.new或者使用start方法建立一個瀏覽器實體並轉到一個頁面,ie=Watir::IE.start(“http://abc.com”;);
(2)頁面導航:ie.goto(“http://abc.com”;);
(3)操縱超連結、核取方塊、下拉框等Web頁面物件,例:使用name屬性設定核取方塊,ie.checkbox(:name,”check”).set。
2.4 Sahi
Sahi是一款由印度公司Tyto Software開發的基於業務的開源Web自動化測試工具。Sahi執行為一個代理伺服器,並透過註入JavaScript來訪問Web頁面中的元素。Sahi支援HTTPS並且獨立於Web站點,簡單小巧卻功能強大。它相對於Selenium等自動化測試工具,在動態ID元素查詢和隱式頁面等待處理等方面具有一定的優勢。
Sahi簡單易用,能夠很好地支援Ajax和Web2.0技術,同時適用於敏捷和瀑布兩種專案樣式。Sahi自帶錄製功能,支援幾乎所有的瀏覽器,且對JS支援較好,具備頁面等待判斷機制、內建Java異常報告、支援Ajax等優勢。尤其值得一提的是,Sahi內建的智慧頁面等待機制,能夠自動判斷Ajax請求是否已經處理完畢,然後繼續下一步操作。並且這一點對於使用者是“隱式”的,不需要增加額外的程式碼。
Sahi的工作原理大致分為三步:錄製、精煉指令碼和回放,具體步驟如下:
(1)錄製:首先將Sahi其設定為瀏覽器的代理伺服器,這樣Sahi的指令碼就能夠透過request請求,註入到JavaScript裡以訪問Web頁面中的元素。
(2)精煉指令碼:錄製的指令碼都是指定元素並唯一操作的,這時就需要對程式碼進行重構,抽取出核心的功能塊,對其中的元素進行引數化處理,以實現重用。指令碼中的資料可以從外部的資料庫或檔案中讀取而來。同時,也可呼叫Sahi的API或外部Java等API實現一些特定的功能。
(3)回放:自動執行Sahi精煉好的指令碼,並生成測試報告。
2.5 Katalon Studio
Katalon Studio是一款功能強大的測試自動化解決方案,適用於Web應用程式,支援Mobile、Web、API等型別的自動化測試。它基於Selenium和Appium框架構建,Katalon Studio利用這些解決方案實現整合軟體自動化。
Katalon Studio可以整合到CI/CD流程中,並且可以與QA流程中的流行工具配合使用,包括qTest,JIRA,Jenkins和Git。它還提供一個稱之為Katalon Analytics的功能,這個功能可以透過儀錶板為使用者提供測試執行報告的全面檢視,包括圖表、圖形和指標等。Katalon Studio可以管理頁面元素、測試資料、測試案例、生成自動化測試報告等,改寫整個自動化測試流程及所需資產。Katalon Studio允許使用者自定義Method,Test Listeners、KeyWord,也可以匯入外部的jar包實現更為複雜的功能,該工具的擴充套件性很強。
2.6 Robot Framework
Robot Framework是由諾基亞-西門子基於Python開發的一套開源自動化測試工具,採用關鍵字驅動,並可以透過Python或Java實現的測試庫進行擴充套件,使用者可以使用與建立測試用例相同的語法從現有的關鍵字建立新的更高階別的關鍵字。
Robot Framework框架是跨平臺的,獨立於作業系統和應用程式。核心框架使用Python實現,支援Python2和Python3,並且還可以在Jython(JVM),IronPython(.NET)和PyPy上執行。該框架有豐富的測試庫生態,由各種通用測試庫(包括內建庫、擴充套件庫和自定義庫)和工具組成,這些庫被作為單獨的專案開發。
Robot Framework作為一款跨平臺的通用的、與應用程式和技術無關的測試框架,具有一個高度模組化的架構,具體的架構如下:
3 Robot Framework測試架構圖
該架構清晰的將測試工作分成了4層:資料層、測試框架、測試庫或第三方測試工具、被測系統。Robot Framework起到了一個承上啟下的測試管理平臺,以測試庫和第三方工具驅動測試資料對被測系統開展自動化測試,整個測試過程Robot Framework不與被測系統有任何關聯。
- 工具分析對比
這些工具都是開源/免費的介面自動化測試工具,我們可以根據需要對其進行二次開發與封裝,具有很強的靈活性。
3.1 支援瀏覽器及作業系統
以上工具都具有跨平臺性的特徵。
Selenium支援多種瀏覽器,支援Safari、Google、Chrome、Internet Explorer、Firefox等多種瀏覽器,可以在Mac、Linux、Windows等多種作業系統上執行;
UIAutomation主要支援客戶端應用的錄製,對於web端的控制元件識別能力有限,不建議使用其實施B/S類應用的介面自動化測試。
Sahi同樣支援Safari、Google、Chrome、Internet Explorer、Firefox等多種瀏覽器,可以在Windows、Linux等作業系統上執行;
Watir-WebDriver幾乎支援所有的瀏覽器,比如Chrome、Internet Explorer、Firefox等多種瀏覽器,但是不支援Safari,可以在Mac、Linux、Windows等多作業系統上執行;
Katalon Studio支援Chrome、Internet Explorer、Firefox等多種瀏覽器,可以在Mac、Linux、Windows等多作業系統上執行。
Robot Framework可透過整合外掛支援多種瀏覽器,可以在Mac、Linux、Windows等多作業系統上執行。
3.2 入門的難易程度
Selenium可以直接的透過IDE進行錄製、回放等,降低了入門門檻,指令碼的除錯和維護需要一定的程式設計基礎;
UIAutomation可以使用spy++或者inspect等工具獲取物件定位資訊,再執行指令碼編輯,入門門檻較高;
Watir要求測試人員必須懂基本的Ruby語法規則,需要使用命令列安裝,搭建整合環境複雜,入門門檻較高;
Sahi自帶錄製器,可透過點選頁面來錄製指令碼,並對指令碼進行精煉,支援多種資料源,入門門檻中等;
Katalon Studio工具支援不同級別的測試人員使用。非程式員可以使用Object Spy來記錄測試指令碼。程式員可以更加節省構建和維護指令碼的時間,並基於工具提升擴充套件性,靈活實現所需功能;
Robot Framework需要測試人員自己編寫指令碼,對於關鍵字測試驅動熟悉的測試人員相對容易上手,入門門檻較高。
3.3 支援的語言
Selenium支援多種程式語言,例如Java、PHP、Python、Ruby等。與其他自動化測試相比,Selenium給予使用者自定義測試指令碼的多種方式。
UIAutomation主要支援C#;Watir僅僅支援Ruby語言;Sahi主要支援Sahi script,同時還支援Java和Ruby;Katalon Studio支援Java和Groovy;Robot Framework支援Python、Java。相比較而言,Selenium支援多種程式語言,靈活性較強。
根據以上分析和對比,整理表1工具分析對比圖。
表 1 工具對比分析圖
3.4 總結
綜上,在web端的錄製中Katalon Studio相對簡單易用,錄製指令碼視覺化強,案例編寫維護方便;Selenium支援指令碼語言較多。而UIAutomation在客戶端的錄製上面比較成熟,定位資訊準確。
4 結束語
本文對比總結了幾種開源/免費的介面自動化測試工具。
目前,我行自動化測試平臺(ATP)為支援不同應用系統的介面自動化測試需求,已經封裝了QTP、Selenium、UIAutomation三款介面自動化測試工具,對使用者提供統一的描述語言,遮蔽了工具間的差異,降低了自動化測試的入門門檻,較好地的滿足了專案使用需求。
後續,我們會進一步加強對開源/免費自動化測試工具的研究,逐步降低對商用工具的依賴。根據實際使用需求,適時引入新的介面自動化測試工具,併進行二次封裝,滿足不同型別應用系統的自動化測試需求,降低使用的難度,節省使用時間,提升測試效率。
朋友會在“發現-看一看”看到你“在看”的內容