Selenium入門
歡迎閱讀Selenium入門講義,本講義將會重點(diǎn)介紹Selenium的入門知識以及Selenium的前置知識。
自動化測試的基礎(chǔ)
在Selenium的課程以前,我們先回顧一下軟件測試的基本原理,為我們進(jìn)一步完成Selenium自動化測試做好準(zhǔn)備。
軟件測試的發(fā)展
G.J.Myers在其經(jīng)典的著作《軟件測試藝術(shù)》(The Art of Software Testing)一書中,給出了測試的定義:
“程序測試是為了發(fā)現(xiàn)錯誤而執(zhí)行的過程?!?/p>
這個概念產(chǎn)生于30年前,對軟件測試的認(rèn)識還非常有局限性,當(dāng)然也是因?yàn)槭芷俨奸_發(fā)模型的影響,認(rèn)為軟件測試是編程之后的一個階段。只有等待代碼開發(fā)出來以后,通過執(zhí)行程序,像用戶那樣操作軟件去發(fā)現(xiàn)問題。
上述也就是動態(tài)測試。
隨后延伸到靜態(tài)測試,也就是在對于寫代碼之前的文檔、以及編碼過程中的代碼進(jìn)行代碼掃描、評審等。
當(dāng)前,軟件測試貫穿到整個軟件開發(fā)生命周期的全過程中,不再停留在編程之后的某個階段,尤其是敏捷開發(fā)開始廣泛的應(yīng)用于互聯(lián)網(wǎng)行業(yè)以后,敏捷測試就把軟件測試解釋為對軟件產(chǎn)品質(zhì)量的持續(xù)評估。在敏捷方法中,持續(xù)測試被提倡。當(dāng)前的持續(xù)測試的實(shí)施,主要依托于持續(xù)集成。
持續(xù)集成和持續(xù)測試的產(chǎn)生和發(fā)展,對自動化測試產(chǎn)生了比較高的要求。此外隨著大數(shù)據(jù)和機(jī)器學(xué)習(xí)的發(fā)展,對自動化測試的需求越來越迫切。
簡單的描述一下
持續(xù)集成,Continuous Integration,簡稱CI。是一種軟件工程實(shí)踐:項(xiàng)目需要經(jīng)常性的集成,進(jìn)行代碼編譯,版本構(gòu)建,自動化的部署以及部署后的自動化測試。也是云開發(fā)測試模式的一種。
持續(xù)集成構(gòu)成了持續(xù)交付的基礎(chǔ)。
自動化測試:以人為驅(qū)動的測試行為轉(zhuǎn)化為機(jī)器執(zhí)行的一種過程
軟件測試的維度
- 從軟件測試的過程看:單元測試、集成測試、確認(rèn)測試、系統(tǒng)測試、驗(yàn)收測試
- 從軟件測試的方法看:白盒測試、黑盒測試、灰盒測試
- 從軟件測試的測試點(diǎn)看:功能測試、性能測試、兼容性測試、安全測試、探索性測試
- 從軟件測試的技術(shù)程度看:手工測試、自動化測試、測試開發(fā)
自動化測試的場景
自動化測試應(yīng)用的場景:
- 功能測試的自動化:測試界面顯示、測試業(yè)務(wù)邏輯、測試數(shù)據(jù)導(dǎo)入導(dǎo)出、測試接口功能
- 性能測試的自動化:測試壓力和負(fù)載、測試接口的性能等
什么樣的項(xiàng)目適合自動化測試
- 任務(wù)測試明確,不會頻繁變動
- 每日構(gòu)建后的測試驗(yàn)證
- 比較頻繁的回歸測試
- 軟件系統(tǒng)界面穩(wěn)定,變動少
- 需要在多平臺上運(yùn)行的相同測試案例、組合遍歷型的測試、大量的重復(fù)任務(wù)
- 軟件維護(hù)周期長
- 項(xiàng)目進(jìn)度壓力不太大
- 被測軟件系統(tǒng)開發(fā)比較規(guī)范,能夠保證系統(tǒng)的可測試性
- 具備大量的自動化測試平臺
- 測試人員具備較強(qiáng)的編程能力
自動化測試工具介紹
- HP UFT (QTP)
- Selenium
- HP LoadRunner
- Robot Framework
- Watir (webapplication test in ruby)
- SoapUI
- MonkeyRunner
Web測試技術(shù)
Selenium是一款出色的Web自動測試工具,那么在使用之前,Web測試的基本技術(shù)也是必須需要了解的。
Web前端技術(shù)
| 基礎(chǔ)技術(shù) | 高階技術(shù) |
|---|---|
| Http協(xié)議:報(bào)文、請求、Cookie等 | Ajax |
| Html和CSS | Html5+CSS3 |
| JavaScript語言和框架(其中jQuery是基礎(chǔ)框架) | Bootstrap |
| JSON和XML | AngularJS |
推薦使用的前端工具:Firebug。FireFox火狐瀏覽器所自帶的一個前端插件。
https://addons.mozilla.org/en-US/firefox/addon/firebug/
什么是Selenium
Selenium
Selenium is a suite oftools to automate web browsers across many platforms.
硒,
/s?'lini?m/
Selenium是開源的自動化測試工具,它主要是用于Web 應(yīng)用程序的自動化測試,不只局限于此,同時(shí)支持所有基于web 的管理任務(wù)自動化。
Selenium 是用于測試 Web 應(yīng)用程序用戶界面 (UI) 的常用框架。它是一款用于運(yùn)行端到端功能測試的超強(qiáng)工具。您可以使用多個編程語言編寫測試,并且 Selenium 能夠在一個或多個瀏覽器中執(zhí)行這些測試。
Selenium經(jīng)歷了兩個版本,Selenium1.0 和Selenium2.0,Selenium 也不是簡單一個工具,而是由幾個工具組成,每個工具都有其特點(diǎn)和應(yīng)用場景。
Selenium是在2004年由一個叫Jason Huggins的聰明的年輕人開發(fā)的,當(dāng)時(shí)身處ThoughtWorks的他,為了不想讓自己的時(shí)間浪費(fèi)在無聊的重復(fù)性工作中,所以開發(fā)一個JS的類庫來驅(qū)動瀏覽器頁面的行為;這個js類庫就是selenium core,同時(shí)也是seleniumRC、Selenium IDE的核心組件。這就是Selenium1.0的產(chǎn)生史。
在2006年,在google的一位有膽識的年輕人Simon Stewart發(fā)起了一個叫WebDriver的項(xiàng)目;因?yàn)殚L期以來google一直是selenium的重度用戶,但卻總是被限制在有限的操控范圍內(nèi),所以Simon希望能通過瀏覽器、操作系統(tǒng)的底層方法等一些手段來直接操作瀏覽器;這樣就避免了在JavaScript的沙箱環(huán)境里存在的那些限制了,webdriver項(xiàng)目就此誕生!
在2008年,Selenium和webdriver結(jié)合了,從此永結(jié)良緣,福澤我們廣大的測試工作者。這期間誰追的誰都不重要了,重要的是他們合并的原因正如webdriver的作者所說:
部分原因是selenium補(bǔ)充了webdriver的不足
部分原因是webdriver補(bǔ)充了selenium的不足
部分原因是它們合體后能給用戶提供一個更好的自動化測試框架
所以管它呢,現(xiàn)在大家有一個比較好用的selenium就行了!
Selenium 1 和 WebDriver 合并成一款性能更佳的產(chǎn)品 Selenium 2(或 Selenium WebDriver),該款產(chǎn)品發(fā)行于 2011 年。Selenium 2 具有來自 WebDriver 的清晰面向?qū)ο?API,并能以最佳的方式與瀏覽器進(jìn)行交互。Selenium 2 不使用 JavaScript 沙盒,它支持多種瀏覽器和多語言綁定。
為什么選擇Selenium
Selenium特點(diǎn):
- 開源,免費(fèi)
- 多瀏覽器支持:Firefox、Chrome、IE、Opera、Safari
- 多平臺支持:Linux 、windows、Mac
- 多語言支持:Java、Python、ruby、PHP、C#、JavaScript
- 對web 頁面有良好的支持
- 簡單(API 簡單)、靈活(用開發(fā)語言驅(qū)動)
- 支持分布式測試用例執(zhí)行
Selenium的家譜
Selenium到目前為止已經(jīng)經(jīng)歷了兩個版本:Selenium 1.0和Selenium2.0.
Selenium官方網(wǎng)站:http://docs.seleniumhq.org
Selenium1.0:包括 Selenium IDE,Selenium Grid和Selenium RC(Selenium Remote Control)
Selenium IDE 是嵌入到Firefox 瀏覽器中的一個插件,實(shí)現(xiàn)簡單的瀏覽器操作的錄制與回放功能。
那么什么情況下用到它呢?
快速的創(chuàng)建bug 重現(xiàn)腳本,在測試人員的測試過程中,發(fā)現(xiàn)了bug 之后可以通過IDE 將重現(xiàn)的步驟錄制下來,以幫助開發(fā)人員更容易的重現(xiàn)bug。
IDE 錄制的腳本可以可以轉(zhuǎn)換成多種語言,從而幫助我們快速的開發(fā)腳本。
Selenium IDE 下載地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/
Selenium Grid 是一種自動化的測試輔助工具,Grid 通過利用現(xiàn)有的計(jì)算機(jī)基礎(chǔ)設(shè)施,能加快WebApp的功能測試。利用Grid,可以很方便地同時(shí)在多臺機(jī)器上和異構(gòu)環(huán)境中并行運(yùn)行多個測試事例。其特點(diǎn)為:
并行執(zhí)行
通過一個主機(jī)統(tǒng)一控制用例在不同環(huán)境、不同瀏覽器下運(yùn)行。
靈活添加變動測試機(jī)
Selenium RC 是selenium 家族的核心工具,Selenium RC 支持多種不同的語言編寫自動化測試腳本,通過selenium RC 的服務(wù)器作為代理服務(wù)器去訪問應(yīng)用從而達(dá)到測試的目的。
selenium RC 使用分Client Libraries 和Selenium Server。
Client Libraries 庫主要主要用于編寫測試腳本,用來控制selenium Server 的庫。
-
Selenium Server 負(fù)責(zé)控制瀏覽器行為,總的來說,Selenium Server 主要包括3 個部分:Launcher、Http Proxy、Core。
Selenium Core 是被Selenium Server 嵌入到瀏覽器頁面中的。Selenium Core就是一堆JavaScript函數(shù)的集合,就是通過這些JavaScript函數(shù),我們才可以實(shí)現(xiàn)用程序?qū)g覽器進(jìn)行操作。
Launcher 用于啟動瀏覽器,把Selenium Core 加載到瀏覽器頁面當(dāng)中,并把瀏覽器的代理設(shè)置為Selenium Server 的Http Proxy。
Selenium2.0:包括了WebDriver。其實(shí)在Selenium2.0中主推的就是WebDriver這個模塊。事實(shí)上WebDriver是Selenium RC的替代品,因?yàn)镾elenium需要保留向下兼容性的原因,Selenium RC才沒有被徹底的拋棄,如果使用Selenium開發(fā)一個新的自動化測試項(xiàng)目,那么我們強(qiáng)烈推薦使用Selenium2.0的WebDriver進(jìn)行編碼。
Selenium2.0 = Selenium1.0 + WebDriver
Selenium RC的實(shí)質(zhì)是在瀏覽器中運(yùn)行一個JavaScript應(yīng)用程序,使用每個瀏覽器內(nèi)置的JavaScript解釋器來解釋和執(zhí)行Selenium的命令集合。
Selenium WebDriver與上述的Selenium RC是不同的。WebDriver針對不同的瀏覽器進(jìn)行開發(fā),取代了RC那樣嵌入到被測試的WebApp程序中的JavaScript,使用了與瀏覽器更加集成的方式進(jìn)行測試,避免了RC使用JavaScript而可能遇到的安全模型限制導(dǎo)致的問題等。
在此我們也更加推薦讀者使用Selenium2.0的WebDriver開始學(xué)習(xí)。
編程語言的選擇
Selenium1.0代表的是經(jīng)典,Selenium2.0代表的是未來。
我們在此重點(diǎn)關(guān)注Selenium2.0的WebDriver。而WebDriver面臨的第一個選擇就是編程語言。WebDriver支持眾多的編程語言,例如,C#、Ruby、Python、 Java、Javacript、Objective-C、PHP。我們在使用之前必須要確定一種。
編程語言的選擇,我們選了Python。而沒有選擇更加流行的C#或者Java,主要出于以下幾個原因。
- 測試人員的編程能力普遍不是很強(qiáng),而Python作為一種腳本語言,不僅功能強(qiáng)大,而且語法優(yōu)美,支持多種自動化測試工具,而且學(xué)習(xí)上手比較容易。
- Python的社區(qū)發(fā)展比較好,有著非常多的文檔和支持庫,另外Python也可以在Web開發(fā)、數(shù)據(jù)處理、科學(xué)計(jì)算等縱多領(lǐng)域有著非常好的應(yīng)用前景。
- 對于有一定編程基礎(chǔ)的人員,使用Python作為自動化測試的語言可以非常順暢的轉(zhuǎn)換,幾乎沒有學(xué)習(xí)成本。同時(shí)Python是標(biāo)準(zhǔn)的面向?qū)ο蟮木幊陶Z言,對于C#、Java等面向?qū)ο蟮恼Z言有著非常好的示例作用,通過Python的示例可以非常輕松的觸類旁通,使用其他語言進(jìn)行Selenium2.0的WebDriver的使用。
Python
/'pa?θ?n/
Python的創(chuàng)始人為Guido Van Rossum。1989年圣誕節(jié)期間,在阿姆斯特丹,Guido為了打發(fā)圣誕節(jié)的無趣,決心開發(fā)一個新的腳本解釋程序,做為ABC 語言的一種繼承。之所以選中Python(大蟒蛇的意思)作為程序的名字,是因?yàn)樗且粋€叫Monty Python的喜劇團(tuán)體的愛好者。
Python 語言除了在自動化測試領(lǐng)域有出色的表現(xiàn)外,在系統(tǒng)編程,網(wǎng)絡(luò)編程,web 開發(fā),GUI開發(fā),科學(xué)計(jì)算,游戲開發(fā)等多個領(lǐng)域應(yīng)用非常廣泛,而且具有非常良好的社區(qū)支持。也就是說學(xué)習(xí)和掌握python 編程,其實(shí)是為你打開了一道更廣闊的大門。
接下來的示例我們將全部使用Python進(jìn)行講解。同時(shí)也建議在學(xué)習(xí)的過程中對于Python的相關(guān)語法進(jìn)一步的學(xué)習(xí)。