葉鵬
摘 要:基于Web應用的自動化測試隨著互聯網科技的高速發展已然成為了許多互聯網公司不可或缺的技術領域。但價格高昂的商業測試工具以及其繁冗復雜的使用說明也為不少公司帶來了不小的額外成本。本文將以Solaris平臺的Analytics Webui應用服務為例,介紹如何利用當前互聯網上比較流行的開源軟件和免費資源,開發出適合自身需求特點的Web應用自動化測試腳本。成功的Web應用服務的自動化測試腳本的開發不僅是測試團隊的技術實力體現,更是對其應用服務產品本身開發的高質量監督和保證。
關鍵詞:CTI/TET;Selenium;測試框架;開源;自動化測試
中圖分類號:TP311.5 文獻標識碼:A
Abstract:With the rapid development of internet technology,the automated testing based on web application has become the indispensible technical field in numerous internet companies.However,the expensive business testing tools and complicated instructions bring much extra cost to the companies.Taking Analytics Webui Application Server on Solaris OS platform as an example,the paper introduces how to utilize the popular open-source software and free resources to develop web application automated test scripts,which can meet their specific requirements.The successful development of automation testing scripts for the web application service products is not only the reflection of testing teams technical strength, but also the high-quality supervision and quality-assurance for the development of web application service products.
Keywords:CTI/TET;selenium;testing frame;open-source;automated testing
1 引言(Introduction)
隨著信息技術的發展,互聯網行業日益昌盛并在不知不覺中逐漸滲透到了各個領域。伴隨著成千上萬的互聯網應用軟件產品的開發與產生,人們對基于Web應用的軟件產品的測試需求也與日俱增。
然而,由于Web服務技術規范的復雜性,應用部署的網絡分布性和在線運行形態的多變瞬時性等特點,傳統的軟件測試技術已不能完全滿足其測試工作需求。此外,Web服務提供了一種機器對機器的通訊機制,其軟件測試策略主要基于服務接口進行設計與實現,與傳統需要大量人工干預的測試方法不同,難以通過手工測試方式完成,需采用自動化測試方法[1]。
因此,針對Web應用,業界涌現出了不少成熟且廣為應用的自動化測試框架,一些知名公司也針對用戶的普遍需求,開發出了不少優秀且功能強大的Web自動化測試工具軟件,比如Parasoft公司的webking,MERCURY公司的LR和QTP,IBM公司的Rational Robot等。自動化測試不僅可以大大減少測試人員的工作量,降低工作難度,還可以避免不必要的人為疏忽與測試盲點,加快測試速度,保證產品質量和進度,提高效益[2]。
當然,不菲的價格以及缺少深層業務功能測試定制的靈活性也限制了這些商業化測試軟件在更多公司的普及。不少公司(甚至是一些500強大公司),更傾向于使用開源項目的測試框架和測試平臺,在降低測試工具的來源成本的同時依舊能夠保持靈活的且高技術含量的測試內容及出色的測試質量。本文意在通過介紹Oracle公司的Solaris Core OS QE技術團隊對某項Solaris Web應用服務(Analytics Webui)的測試,來介紹一組完全基于開源項目的自動化測試框架(CTI-TET+Selenium Webdriver)和Python語言腳本的設計及其實現。
2 CTI-TET概述(CTI-TET summary)
2.1 CTI 和 TET
CTI,即Common Test Infrastructure,通用測試框架;TET,即Test Environment Tookit,也叫TETware。最早可以追溯到1989年,由OpenGroup的一群崇尚免費和自由的工程師開發并維護。后來,經過不斷改進和整合,SUN公司于2005年開始使用基于CTI接口的TET,簡稱CTI-TET,并于2007年公布于OpenSolaris社群。它的出現,是為了取代早期的SUN公司的測試工具集Solaris Test Framework(STF)。因其豐富的接口和多語言支持的兼容性,在原SUN公司的Solairs和Solaris Cluster組織里廣為使用和流傳,是專門針對Unix操作系統核心組件和各種核心服務進行自動化測試的。在SUN被Oracle公司收購以后,由于Solaris業務依舊繼續開展,使得這套測試框架和工具集得以繼續沿用和發展。如今的Oracle Solais團隊,依然在使用和維護這套測試工具集,并利用它強大的測試框架作為他們新項目的開發與測試的主流自動化測試工具。
2.2 特點
如今,TETware已經發展到了version 3.8,任何單位或個人,都可以免費下載獲得并使用它們。當然,不少大公司為了更好地利用這套工具,愿意投入一定的金錢購買license以獲得更好的技術支持和功能擴展。CTI-TET也隨著原型測試工具TETware的更新得到了升級和發展。作為一款在SUN/Oracle公司使用近10年的成熟測試工具,其在業界尤其是*unxi領域也享有很高的使用度。概括來說,其測試功能具備以下特點:
(1)支持執行腳本自定義,即可以在測試集合里定義各種非常實用的參數,已期達到不同的測試執行效果。例如:
a.非分布式測試用例的本地化測試運行。
b.非分布式測試用例的異地化測試運行,多節點(最多支持999)遠端運行。
c.分布式測試用例本地與異地同時運行。
d.單一測試用例的隨機選取運行。
e.以上不同測試方式的組合并行測試執行。
f.以上不同測試方式的自定義順序測試執行。
(2)支持分布式測試。
(3)運行模式可以分為隨機式,重復式和并行式。
(4)本質上來講,通過TET的簡單接口,來支持更多的基于CTI Library的工具集OpenGroup在TET里包含了大量的實用的免費測試工具,比如POSIX一致性測試集。
(5)在運行權限上既支持超級用戶(root)也支持普通用戶。
(6)在測試結果上,CTI-TET可以自動收集所有測試信息,包括journal日志、錯誤日志、debug日志、系統日志等。并提供基于Web格式的summary報告,通過報告里的超級鏈接,測試者可以很容易的定位每一個測試用例的journal日志。
3 Selenium概述(Selenium summary)
嚴格說來,Selenium是一套完整的Web應用程序測試系統。它是一種輕便的可以在多平臺操作系統(Windows、Linux、Macintosh)執行的開源軟件,測試用例可以使用HTML tables或者其他多種編程語言來編寫,并且可以直接運行在大部分Web瀏覽器上[3]。它包含了測試錄制(Selenium IDE)、編寫及運行(Selenium Remote Control)和測試的并行處理(Selenium Grid)。早期的Selenium包括Selenium Remote Control(RC)和Selenium IDE,是2004年由ThoughtWorks公司的Jason Huggins用JavaScript語言開發的,被后人稱為Selenium 1。它可以進行頁面的交互操作,并且可以重復地在不同瀏覽器上進行各種測試操作。后來2006年Google公司的工程師Simon Stewart開啟了一個叫Webdriver的項目,可以直接讓測試工具調用瀏覽器和操作系統本身提供的內置方法,以此來繞過JavaScript的沙盒限制。2008年,Selenium和新開發的Webdriver整合到了一起,正式發布為Selenium 2
(簡稱Webdriver)[4]。
3.1 Selenium IDE
Selenium IDE是一種Firefox瀏覽器插件,僅限于安裝Firefox瀏覽器中,可實現網頁操作步驟的錄制和回放,使用此插件可以執行簡單的測試邏輯的自動化測試,可將Selenium IDE插件的腳本導出為Java、Python、C#等語言格式的程序代碼,可將人為操作網頁的各種動作直接轉化為自動化測試的程序代碼,便于編寫更復雜的測試代碼。
優點:小巧簡單,無需編程經驗可快速上手,可以使用列表方式選擇操作命令。
缺點:錄制腳本轉化為其他語言腳本有可能出現一些錯誤,還需要自動化測試工程師做相應的調試和修改。學習此插件需要熟悉HTML、JavaScript和DOM相關。
3.2 Webdriver
(1)實現原理
Webdirver與Selenium 1的JavaScript注入實現不同,它直接利用瀏覽器的內部接口來操作瀏覽器。對于不同平臺中的不同瀏覽器,必須依賴瀏覽器內部的Native Componet(原生組件)來實現吧WebDriverAPI調用轉化為瀏覽器內部接口的調用。它使用的是系統內部接口或函數,首先要找到這個元素的坐標位置,并在這個坐標點觸發一個鼠標左鍵的單擊操作。因此,它可以更好的模擬真實的環境,僅能測試那些可見的頁面元素[4]。
(2)WebDriver的優點[2]:
a.必須操作真實的瀏覽器,但Webdriver可以使用HtmlUnit進行測試,在不打開瀏覽器的情況下進行快速測試。
b.基于瀏覽器的內部接口實現自動化測試,可以更接近用戶的真實情況。
c.提供了更簡潔的面向對象API,提高了測試腳本的編寫效率。
d.使用過程中無需啟動Selenium Server。
e.相比較于Selenium 1,可以調用本機的鍵盤和鼠標事件。
(3)WebDriver+面向對象語言
WebDriver使Selenium用戶在完成自動化測試任務中明顯體會到強大的技術優勢。這主要歸功于它對面向對象語言的支持,比如對Java、Python語言的支持。編寫代碼簡單、易懂,相比較用QTP錄制腳本,Selenium/Webdriver腳本更易于維護,真個測試框架可以用面向對象思想進行設計,框架復用性高,不足之處就是它對測試步驟中的驗證支持度不夠,需要用戶自己開發額外的功能代碼來實現[2]。
4 測試需求與分析(Testing requirement and analysis)
(1)測試目標
關于軟件測試目標,人們在長期的實踐中逐漸有了統一的認識,既首要目標是預防錯誤,如果能實現這一目標,那么就不需要修正錯誤和重新測試[3]。
(2)Web服務與應用測試
Web服務(Web service)是針對因特網上分布計算提出的一種基于開放標準、松散耦合及跨平臺的新型軟件構件,已廣泛應用于通信、金融、地理信息、電子政務、手持設備等領域,成為當前和未來網絡分布式應用的主流軟件開發工具[1]。
Web應用具備內容驅動,易于導航,平臺無關性、分布式、動態性、交互性、美觀性、既時性、持續演化性和安全性等特點,這就決定了針對Web應用的測試相比于桌面應用軟件或系統服務/中間件軟件來說有其自身特有的測試原則和基準。在設計測試內容的時候,根據特點可劃分為:系統性能測試、瀏覽器兼容性測試、Web系統安全性測試,以及Web易用性測試[6]。
(3)Solaris Analytics Web應用測試
Oracle Solaris Analytics是一個隸屬于甲骨文公司即將于2017年發布的新的Oracle Solaris12原生態核心服務的系統檢測和診斷工具。它是通過調用Oracle Solaris Analytics Statistics Store的接口,通過網頁將系統性能檢測和診斷的數據以圖表的形式展現出來。即使是不具備資深Solaris技術背景的工程師,也可以輕松對系統的性能和故障進行診斷和分析。所以從結構上概括地說,它分為兩個部分,后臺部分就是Soracle Solaris Analytics Statistics Stroe(簡稱Sstore),它為調用者提供數據源接口;前臺就是Oracle Solaris Analytics BUI(簡稱Webui),即通過對接口的調用,對操作系統的數據源以圖表(Chart)的形式在Web頁面里動態顯示。關于接口的測試雖然也屬于Web應用測試的一個范疇,但不在本文的介紹范圍之內。本文著重介紹基于瀏覽器交互操作的測試,即analytics BUI方面的測試。
該測試實際上是基于事物流的一種功能測試技術。事物由一系列操作組成,可用一個事物流表達之。事物流中的某些操作可能有系統執行,某些操作可能由用戶或系統之外的設備執行,它們共同協作,完成用戶的一項工作。可見,一個事物流是系統行為的一種表示方法,為功能測試建立了程序的動作模式[5]。
5 測試運行機理與基本流程(Mechanism for testing
execution and elementary procedure)
5.1 自動化測試
軟件自動化測試就是使用自動化測試工具來代替手工進行一系列測試動作,以及驗證軟件是否滿足需求,包括測試活動的管理和實施。自動化測試主要是通過所開發的軟件測試工具,腳本等來實現,其目的是減輕手工測試的工作量,已期達到節約資源(包括人力、物力等),保證軟件質量,縮短測試周期,提高測試效率的目的[4]。自動化測試的優點:
a.程序的回歸測試更方便。
b.可以運行更多更繁瑣的測試。
c.執行手工測試很難或不可能進行的測試。
d.充分利用資源。
e.測試具有一致性和可重復性。
f.讓產品更快面向市場。
g.增加軟件信任度。
5.2 CTI-TET/Webui-core
既然自動化測試具備那么多的優點,如何部署和開發一個針對本Web應用的自動化測試腳本使其可以代替人工測試來高效的完成回歸測試任務,便成為了工程師們需要花精力去研究的工作。經過一段時間的探討和研究,工程師們終于完成了基于甲骨文公司內部已有的測試框架的自動化腳本的設計與開發。這組測試腳本的Suite目前命名為webui-core。
如圖1所示,測試需要兩臺裝有Solaris操作系統的機器。一臺為測試機,負責運行基于CTI-TET測試框架的TEST SUITE(webui-core);另一臺為目標被測試機,裝有Analytics Webui服務和Analytics Sstore服務,Webui需要根據訪問請求隨時調用Sstore API以獲得能動態匯報本機系統性能及狀態的源數據。
測試機通過運行SUITE測試腳本,向遠端的被測試主機的Analytics Webui發送Secure HTTP訪問請求,通過登錄驗證建立session后,就可以進行一組測試了,比如點選按鈕、創建/刪除圖表、暫停/啟動動態曲線圖頁面等。在完成一組測試內容之后,通過點選logout按鈕正常退出來終止session。
在測試運行過程中,SUITE測試機會經常以無密碼SSH通道方式在后臺訪問被測試主機終端,進行一系列必要的后臺操作工作,比如清理webui json配置文件、重啟服務、通過CLI指令調用Sstore以獲得進行測試結果校驗比對的源數據等。
6 測試腳本設計與實現(Design and implementation
for testing script)
6.1 測試功能模塊
基于Web頁面的測試,要想達到Solaris軟件合格的工業級質量檢測和保證,需要對Analytics Webui應用有比較深入的理解。因此,在設計測試用例的時候,就需要針對其功能和業務內容,通過參閱該軟件設計和文檔說明,進行詳實的測試需求分析。為了便于測試者快速理解設計思路,以及將來測試腳本的實現,我們將被測業務以模塊的形式進行分類,每個模塊可以理解為包含一組相同事物流的測試用例。如圖2所示,我們將被測業務按功能劃分為八大模塊。
6.2 設計與實現
在完成被測模塊的劃分以后,接下來就可以考慮具體的軟件設計和實現了。CTI-TET這套測試體系,支持多種編程語言的實現,例如C、Java、Perl、Ksh、Python等。在綜合考慮開發成本、可擴展性、可維護性后,我們決定采用Python語言作為主要的腳本實現語言。Python之所以能夠在時下成為比較流行的廣受大家歡迎的語言,與其語法簡明,易學易用,以及對OO(面向對象)設計很好支持有很大的關系。通過對testcase類的設計,我們可以很容易的實現類繼承以及方法的復用,加上Selenium的WebDriver為Python也提供了非常豐富強大的API接口,在腳本設計與實現上還是相對比較容易的。如圖3所示,通過對某一事物模塊的測試運行的順序圖示例,我們可以對它的測試腳本的設計特點及運行過程窺見一斑。
順序圖[3]是基于UML的用于建立面向對象分析的輔助模型,它是二維的,其中,垂直方向表示運行時間,水平方向代表不同的對象或參與者。在這個順序圖里,對象分別指run_test、tc_module、tp_case_01、tp_case_02。由于是單進程運行,所以我們可以看到這四個運行對象在時間上彼此銜接,但是不存在運行重疊(即不存在多線程/進程并行執行的情況)。
當然,圖3介紹的只是suite中的通用運行環節,要完全實現測試的腳本自動化,還需要在并行測試、configuration/unconfiguation、x86/i386平臺劃分、3rdtools需求規劃等方面進行考慮。此外,如何合理利用CTI的日志報告的接口函數cti_report(),以及python自帶的logging module來定義測試結果報告格式,以及在后期如何設計DEBUG接口以期高效快速的進行故障分析和維護,都需要進行合理的規劃與設計。
7 結論(Conclusion)
自動化測試跟早期的傳統的軟件手工化測試在測試理念和測試方式上都有很大的不同。雖然它由于缺少測試靈活性而無法完全替代后者,并且也很不適合在產品開發初期就被過早地使用,但在需要大量重復性工作的回歸測試需求中,以及一些無法通過手動操作來進行的測試(比如性能測試、極限應力測試等),它就變得非常的不可或缺和重要。綜合考慮時間成本和測試質量,它是產品開發后期及產品更新與維護過程中的最佳測試選擇方式。
而基于Web頁面的自動化測試由于其自身的特點,相對于CLI(交互式命令行)測試在自動化測試設計與實現上,由于涉及較廣的技術領域,在部署和環境搭建上也相對比較繁冗復雜,因此存在一定的技術難度(尤其是在非Windows系統環境下),這為很多在該領域進行測試與測試腳本開發的工程師帶來了不少挑戰,無形中也為該領域Web相關產品的開發進度和質量監測帶來了一定的影響。對于一個長期從事*unix系統服務,以及中間件相關軟件測試的團隊(Solaris Core OS QE Team),測試工程師們需要開闊技術視野和思路,不被固有的設計理念和模式禁錮,應該學會利用已有的開源資源(CTI-TET、Python/Ksh、Selenium/Webdriver)和測試環境(Solaris OS/Desktop/Firefox),并發揮自身的硬件測試環境優勢(強大的SPARC硬件性能),創造性的設計新的測試框架并付諸實現。這樣才能豐富和完善團隊的測試領域和測試技術水平,同時也能夠更好的完成產品的質量評估與檢測,協助公司開發部門順利完成新產品的研發工作。
參考文獻(References)
[1] 馬春燕,朱怡安,陸偉.Web服務自動化測試技術[J].計算機科學,2012,2(2):162.
[2] 盧晨.基于Selenium進行Web應用測試研究[J].軟件導刊,2015,
14(1):154-155.
[3] Christof Ebert.Web Application Tests with Selenium[J].IEEE Software.September/October 2009:88.
[4] 吳曉華.Selenium WebDriver實戰寶典[M].北京:電子工業出版社,2015.
[5] 王立福,孫艷春,劉學洋.軟件工程(第3版)[M].北京:北京大學出版社,2009.
[6] 蘭景英,王永恒.Web應用程序測試[M].北京:清華大學出版社,2015.
作者簡介:
葉 鵬(1976-),男,碩士,高級工程師.研究領域:Linux分
布式集群文件系統測試,Solaris操作系統install/
analytics測試.