標籤:

Selenium入門

Selenium入門

歡迎閱讀Selenium入門講義,本講義將會重點介紹Selenium的入門知識以及Selenium的前置知識。

自動化測試的基礎

在Selenium的課程以前,我們先回顧一下軟體測試的基本原理,為我們進一步完成Selenium自動化測試做好準備。

軟體測試的發展

G.J.Myers在其經典的著作《軟體測試藝術》(The Art of Software Testing)一書中,給出了測試的定義:

「程序測試是為了發現錯誤而執行的過程。」

這個概念產生於30年前,對軟體測試的認識還非常有局限性,當然也是因為受瀑布開發模型的影響,認為軟體測試是編程之後的一個階段。只有等待代碼開發出來以後,通過執行程序,像用戶那樣操作軟體去發現問題。

上述也就是動態測試。隨後延伸到靜態測試,也就是在對於寫代碼之前的文檔、以及編碼過程中的代碼進行代碼掃描、評審等。

當前,軟體測試貫穿到整個軟體開發生命周期的全過程中,不再停留在編程之後的某個階段,尤其是敏捷開發開始廣泛的應用於互聯網行業以後,敏捷測試就把軟體測試解釋為對軟體產品質量的持續評估。在敏捷方法中,持續測試被提倡。當前的持續測試的實施,主要依託於持續集成。

持續集成和持續測試的產生和發展,對自動化測試產生了比較高的要求。此外隨著大數據和機器學習的發展,對自動化測試的需求越來越迫切。

簡單的描述一下持續集成,Continuous Integration,簡稱CI。是一種軟體工程實踐:項目需要經常性的集成,進行代碼編譯,版本構建,自動化的部署以及部署後的自動化測試。也是雲開發測試模式的一種。

持續集成構成了持續交付的基礎。

自動化測試:以人為驅動的測試行為轉化為機器執行的一種過程

軟體測試的維度

  • 從軟體測試的過程看:單元測試、集成測試、確認測試、系統測試、驗收測試
  • 從軟體測試的方法看:白盒測試、黑盒測試、灰盒測試
  • 從軟體測試的測試點看:功能測試、性能測試、兼容性測試、安全測試、探索性測試
  • 從軟體測試的技術程度看:手工測試、自動化測試、測試開發

自動化測試的場景

自動化測試應用的場景:

  • 功能測試的自動化:測試界面顯示、測試業務邏輯、測試數據導入導出、測試介面功能
  • 性能測試的自動化:測試壓力和負載、測試介面的性能等

什麼樣的項目適合自動化測試

  1. 任務測試明確,不會頻繁變動
  2. 每日構建後的測試驗證
  3. 比較頻繁的回歸測試
  4. 軟體系統界面穩定,變動少
  5. 需要在多平台上運行的相同測試案例、組合遍歷型的測試、大量的重複任務
  6. 軟體維護周期長
  7. 項目進度壓力不太大
  8. 被測軟體系統開發比較規範,能夠保證系統的可測試性
  9. 具備大量的自動化測試平台
  10. 測試人員具備較強的編程能力

自動化測試工具介紹

  • HP UFT (QTP)
  • Selenium
  • HP LoadRunner
  • Robot Framework
  • Watir (web application test in ruby)
  • SoapUI
  • MonkeyRunner

Web測試技術

Selenium是一款出色的Web自動測試工具,那麼在使用之前,Web測試的基本技術也是必須需要了解的。

相關測試技術:

| 基礎技術 | 高階技術 |

| ------------------------------ | ---------- |

| Python/Java語言 | Ajax |

| Html和CSS | Html5+CSS3 |

| JavaScript語言和框架(其中jQuery是基礎框架) | Bootstrap |

| JSON和XML | AngularJS |

相關測試工具:

| 工具 | 描述 | 參考 |

| ------- | ---------------------- | --------------------------------------- |

| Firebug | FireFox火狐瀏覽器所自帶的一個前端插件 | 下載地址:getfirebug.com |

| PyChram | JetBrains公司的Python開發工具 | 下載地址:jetbrains.com/pycharm/ |

| IDEA | JetBrains公司的Java開發工具 | 下載地址:jetbrains.com/idea/ |

| 開發者工具 | Chrome瀏覽器的開發者工具 | 打開Chrome瀏覽器,按F12,打開開發者工具 |

