歡迎光臨
每天分享高質量文章

開源/免費界面自動化測試工具對比研究

摘要:

隨著我行自動化測試實施範圍的不斷擴大,參與界面自動化測試的應用系統越來越多。我行的應用系統現階段多採用商用工具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’,“[email protected]”)。

(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在客戶端的錄製上面比較成熟,定位信息準確。

結束語

本文對比總結了幾種開源/免費的界面自動化測試工具。

目前,我行自動化測試平臺(ATP)為支持不同應用系統的界面自動化測試需求,已經封裝了QTP、Selenium、UIAutomation三款界面自動化測試工具,對用戶提供統一的描述語言,屏蔽了工具間的差異,降低了自動化測試的入門門檻,較好地的滿足了專案使用需求。

後續,我們會進一步加強對開源/免費自動化測試工具的研究,逐步降低對商用工具的依賴。根據實際使用需求,適時引入新的界面自動化測試工具,併進行二次封裝,滿足不同型別應用系統的自動化測試需求,降低使用的難度,節省使用時間,提升測試效率。

赞(0)

分享創造快樂