自動化測試Java一:Selenium入門

From: https://blog.csdn.net/u013258415/article/details/77750214前端

Selenium入門

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

自動化測試的基礎

在Selenium的課程之前,咱們先回顧一下軟件測試的基本原理,爲咱們進一步完成Selenium自動化測試作好準備。python

軟件測試的發展

  • 傳統軟件測試

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

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

這個概念產生於30年前,對軟件測試的認識還很是有侷限性,固然也是由於受瀑布開發模型的影響,認爲軟件測試是編程以後的一個階段。只有等待代碼開發出來之後,經過執行程序,像用戶那樣操做軟件去發現問題。web

  • 敏捷軟件測試

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

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

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

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

  • 自動化測試

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

  • 主要自動化測試類型
    • Web UI自動化測試
    • Web API自動化測試
    • App UI自動化測試
    • ……

軟件測試的維度

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

自動化測試的場景

自動化測試應用的場景:

  • 測試 UI 界面、測試接口調用
    • 冒煙測試(預測試、確認測試)
    • 迴歸測試
    • 驗收測試

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

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

自動化測試工具介紹

  • HP UFT (QTP)
  • Selenium
  • HP LoadRunner
  • Robot Framework
  • Watir (webapplication test in ruby)
  • SoapUI
  • Appium

Web測試技術

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

相關測試技術

基礎技術 高階技術
Python/Java語言 Ajax
Html和CSS Html5+CSS3
JavaScript語言和框架(其中jQuery是基礎框架) Bootstrap
JSON和XML AngularJS

相關測試工具

工具 描述 參考
Firebug(已中止) FireFox火狐瀏覽器所自帶的一個前端插件 下載地址:http://getfirebug.com
PyChram JetBrains公司的Python開發工具 下載地址:https://www.jetbrains.com/pycharm/
IDEA JetBrains公司的Java開發工具 下載地址:https://www.jetbrains.com/idea/
開發者工具 Chrome瀏覽器的開發者工具 打開Chrome瀏覽器,按F12,打開開發者工具
SVN/Git 源代碼管理工具 開源版的源代碼管理工具

什麼是Selenium

Selenium

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

  • runs in many browsers and operatingsystems
  • can be controlled by manyprogramming languages and testing frameworks.

硒,/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 是一組軟件工具集,每個都有不一樣的方法來支持測試自動化。大多數使用 Selenium 的QA工程師只關注一兩個最能知足他們的項目需求的工具上。然而,學習全部的工具你將有更多選擇來解決不一樣類型的測試自動化問題。這一整套工具具有豐富的測試功能,很好的契合了測試各類類型的網站應用的須要。這些操做很是靈活,有多種選擇來定位 UI 元素,同時將預期的測試結果和實際的行爲進行比較。Selenium 一個最關鍵的特性是支持在多瀏覽器平臺上進行測試。

Selenium 項目簡史

Selenium 誕生於 2004 年,當在 ThoughtWorks 工做的 Jason Huggins 在測試一個內部應用時。做爲一個聰明的傢伙,他意識到相對於每次改動都須要手工進行測試,他的時間應該用得更有價值。他開發了一個能夠驅動頁面進行交互的 Javascript 庫,能讓多瀏覽器自動返回測試結果。那個庫最終變成了 Selenium 的核心,它是 Selenium RC(遠程控制)和 Selenium IDE 全部功能的基礎。Selenium RC 是開拓性的,由於沒有其餘產品能讓你使用本身喜歡的語言來控制瀏覽器。

Selenium 是一個龐大的工具,因此它也有本身的缺點。因爲它使用了基於 Javascript 的自動化引擎,而瀏覽器對 Javascript 又有不少安全限制,有些事情就難以實現。更糟糕的是,網站應用正變得愈來愈強大,它們使用了新瀏覽器提供的各類特性,都使得這些限制讓人痛苦不堪。

在 2006 年,一名 Google 的工程師, Simon Stewart 開始基於這個項目進行開發,這個項目被命名爲 WebDriver。此時,Google 早已經是 Selenium 的重度用戶,可是測試工程師們不得不繞過它的限制進行工具。Simon 須要一款能經過瀏覽器和操做系統的本地方法直接和瀏覽器進行通話的測試工具,來解決Javascript 環境沙箱的問題。WebDriver 項目的目標就是要解決 Selenium 的痛點。

跳到 2008 年。北京奧運會的召開顯示了中國在全球的實力,大規模的次貸危機引起了「大蕭條」以來美國最大的經濟危機。可是當年最重要的故事是 Selenium 和WebDriver 的合併。Selenium 有着豐富的社區和商業支持,但 WebDriver 顯然表明着將來的趨勢。二者的合併爲全部用戶提供了一組通用功能,而且借鑑了一些測試自動化領域最閃光的思想。或許,關於二者合併的最好解釋,是由 WebDriver 的開發者,在 2009 年 8 月 6 日發出的一封給社區的聯合郵件中提到的:

爲何這兩個項目要合併?一部分是由於 WebDriver 彌補了 Selenium 的一些短處(例如提供了一組很棒的 API,繞開瀏覽器的限制),一部分是由於 Selenium 彌補了 WebDriver 的一些短處(例如對瀏覽器更普遍的支持),還有一部分是由於 Selenium 的主要貢獻者和我都認爲這樣能爲用戶提供最優秀的框架。

Selenium 工具集

Selenium 由多個軟件工具組成,每一個具有特定的功能。

Selenium 2 (又叫 Selenium Webdriver)