| SVN/Git | 源代碼管理工具 | 開源版的源代碼管理工具 |

什麼是Selenium

Selenium

Selenium is a suite oftools to automate web browsers across many platforms.

硒,/s?lini?m/

Selenium是開源的自動化測試工具,它主要是用於Web 應用程序的自動化測試,不只局限於此,同時支持所有基於web 的管理任務自動化。

Selenium 是用於測試 Web 應用程序用戶界面 (UI) 的常用框架。它是一款用於運行端到端功能測試的超強工具。您可以使用多個編程語言編寫測試,並且 Selenium 能夠在一個或多個瀏覽器中執行這些測試。

Selenium經歷了兩個版本,Selenium1.0 和Selenium2.0,Selenium 也不是簡單一個工具,而是由幾個工具組成,每個工具都有其特點和應用場景。

Selenium是在2004年由一個叫Jason Huggins的聰明的年輕人開發的,當時身處ThoughtWorks的他,為了不想讓自己的時間浪費在無聊的重複性工作中,所以開發一個JS的類庫來驅動瀏覽器頁面的行為;這個js類庫就是selenium core,同時也是seleniumRC、Selenium IDE的核心組件。這就是Selenium1.0的產生史。

在2006年,在google的一位有膽識的年輕人Simon Stewart發起了一個叫WebDriver的項目;因為長期以來google一直是selenium的重度用戶,但卻總是被限制在有限的操控範圍內,所以Simon希望能通過瀏覽器、操作系統的底層方法等一些手段來直接操作瀏覽器;這樣就避免了在JavaScript的沙箱環境里存在的那些限制了,webdriver項目就此誕生!

在2008年,Selenium和webdriver結合了,從此永結良緣,福澤我們廣大的測試工作者。這期間誰追的誰都不重要了,重要的是他們合併的原因正如webdriver的作者所說:

部分原因是 selenium 補充了 webdriver 的不足

部分原因是 webdriver 補充了 selenium 的不足

部分原因是它們合體後能給用戶提供一個更好的自動化測試框架

所以管它呢,現在大家有一個比較好用的 selenium 就行了!

Selenium 1 和 WebDriver 合併成一款性能更佳的產品 Selenium 2(或 Selenium WebDriver),該款產品發行於 2011 年。Selenium 2 具有來自 WebDriver 的清晰面向對象 API,並能以最佳的方式與瀏覽器進行交互。Selenium 2 不使用 JavaScript 沙盒,它支持多種瀏覽器和多語言綁定。

為什麼選擇 Selenium

Selenium特點:

  • 開源,免費
  • 多瀏覽器支持:Firefox、Chrome、IE、Opera、Safari
  • 多平台支持:Linux 、windows、Mac
  • 多語言支持:Java、Python、ruby、PHP、C#、JavaScript
  • 對web 頁面有良好的支持
  • 簡單(API 簡單)、靈活(用開發語言驅動)
  • 支持分散式測試用例執行

Selenium的家譜

Selenium到目前為止已經經歷了兩個版本:Selenium 1.0Selenium2.0.

Selenium官方網站:docs.seleniumhq.org github:https://github.com/SeleniumHQ/selenium

Selenium1.0:包括 Selenium IDE,Selenium Grid和Selenium RC(Selenium Remote Control)

Selenium IDE 是嵌入到Firefox 瀏覽器中的一個插件,實現簡單的瀏覽器操作的錄製與回放功能。

那麼什麼情況下用到它呢?

快速的創建bug 重現腳本,在測試人員的測試過程中,發現了bug 之後可以通過IDE 將重現的步驟錄製下來,以幫助開發人員更容易的重現bug。

IDE 錄製的腳本可以可以轉換成多種語言,從而幫助我們快速的開發腳本。

Selenium IDE 下載地址:addons.mozilla.org/en-U

Selenium Grid 是一種自動化的測試輔助工具,Grid 通過利用現有的計算機基礎設施,能加快WebApp的功能測試。利用Grid,可以很方便地同時在多台機器上和異構環境中並行運行多個測試事例。其特點為:

  • 並行執行
  • 通過一個主機統一控制用例在不同環境、不同瀏覽器下運行。
  • 靈活添加變動測試機

