劉壯飛 吳金霖
摘要:文章提供了一種基于Selenium開源框架二次開發的方法,實現對Web項目的自動化測試,通過測試過程中的覆蓋率、準確率、命中率等方面對自動化測試提出要求,期望通過可視化、組件化的方式來實現測試用例的編排和實現,最終實現Web項目的自動化測試驗證工作,提升測試的質量和測試人員的工作效率。
關鍵詞:自動化測試;Selenium;測試質量;測試效率;CRM項目 文獻標識碼:A
中圖分類號:TP391 文章編號:1009-2374(2016)01-0035-02 DOI:10.13535/j.cnki.11-4406/n.2016.01.018
1 背景及意義
CRM(客戶關系管理)系統,其業務特點是開發周期長,補丁發布次數多,需求要求緊,重復工作量大,每次的版本發布均需要做大量的回歸測試,以驗證新上需求對現有業務的沖擊性,目前每次發布一個版本均需要耗費5人日的回歸驗證投入,不算臨時的應急增量發布驗證,僅按照目前一個月發2個版本,一年有24個版本,共計需要投入120人日工作量,且這部分的工作量基本上是機械性的行為,沒有任何技術含量。同時,由于系統的特點,在測試過程中,業務相對復雜,單純依靠人工進行覆蓋測試,很明顯存在工作量大、測試質量低的情況,進而影響到產品的質量,導致客戶滿意度降低,進而影響產品的生命周期。因此,如何做好產品的軟件測試就成為一個亟待解決的緊迫問題。
1.1 國內外研究現狀
目前,業界比較有名氣的是QTP、AutoRunner、Robot Framework、Watir、Selenium測試軟件。其中,QTP是一款老牌的自動化測試工具,既能夠進行C/S框架的測試,也能進行B/S框架的測試,但必須要在Object Repository庫中建立Test Object對象,而且該庫還沒有辦法手工建立,必須使用SPY來抓取,或者在錄制的過程中自動建立。而Selenimu框架是一款優秀的開源框架,并不是單純的一個工具,它是一組工具的集合,每個工具都有其特點和應用場景,并且可以非常方便地進行二次開發,以便于解決實際項目中碰到的特殊問題,自定義開發可行性高。
1.2 Selenium的優勢與不足
Selenium是ThoughtWorks公司的一個強大的開源Web功能測試工具系列。Selenium與Webdriver整合后,形成的新的測試工具叫做Selenium2.x,它提供了完全不同的一種方式與瀏覽器交互。主要新功能是集成的Webdriver的API。Webdriver的設計除了解決一些Selenium-RC API的一些限制外,與Webdriver整合后,將提供一個更簡單、更簡潔的編程接口。Selenium Webdriver會更好地支持動態的網頁,即頁面本身被重新加載頁面元素可能更改的網頁。Webdriver的目標是提供一個設計良好的面向對象的API,提供了更好的支持現代先進的web-app測試。
1.2.1 工作原理。Selenium2.0是利用瀏覽器原生的API,封裝成一套更加面向對象的Selenium Webdriver API,直接操作瀏覽器頁面里的元素,甚至操作瀏覽器本身(截屏、窗口大小、啟動、關閉等)。由于使用的是瀏覽器原生的API,不同的瀏覽器廠商對Web元素的操作和呈現多少會有一些差異,這就直接導致了Selenium Webdriver要分瀏覽器廠商不同而提供不同的實現,例如Firefox就有專門的FirefoxDriver,Chrome就有專門的ChromeDriver等。
運行過程:(1)Webdriver啟動目標瀏覽器,并綁定到指定端口。該啟動的瀏覽器實例,作為Webdriver的Remote server;(2)Client端通過CommandExcuter發送HTTPRequest給Remote server的偵聽端口(通信協議:the webriver wire protocol);(3)Remote server需要依賴原生的瀏覽器組件(如IEDriver.dll、chromedriver.exe)來轉化轉化瀏覽器的native調用。
Remote server端使瀏覽器實現了Webdriver的統一接口,這樣Client就可以通過統一的restful的接口去進行瀏覽器的自動化操作。
1.2.2 優勢與不足。直接在瀏覽器中運行,就像真實用戶所做的一樣。Selenium測試具備以下特點:(1)Selenium框架是開源的框架,支持自定義二次開發;(2)可以在Windows、Linux和Macintosh上的Internet Explorer、Mozilla和Firefox中運行。其他測試工具都不能覆蓋如此多的平臺;(3)通過編寫模仿用戶操作的Selenium測試腳本,可以從終端用戶的角度來測試應用程序;(4)通過在不同瀏覽器中運行測試,更容易發現瀏覽器的不兼容性。當然,Selenium框架也存在不足之處,主要體現在以下方面:(1)主要支持的是B/S框架,對C/S框架無法支持;(2)無法真正判斷頁面上的元素時能生成完畢。
1.3 Selenium的應用與難點
CRM系統主要基于JavaEE架構,前臺的頁面主要使用Ajax(js、css)等語言實現,后臺邏輯主要是基于Spring和Hibernate。同時,由于業務的靈活性特點,沒有一款現有的自動化測試框架能夠直接應用到系統中來。這樣的業務特點和技術架構使得應用Selenium開源框架進行二次開發來定制屬于CRM的自動化測試成為必然選擇。
1.3.1 測試過程。
第一,研究實現自動化測試案例,降低腳本維護成本。對自動化測試的用例,需要對原有的手工測試用例進行分析和改造,主要是要詳細確認每個步驟的驗證點。在手工測試時許多驗證的方式是通過人眼和大腦的判斷,并且在手工用例中大多也沒有特別指明需驗證哪些內容,但在自動化測試的用例中,就必須明確寫明需驗證哪些內容。同時為了降低腳本維護的工作量,就必須對功能點、模塊、流程模板等進行抽象、封裝成測試組件,使其可以復用。對測試案例還提供了數據庫表進行用例配置,方便修改用例數據。
第二,降低用例失敗率、提高bug命中率。在自動化測試案例被執行一段時間后發現自動化測試用例失敗率非常高,絕大多數用例失敗是由于測試數據準備不恰當導致的。由于從數據庫撈出來的測試數據存在許多未知的關聯關系,影響測試的操作步驟,導致用例失敗。由于無法預先排除這些數據,所以只能通過不斷地執行、分析、排除,慢慢積累來降低用例的失敗率。用例失敗率降低了,自然bug命中率就提高了。
第三,自動化測試推廣,提高用例覆蓋率。經過案例執行和分析,用例失敗率降低,可以將其在測試組中推廣試用。原來采用的是往數據庫表中插入用例的測試步驟,但這種方式較不方便,并不能提高測試效率,測試人員不愿意使用。隨后引入自動化測試框架RobotFramework,它采用表格式可視化編程,且中文支持較好,易于理解,測試人員容易上手,因此最后使用RobotFramework+Selenium2.0來開展自動化測試的推廣應用,目前還在前期推廣試用階段。
1.3.2 遇到的困難。
第一,如何選擇自動化測試用例,評估其自動化的回報率。我們知道自動化測試用例的選取,關系到自動化測試能否被正確并且穩定地執行,關系到自動化測試投入與產出的比。但是目前我們只是知道較模糊的一些判斷條件,比如:(1)用例的測試結果可預期;(2)用例需求穩定;(3)用例的復雜度不要太高;(4)用例成功率對數據的依賴較低;(5)盡可能選擇現場可恢復的用例等。但是還沒有一個比較合適的判斷評估標準,只能在實踐中去證明用例是否適合做成自動化,這樣也就增加了自動化測試的投入。
第二,如何提高自動化測試的準確性,降低用例失敗率,提高bug命中率。因為沒有辦法做到所有的測試過程完全可預知,在用例執行過程中還是會遇到許多未知的情況,比如:(1)環境問題;(2)所準備的數據影響原有測試過程;(3)無效測試數據等。
2 總結與展望
當然,上述的應用主要還是重點針對基于B/S框架的Java應用進行的一些嘗試,且在實際的應用過程中,主要以日常的穩定性測試的案例為主要突破口,覆蓋了CRM系統的主要基礎用例,在一定程度上保障了產品的健壯性。當然,在使用過程當中,還存在著準確率和命中率不高的問題,這點將在后續的具體使用過程中重點關注。在測試用例的編排方面,目前還沒法實現界面化、可視化的方式進行拖拽組織測試用例,這將在后續的研究過程中加以改進,同時將積極引入Robot Framework框架,進一步降低自動化測試使用門檻,讓更多的測試組成員具備自動化測試用例編寫能力,進而提升測試組成員的職業技能,實現產品線的“全員自動化測試”,提升軟件的產品質量。
參考文獻
[1] 布朗,等.軟件測試:原理與實踐(英文版)[M].北京:機械工業出版社,2012.
[2] 溫素劍.零成本實現Web自動化測試:基于Selenium和Bromine[M].北京:電子工業出版社,2011.
作者簡介:劉壯飛(1981-),男,福建莆田人,北京福富軟件技術股份有限公司福州分公司項目經理,研究方向:項目管理、自動化測試。
(責任編輯:陳 潔)