Selenium的Web功能測試

問題來源

一般來說,在大型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)是不展開的,展開后的界面如下圖所示领斥。左邊測試用例的腳本直接顯示在右邊腳本窗口嫉到。這里只完成一個例子,可以合上左邊窗口月洛。

Selenium IDE的界面

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的控制范圍香嗓。如果點擊“高級搜索”鏈接迅腔,就沒問題,你可以自己試試靠娱。

運行結(jié)果界面

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)格郁,請通知后刪除。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末独悴,一起剝皮案震驚了整個濱河市理张,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绵患,老刑警劉巖雾叭,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異落蝙,居然都是意外死亡织狐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門筏勒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來移迫,“玉大人,你說我怎么就攤上這事管行〕瘢” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵捐顷,是天一觀的道長荡陷。 經(jīng)常有香客問我,道長迅涮,這世上最難降的妖魔是什么废赞? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮叮姑,結(jié)果婚禮上唉地,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好耘沼,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布极颓。 她就那樣靜靜地躺著,像睡著了一般群嗤。 火紅的嫁衣襯著肌膚如雪讼昆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天骚烧,我揣著相機(jī)與錄音浸赫,去河邊找鬼。 笑死赃绊,一個胖子當(dāng)著我的面吹牛既峡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碧查,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼运敢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了忠售?” 一聲冷哼從身側(cè)響起传惠,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎稻扬,沒想到半個月后卦方,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡泰佳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年盼砍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逝她。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡浇坐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出黔宛,到底是詐尸還是另有隱情近刘,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布臀晃,位于F島的核電站觉渴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏积仗。R本人自食惡果不足惜疆拘,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寂曹。 院中可真熱鬧,春花似錦、人聲如沸隆圆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渺氧。三九已至旨涝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侣背,已是汗流浹背白华。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留贩耐,地道東北人弧腥。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像潮太,于是被迫代替她去往敵國和親管搪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354