Selenium RC 是selenium 家族的核心工具,Selenium RC 支持多種不同的語言編寫自動化測試腳本,通過selenium RC 的伺服器作為代理伺服器去訪問應用從而達到測試的目的。

selenium RC 使用分Client Libraries 和Selenium Server。

  • Client Libraries 庫主要主要用於編寫測試腳本,用來控制selenium Server 的庫。
  • Selenium Server 負責控制瀏覽器行為,總的來說,Selenium Server 主要包括3 個部分:Launcher、Http Proxy、Core。

Selenium Core 是被Selenium Server 嵌入到瀏覽器頁面中的。Selenium Core就是一堆JavaScript函數的集合,就是通過這些JavaScript函數,我們才可以實現用程序對瀏覽器進行操作。

Launcher 用於啟動瀏覽器,把Selenium Core 載入到瀏覽器頁面當中,並把瀏覽器的代理設置為Selenium Server 的Http Proxy。

Selenium2.0:包括了WebDriver。其實在Selenium2.0中主推的就是WebDriver這個模塊。事實上WebDriver是Selenium RC的替代品,因為Selenium需要保留向下兼容性的原因,Selenium RC才沒有被徹底的拋棄,如果使用Selenium開發一個新的自動化測試項目,那麼我們強烈推薦使用Selenium2.0的WebDriver進行編碼。

Selenium2.0 = Selenium1.0 + WebDriver

Selenium RC的實質是在瀏覽器中運行一個JavaScript應用程序,使用每個瀏覽器內置的JavaScript解釋器來解釋和執行Selenium的命令集合。

Selenium WebDriver與上述的Selenium RC是不同的。WebDriver針對不同的瀏覽器進行開發,取代了RC那樣嵌入到被測試的WebApp程序中的JavaScript,使用了與瀏覽器更加集成的方式進行測試,避免了RC使用JavaScript而可能遇到的安全模型限制導致的問題等。

在此我們也更加推薦讀者使用Selenium2.0的WebDriver開始學習。

編程語言的選擇

Selenium1.0代表的是經典,Selenium2.0代表的是未來。

我們在此重點關注Selenium2.0的WebDriver。而WebDriver面臨的第一個選擇就是編程語言。WebDriver支持眾多的編程語言,例如,C#、Ruby、Python、 Java、Javacript、Objective-C、PHP。我們在使用之前必須要確定一種。

編程語言的選擇,我們選了Python。而沒有選擇更加流行的C#或者Java,主要出於以下幾個原因。

  • 測試人員的編程能力普遍不是很強,而Python作為一種腳本語言,不僅功能強大,而且語法優美,支持多種自動化測試工具,而且學習上手比較容易。
  • Python的社區發展比較好,有著非常多的文檔和支持庫,另外Python也可以在Web開發、數據處理、科學計算等縱多領域有著非常好的應用前景。
  • 對於有一定編程基礎的人員,使用Python作為自動化測試的語言可以非常順暢的轉換,幾乎沒有學習成本。同時Python是標準的面向對象的編程語言,對於C#、Java等面向對象的語言有著非常好的示例作用,通過Python的示例可以非常輕鬆的觸類旁通,使用其他語言進行Selenium2.0的WebDriver的使用。

Python

/pa?θ?n/

Python的創始人為Guido Van Rossum。1989年聖誕節期間,在阿姆斯特丹,Guido為了打發聖誕節的無趣,決心開發一個新的腳本解釋程序,做為ABC 語言的一種繼承。之所以選中Python(大蟒蛇的意思)作為程序的名字,是因為他是一個叫Monty Python的喜劇團體的愛好者。

Python 語言除了在自動化測試領域有出色的表現外,在系統編程,網路編程,web 開發,GUI開發,科學計算,遊戲開發等多個領域應用非常廣泛,而且具有非常良好的社區支持。也就是說學習和掌握python 編程,其實是為你打開了一道更廣闊的大門。

接下來的示例我們將全部使用Python進行講解。同時也建議在學習的過程中對於Python的相關語法進一步的學習。

推薦閱讀:

python selenium 如何查看網頁的源代碼 ?
mac下怎麼搭建selenium python環境?
基於Excel參數化你的Selenium2測試代碼
利用爬蟲批量下載論文(python+selenium)
Python多線程Selenium跨瀏覽器測試

TAG:Selenium |