問題來源
一般來說,在大型Web軟件的開發(fā)和測試階段娶靡,我們常常會遇到下列一些困難或挑戰(zhàn):
1) 測試環(huán)境牧牢。絕大多數(shù)的Web應(yīng)用軟件,都要求跨瀏覽器姿锭、跨平臺塔鳍,不僅要兼顧Windows、Mac OS呻此、Linux等轮纫,而且還要兼顧IE、Firefox焚鲜、Safari等掌唾,如何能在很短的工期內(nèi)完成如此多平臺的測試放前?
2) 測試范圍。測試范圍不僅包括產(chǎn)品的功能特性糯彬,還包括大量的測試數(shù)據(jù)凭语,尤其在進(jìn)入全球化的今天,還要考慮不同地區(qū)的字符集輸入撩扒。即使對一個簡單的login模塊似扔,考慮不同地區(qū)、不同語言却舀、不同行為和習(xí)慣的用戶,輸入數(shù)據(jù)的組合測試也多達(dá)幾十種锤灿。單憑人工測試挽拔,怎能涵蓋如此大量的數(shù)據(jù)驅(qū)動測試?
3) 回歸測試但校。軟件需求的頻繁變化螃诅,是眾所周知的一個問題,而Web應(yīng)用的變化就更為頻繁状囱,從而引起軟件設(shè)計术裸、代碼的一系列變化。這如同蝴蝶效應(yīng)一樣亭枷,軟件的整體功能可能或多或少受到了影響袭艺,不經(jīng)過測試就無法確認(rèn)未修改的功能沒有受到影響。測試要覆蓋所有功能叨粘,包括被修改的和沒被修改的猾编,這就要進(jìn)行大量的回歸測試。如果通過手工完成回歸測試升敲,則既費時又單調(diào)無味答倡,自動化測試是最好的選擇。
如何解決上述問題呢驴党?只有求助自動化測試工具瘪撇,而要在眾多的Web功能(回歸)測試的開源工具之中做出選擇,非“Selenium”莫屬港庄。
Selenium優(yōu)勢
Selenium(http://seleniumhq.org/)是ThoughtWorks專門為Web應(yīng)用而開發(fā)的自動化測試工具倔既,適合進(jìn)行功能測試、驗收測試鹏氧,其主要優(yōu)勢有:
1) 適合Web應(yīng)用的測試叉存,可直接運行在瀏覽器之上,所見即所得度帮,因為Selenium的核心是用JavaScript編寫的歼捏;
2) 跨平臺稿存,支持多操作系統(tǒng)(Windows, Mac OS和Linux)和各種瀏覽器(Internet Explorer瞳秽、Mozilla和Firefox)瓣履;
3) 支持分布式應(yīng)用的測試,可構(gòu)造一個完整的解決方案练俐,包括控制器袖迎、遠(yuǎn)程測試機(jī)等;
4) 支持兩種開發(fā)腳本的模式——test runner (HTML文件)和driven(腳本語言編寫)腺晾,使測試既可以完全在瀏覽器內(nèi)運行燕锥,也可以脫離瀏覽器、在遠(yuǎn)程機(jī)器上運行悯蝉。
5) 支持多種腳本語言归形,包括Java、C#鼻由、PHP暇榴、Perl、Python和Ruby等蕉世。
Selenium一個工具集
Selenium是一個工具集蔼紧,由幾個測試工具承擔(dān)不同的角色,從而構(gòu)成一個針對Web應(yīng)用測試的狠轻、完整的解決方案奸例。
1) Selenium IDE(集成開發(fā)環(huán)境),firefox的插件(plug-in)向楼,可以錄制哩至、回放并編輯測試腳本,是Selenium腳本的開發(fā)平臺蜜自;
2) Selenium Core(核心)是符合斷言(assertion)機(jī)制的菩貌、測試套件執(zhí)行的平臺。它是整個Selenium測試機(jī)制的核心部分重荠,由純JavaScript代碼組成箭阶,負(fù)責(zé)具體測試任務(wù)的執(zhí)行;
3) Selenium Core HTA是針對IE設(shè)計的執(zhí)行平臺戈鲁,可以看作Selenium Core的一個特例仇参,運行于IE的最高安全級別之上;
4) Selenium Remote Control(遠(yuǎn)程控制)是一個代理與控制端婆殿,代替Selenium core/ Selenium IDE的客戶端诈乒,從而可以在遠(yuǎn)程機(jī)器上執(zhí)行測試任務(wù),并支持多種腳本語言婆芦,如Java怕磨、.NET喂饥、Perl、Python和Ruby肠鲫;
5) Selenium Grid可以并行地運行多個Selenium Remote Control的實例员帮,從而在分布式環(huán)境中同時運行多個測試任務(wù),并能在一臺機(jī)器上控制這些任務(wù)的執(zhí)行导饲,可以極大地加快Web應(yīng)用的功能測試捞高。
Selenium Grid是Selenium的一個擴(kuò)展,提供了一個類似于網(wǎng)絡(luò)集線器(hub)的遠(yuǎn)程測試控制器渣锦,能夠?qū)y試請求發(fā)送到若干個遠(yuǎn)程機(jī)器的Selenium-RC實例上硝岗,有下列特性:
1) 實施多機(jī)器、多線程的測試任務(wù)袋毙;
2) 將一個具體測試任務(wù)顯式地分配給Selenium RC型檀;
3) 通過名稱來選擇具體環(huán)境的實例,如Windows XP的IE7或Ubuntu的Firefox 3.0等娄猫;
4) 限制每個RC最大的并發(fā)測試數(shù)贱除;
5) 將測試屏蔽在一個實際的網(wǎng)格結(jié)構(gòu)之外生闲。
Selenium Grid只負(fù)責(zé)測試任務(wù)的分發(fā)媳溺、控制和管理,但不負(fù)責(zé)這些測試的執(zhí)行碍讯。測試任務(wù)由Selenium RC/Core來執(zhí)行悬蔽,也可以由其他測試工具Parallel JUnit、CubicTest捉兴、Watir和DeepTest for Ruby等來執(zhí)行蝎困。
Selenium IDE使用介紹
1) 下載和安裝測試工具
首先去http://seleniumhq.org/projects/ide/下載Selenium IDE,點擊右頁上部的鏈接“download now”倍啥,下載其最近的一個版本(本書使用的是1.0 beta 2禾乘,2008年6月發(fā)布)。在安裝Selenium IDE之前虽缕,要準(zhǔn)備好Firefox(火狐)瀏覽器始藕,F(xiàn)irefox可以從http://www.firefoxplus.org/下載。
安裝Selenium IDE很容易氮趋。如果是用Firefox下載的伍派,瀏覽器會自動提示安裝,點擊“立即安裝”按鈕就能完成安裝剩胁。如果事先已下載類似“selenium-ide-1.0-beta-2.xpi”的文件诉植,就用Firefox的“打開文件”菜單功能,打開已下載的xpi文件昵观,安裝Selenium IDE晾腔。安裝成功后舌稀,重啟Firefox,菜單“工具”下會出現(xiàn)“Selenium IDE”建车。
點擊“Selenium IDE”扩借,啟動Selenium IDE,出現(xiàn)主界面缤至,可以展開左邊測試用例(test case)列表窗口潮罪,默認(rèn)是不展開的,展開后的界面如下圖所示领斥。左邊測試用例的腳本直接顯示在右邊腳本窗口嫉到。這里只完成一個例子,可以合上左邊窗口月洛。
2)? 錄制測試腳本
打開Selenium IDE何恶,默認(rèn)處在錄制狀態(tài)。如果不是嚼黔,就點擊錄制操作按鈕[插圖]细层。去Firefox打開Google首頁www.google.cn,輸入“用Selenium進(jìn)行自動化測試”唬涧,點擊“Google搜索”按鈕疫赎,進(jìn)入搜索結(jié)果頁面,然后選擇搜索結(jié)果頁面中的“www.ibm.com”碎节,點擊右鍵捧搞,如圖1-5所示,選擇倒數(shù)第3項 “verifyTextPresnt www.ibm.com” 狮荔,驗證“www.ibm.com”會在搜索結(jié)果中出現(xiàn)胎撇。
同樣,選擇“有9310項符合”和“搜索用時0.38秒”殖氏,進(jìn)行同樣的操作晚树,即共進(jìn)行3項驗證。測試本身就是驗證的過程雅采,通過期望結(jié)果和實際結(jié)果比較爵憎,我們才能判斷是否會出現(xiàn)缺陷。這里只是一個演示总滩,所以簡單地選擇這3項內(nèi)容作為將來驗證的期望值纲堵。然后點擊第1個搜索結(jié)果,結(jié)束錄制闰渔,即點擊按鈕[插圖]席函。錄制的腳本可以在“腳本窗口”瀏覽,如下圖所示冈涧,由 “Command(命令/動作)”茂附、“Target(目標(biāo)/對象)”及其“Value(值)”構(gòu)成三段式腳本語言(Selenese)正蛙。
3) 執(zhí)行測試腳本
完成了腳本錄制,就可以執(zhí)行腳本(也稱腳本回放)营曼。先將回放速度調(diào)整慢些乒验,從而使執(zhí)行過程看得更清楚些,即將[插圖]中綠色游標(biāo)向“slow”移動蒂阱。然后锻全,點擊按鈕[插圖],就開始執(zhí)行腳本录煤。我們會看到瀏覽器自動打開www.google.cn的首頁鳄厌,自動輸入“用Selenium進(jìn)行自動化測試”,搜索結(jié)果頁面很快顯示出來妈踊,腳本執(zhí)行結(jié)束了嚎。
4) 測試結(jié)果
運行結(jié)果如圖1-7所示,從中可以看出廊营,前面兩個驗證結(jié)果通過歪泳,顯示為綠色,而第3個驗證“verifyTextPresent搜索用時0.34秒”失敗露筒,顯示為紅色呐伞。為什么失敗呢?因為Google每次搜索用時是不一樣的邀窃,再次執(zhí)行腳本的時候荸哟,用時只要0.04秒假哎,會顯示“搜索用時0.04秒”瞬捕,導(dǎo)致第3個驗證失敗。查詢?nèi)罩荆↙og)舵抹,可以看到紅色的信息“[error] false”肪虎,說明驗證失敗。而且發(fā)現(xiàn)另一個操作惧蛹,點擊link也沒成功扇救,主要是鏈接頁面已跳出基準(zhǔn)URL(站點),不在Selenium IDE的控制范圍香嗓。如果點擊“高級搜索”鏈接迅腔,就沒問題,你可以自己試試靠娱。
Selenium IDE還提供了通向Selenium Core沧烈、Selenium RC的跳轉(zhuǎn)接口,例如像云,可以將HTML的腳本自動轉(zhuǎn)換為Java锌雀、.NET蚂夕、Perl、Python和Ruby中的任何一種腋逆。
Selenium 命令
Selenium命令可分成3類婿牍,即操作(action)、輔助(Accessors)和斷言(assertion)惩歉。
操作命令模擬用戶與Web應(yīng)用程序的交互等脂。例如,單擊一個按鈕(click)撑蚌、輸入字符串(Type)或某個選項被選中(Check)慎菲,這些都是常見的用戶操作。 許多動作可以包含后綴“AndWait”的方式來調(diào)用锨并,在瀏覽器向服務(wù)器發(fā)送一個請求之后露该,還須要使Selenium等待加載一個新的頁面,如clickAndWait第煮、selectAndWait和typeAndWait等解幼,而且這類命令會使腳本更穩(wěn)定。
輔助命令用于檢查應(yīng)用程序的狀態(tài)并將結(jié)果存儲在變量中包警,如storeTitle撵摆。它們也可用于自動生成斷言。
斷言命令是驗證一個操作的實際結(jié)果是否和預(yù)期結(jié)果一致害晦,如驗證頁面內(nèi)容或當(dāng)前位置是否正確特铝。斷言又分為3種模式:assert、verify和waitfor壹瘟。例如鲫剿,可以用assertText、verifyText和waitforText稻轨。
1. 3種斷言模式的區(qū)別
當(dāng)assert驗證失敗時灵莲,測試執(zhí)行將終止,退出殴俱。
當(dāng)verify驗證失敗時政冻,測試執(zhí)行不會終止,繼續(xù)執(zhí)行下去线欲,并將錯誤記入日志明场。
waitfor命令用于等待某些條件變?yōu)檎妫捎糜贏jax應(yīng)用程序的測試)。如果該條件為真李丰,將立即被執(zhí)行苦锨。反之,如果該條件不為真,則告知失敗并暫停測試逆屡,直到超過當(dāng)前所設(shè)定的時間(和命令setTimeout結(jié)合起來使用)圾旨。
這就允許通過單條assert斷言確保應(yīng)用程序停留在正確的頁面上,而通過一系列的verify斷言測試表單上的區(qū)域值魏蔗、標(biāo)簽等多項內(nèi)容砍的。
2. 元素定位器
許多命令需要一個目標(biāo)對象,即元素target屬性莺治,定位器(Element Locators)告訴Selenium向HTML DOM中哪一個元素發(fā)送命令廓鞠, locatorType = argument。
3. 元素過濾器
元素過濾器(Element Filters)可以同定位器一起使用谣旁,從一系列候選元素中進(jìn)行篩選床佳。元素過濾器目前僅用于@name的元素定位器,可以基于name的值進(jìn)行匹配榄审。在從一系列相似命名的關(guān)聯(lián)按鈕中選擇某些內(nèi)容時砌们,元素過濾器就非常有用。
4. 匹配模式
模式(Patterns) 用于匹配字符串值搁进,如指定一個輸入域的期望值或識別一個選項浪感。Selenium支持許多類型的模式,其中包括正則表達(dá)式饼问。
測試用例和測試套件
測試用例開發(fā)涉及4類文件影兽,除了引擎庫以外,其他3類文件都是可以根據(jù)具體情況去修改的莱革。
1) 主文件:TestRunner.html/TestRunner.hta (.hta文件是html application峻堰、windows平臺特有);
2) Test suite(測試套件)和Test case(測試用例)文件:通過以表格為基礎(chǔ)的html文件來實現(xiàn)盅视;測試套件用于將具有類似功能的一些測試用例編成一組捐名,以便能按順序執(zhí)行一系列測試用例。
3) 引擎庫js文件:位于Selenium根目錄下的核心文件左冬,其中html-xpath目錄下的那個文件就是所需的庫文件桐筏;
4 user-extensions.js:用來擴(kuò)展Selenium的文件纸型,用戶自定義的函數(shù)和擴(kuò)展的命令都應(yīng)該放在這個文件中拇砰。
Selenium執(zhí)行的默認(rèn)測試套件的名稱是TestSuite.html。測試套件使用一個只包含一列的表狰腌,表中的每一行指向一個包含某個測試用例的文件除破。對于一個有著多個功能模塊、組件的web應(yīng)用琼腔,編寫的測試腳本html必然比較多瑰枫。因此,建立一個合理的目錄結(jié)構(gòu)來組織這些腳本是必要的。
Selenium部署完畢后光坝,可以打開瀏覽器通過url來訪問TestRunner.html文件尸诽。由TestRunner.html調(diào)用相應(yīng)目錄下的測試套件的HTML格式文件——TestSuite.html。再由TestSuite.html調(diào)用相應(yīng)的測試用例(測試腳本)盯另,即TestSuite.html所列出的一系列測試腳本的html文件性含。可以直接修改TestSuite.html文件,讓其指向自己開發(fā)的Test case html文件鸳惯。而TestSuite.html被設(shè)計成如下表所示商蕴,定義全局變量的setVariable1.html和兩個測試用例的文件login.html和logout.html。
其他內(nèi)容如腳本做二次開發(fā)芝发,Selenium的舉例說明绪商,Selenium grid的舉例說明等等見朱少民老師的《輕輕松松自動化測試》。
本文來自朱少民老師的《輕輕松松自動化測試》辅鲸,如有侵權(quán)格郁,請通知后刪除。