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