Selenium 2 表明了這個項目將來的方向,也是最新被添加到 Selenium 工具集中的。這個全新的自動化工具提供了不少了不得的特性,包括更內聚和麪向對象的 API,而且解決了舊版本限制。

正如簡史中提到的,Selenium 和 WebDriver 的做者都贊同二者各具優點,而二者的合併使得這個自動化工具更增強健。

Selenium 2.0正是於此的產品。它支持WebDriver API及其底層技術,同時也在WebDriver API底下經過Selenium 1技術爲移植測試代碼提供極大的靈活性。此外,爲了向後兼容,Selenium 2 仍然使用 Selenium 1 的 Selenium RC 接口。

Selenium 1 (又叫 Selenium RC 或 Remote Control)

正如你在簡史中讀到的,在很長一段時間內,Selenium RC 都是最主要的 Selenium 項目,直到 WebDriver 和 Selenium 合併而產生了最新且最強大的 Selenium 2.

Seleinum 1 仍然被活躍的支持着(更可能是維護),而且提供一些 Selenium 2 短期內可能不會支持的特性,包括對多種語言的支持(Java, Javascript, Ruby, PHP, Python, Perl and C#) 和對大多數瀏覽器的支持。

Selenium IDE

Selenium IDE (集成開發環境) 是一個建立測試腳本的原型工具。它是一個 Firefox 插件,提供建立自動化測試的建議接口。Selenium IDE 有一個記錄功能,能記錄用戶的操做,而且能選擇多種語言把它們導出到一個可重用的腳本中用於後續執行。

注意

雖然 Selenium IDE 有保存功能,能讓用戶以表格的形式保存測試,以供後續的導入和執行,但它不是用於執行你的測試是否經過,也不能建立全部你須要的自動化測試。須要注意的是,Selenium IDE 不能生成含有迭代和條件語句的測試腳本。在本文檔編寫時也沒有要實現該功能的計劃。這部分是由於技術緣由,部分是由於 Selenium 的開發者所推薦的自動化測試的最佳實踐經常是須要編寫一些代碼的。Selenium IDE 只是被設計爲一個快速的原型工具。Selenium 的開發者推薦選用支持的最好的語言來建立嚴謹、健壯的測試,無論是使用 Selenium 1 仍是 Selenium 2.

Selenium-Grid

Selenium-Grid 使得 Selenium RC 解決方案能提高針對大型的測試套件或者哪些須要運行在多環境的測試套件的處理能力。Selenium Grid 能讓你並行的運行你的測試,也就是說,不一樣的測試能夠同時跑在不一樣的遠程機器上。這樣作有兩個有事,首先,若是你有一個大型的測試套件,或者一個跑的很慢的測試套件,你可使用 Selenium Grid 將你的測試套件劃分紅幾份同時在幾個不一樣的機器上運行,這樣能顯著的提高它的性能。同時,若是你必須在多環境中運行你的測試套件,你能夠得到多個遠程機器的支持,它們將同時運行你的測試套件。在每種狀況下,Selenium Grid 都能經過並行處理顯著地縮短你的測試套件的處理時間。

爲何選擇 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官方網站:http://docs.seleniumhq.orgSelenium 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 下載地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/

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。咱們在使用以前必需要肯定一種。

編程語言的選擇,咱們選了Java 和Python。主要出於如下幾個緣由。

Python 語言特性:便捷

  • 測試人員的編程能力廣泛不是很強,而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 編程,實際上是爲你打開了一道更廣闊的大門。

Java 語言特性:健壯

  • 面向對象
    • Java語言提供類、接口和繼承等原語,爲了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,並支持類與接口之間的實現機制(關鍵字爲implements)。Java語言全面支持動態綁定,而C++語言只對虛函數使用動態綁定。總之,Java語言是一個純的面向對象程序設計語言。
  • 平臺無關
    • Java程序(後綴爲java的文件)在Java平臺上被編譯爲體系結構中立的字節碼格式(後綴爲class的文件),而後能夠在實現這個Java平臺的任何系統中運行。這種途徑適合於異構的網絡環境和軟件的分發。
    • 支持Mac,Windows,Linux,UNIX
  • 多線程
    • 在Java語言中,線程是一種特殊的對象,它必須由Thread類或其子(孫)類來建立。一般有兩種方法來建立線程:其一,使用型構爲Thread(Runnable)的構造子將一個實現了Runnable接口的對象包裝成一個線程,其二,從Thread類派生出子類並重寫run方法,使用該子類建立的對象即爲線程。值得注意的是Thread類已經實現了Runnable接口,所以,任何一個線程均有它的run方法,而run方法中包含了線程所要運行的代碼。線程的活動由一組方法來控制。Java語言支持多個線程的同時執行,並提供多線程之間的同步機制(關鍵字爲synchronized)。
  • 安全性
    • Java一般被用在網絡環境中,爲此,Java提供了一個安全機制以防惡意代碼的攻擊。除了Java語言具備的許多安全特性之外,Java對經過網絡下載的類具備一個安全防範機制(類ClassLoader),如分配不一樣的名字空間以防替代本地的同名類、字節代碼檢查,並提供安全管理機制(類SecurityManager)讓Java應用設置安全哨兵。

接下來的示例咱們將所有使用Java + Python進行講解。同時也建議在學習的過程當中對於Python的相關語法進一步的學習。

轉載於:http://www.jianshu.com/p/00616647ddae --------------------- 本文來自 強大的石頭 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/u013258415/article/details/77750214?utm_source=copy

相關文章
相關標籤/搜索