《Selenium自動化測試實戰:基於Python》Selenium自動化測試框架入門

圖片1.jpg

第1章  Selenium自動化測試框架入門

 1.1  Selenium自動化測試框架概述

     說到目前流行的自動化測試工具,相信只要作過軟件測試相關工做,就必定據說過Selenium編程

     圖1-1是某企業招聘自動化測試工程師的信息,你們能夠看到在崗位任職條件方面明確指出要求應聘者具備Selenium等主流自動化測試工具的使用經驗。跨域

image002.png

1-1  某企業自動化測試工程師招聘信息瀏覽器

   那麼Selenium是誰開發的?它是用來解決什麼問題的?它爲何會被自動化測試人員普遍使用呢?服務器

        在平常的軟件測試工做中,功能測試是軟件測試的重要環節,而手動的功能測試有許多缺點,其中主要的缺點是測試過程單調且重複,這種長時間的重複操做容易令人厭倦、出錯。2004年,Thoughtworks的工程師Jason Huggins決定使用自動化測試工具來改變這種情況。他開發了一款名爲JavaScriptTestRunnerJavaScript程序,這款JavaScript程序能夠自動進行Web應用程序的功能測試。同年,JavaScriptTestRunner改名爲Selenium架構

Selenium是開源的,能夠在GitHub上找到,如圖1-2所示。Selenium是大型項目,包含用於支持Web瀏覽器自動化的一系列工具和庫。框架

image004.png

1-2  GitHub上的Selenium項目信息編程語言

    從圖1-2能夠看出,在Selenium項目的倉庫中共有19個子項目,這也驗證了Selenium確實是大型項目。這裏咱們只關注Selenium的核心內容,而不去關注其餘輔助性的子項目。ide

 1.2  Selenium的歷史版本及核心組件

在寫做本書時,Selenium的最新可獲取版本是Selenium 4.0 alpha版本,而穩定版本是Selenium 3.0,對應的可下載版本是Selenium 3.141.0。爲了使讀者可以系統地掌握Selenium,我認爲很是有必要了解Selenium的歷史版本及核心組件,Selenium的核心組件如圖1-3所示。函數

image007.png

1-3  Selenium的核心組件工具

1.2.1  Selenium 1.0

1.Selenium IDE

2006年,Shinya Kasatani 開發了Selenium IDE的第一個版本,當時它是Firefox瀏覽器的一個插件。經過該插件,在Firefox瀏覽器中實現業務功能時,可以自動錄製業務功能腳本,如圖1-4所示。你還能夠根據須要將產生的腳本轉換爲PythonJavaRubyC#等腳本信息,如圖1-5所示。錄製的腳本或者由腳本產生的腳本信息能夠回放,從而驗證功能的正確性、可用性等。

image009.png

1-4  經過Selenium IDE錄製腳本

image011.png

1-5  Selenium IDE轉換後的Python腳本信息

Selenium IDE具備如下特色。

q    操做簡單,不要求操做人員具備編碼能力。

q    測試腳本可複用,從而減輕測試人員的重複性操做壓力。

q    能夠單個或批量運行測試腳本。

q    腳本支持命令行調用可用於持續集成。

q    能夠控制腳本的執行速度。

q    必定程度上支持腳本調試功能,如斷點、單步運行等。

q    能夠將腳本導出爲使用多種不一樣語言。

這裏只是對Selenium IDE作了簡單介紹,後續咱們將進行更加詳細的介紹。

2.Selenium Remote Control(RC)

         Paul Hammant開發了Selenium Remote Control,這裏咱們將Selenium Remote Control簡寫成Selenium RC。前面已經介紹過Selenium的核心是JavaScriptTestRunnerJavaScriptTestRunner是一組JavaScript函數,可首先經過使用瀏覽器內置的JavaScript解釋器進行解釋和執行Selenese命令,而後再將Selenium Core注入瀏覽器。可是,這裏存在同源策略問題,也就是說,假設有一個JavaScript測試腳本,該腳本要訪問baidu.com域,從而訪問baidu.com/newsbaidu.com/map之類的頁面元素,這沒有問題,但沒法訪問epubit.combing.com等其餘域的元素。由於baidu.com/newsbaidu.com/map同源,它們有相同的域,都是baidu.com。那麼怎麼纔可以跨域訪問呢?Selenium RC就是用來解決這一問題的,它分爲Client LibrarySelenium Server兩部分。Client Library部分提供了豐富的接口,主要用於編寫自動化測試腳原本鏈接、控制Selenium ServerSelenium Server負責充當客戶端配置的HTTP代理,並「欺騙」瀏覽器以使Selenium Core和被測試的Web應用程序共享相同的來源,接收來自客戶端程序的命令,並將它們傳給瀏覽器。

3.Selenium Grid

        Patrick Lightbody開發了Selenium GridSelenium Grid能夠實如今不一樣的瀏覽器和操做系統中並行地執行測試腳本,從而最大限度地縮短測試時間,提高工做效率。具體的工做模式以下。

   由一個Hub節點控制若干NodeHub節點負責管理和收集Node的註冊和工做狀態等信息,接收遠程調用並將相關請求分發給各Node來執行。

1.2.2  Selenium 2.0

        Selenium 2.0Selenium 1.0的基礎上添加了對Selenium WebDriver的支持。

1.Selenium WebDriver

Selenium WebDriverSimon Stewart2006年開發,是一個能夠在操做系統級別配置和控制瀏覽器的跨平臺測試框架。Selenium WebDriver可直接與瀏覽器應用程序進行本地交互。Selenium WebDriver支持各類編程語言,如PythonRubyPHPPerl等,還能夠與JUnitUnittest之類的單元測試框架集成以進行測試管理。

Selenium WebDriver架構主要包括4部分—— Selenium Client LibraryJSON Wire Protocal Over HTTP ClientBrowser DriversBrowsers,如圖1-6所示。

image014.jpg

1-6  Selenium WebDriver架構

q    Selenium Client LibrarySelenium自動化測試人員可使用JavaRubyPythonC#等語言,利用它們提供的庫來編寫腳本。

q    JSON Wire Protocol Over HTTP ClientJSON Wire Protocol是在HTTP服務器之間傳輸信息的REST風格的API。每一個瀏覽器驅動程序(如FirefoxDriverChromeDriver等)都有它們各自的HTTP服務器。

q    Browser Drivers:不一樣的瀏覽器都包含一個單獨的瀏覽器驅動程序。瀏覽器驅動程序與相應的瀏覽器通訊。當瀏覽器驅動程序接收到任何指令時,將在相應的瀏覽器中執行,響應信息將以HTTP的形式返回。

q    BrowsersSelenium支持多種瀏覽器,如FirefoxChromeIESafari等。

SeleniumWebDriver本來屬於兩個不一樣的項目。爲了彌補SeleniumWebDriver各自的不足,造成更加完善的Selenium測試框架,纔對這兩個項目進行了合併。

2.Selenium 3.0

目前發佈的穩定版本是Selenium 3.0Selenium 3.0版本作了如下更新。

q    去除了Selenium RC組件。

q    Selenium 3.0只支持Java 8及以上版本。

q    IE支持方面,只支持IE 9.0以上版本。

q    Selenium 3.0中的Firefox須要使用獨立的瀏覽器驅動。

3.Selenium 4.0

    自從20194月發佈Selenium 4.0的第一個alpha版本以來,截至目前Selenium 4.0已有4alpha版本,如圖1-7所示。Selenium 給自動化測試從業者帶來了更多的期待,那麼Selenium 4.0又有什麼新特性呢?

image015.png

1-7  Selenium 4.0 alpha版本的獲取方式(針對Java語言)

    單擊4.0.0-alpha-4連接,能夠查看對應的Maven依賴信息,如圖1-8所示。

           Selenium 4.0主要包括如下新特性。

q    Selenium IDE功能改版:用過Selenium IDE的讀者都清楚,以前Selenium IDE以插件的形式運行在FirefoxChrome瀏覽器中,改版後將可以用於更多瀏覽器,同時還提供了全新的基於Node.jsCLI(命令行)運行程序,可以並行執行測試用例,並提供經過和失敗的測試用例、執行耗時等相關信息。新的Selenium IDE運行程序徹底基於Selenium WebDriver

image018.jpg

1-8  Selenium 4.0.0-alpha-4Maven依賴信息

q    WebDriver API成爲W3C標準:WebDriver API不只用於Selenium,還用在不少其餘的自動化測試工具(如Appium)中。Selenium新版本最突出的變化是WebDriver API徹底遵循W3C標準,這意味着WebDriver API如今能夠跨不一樣的軟件實現,而不會出現任何兼容性問題。

q    Selenium Grid改良:若是你之前用過Selenium Grid,必定會遇到一些節點配置方面的問題並記憶深入。Selenium Grid有兩個基礎組件—— NodeHubNode用於執行測試用例,而Hub用於控制全部執行用例的Node。咱們在鏈接HubNode時,常常會出現不少問題。但在Selenium 4.0中,當啓動Selenium Grid時,Selenium Grid將同時充當HubNode的角色,使得鏈接過程變得很是容易,從而很好地支持了Docker部署,而且不存在線程問題。Selenium Grid 服務器還能夠輸出JSON格式的日誌文件。在用戶界面上,Selenium 4.0也有了不少改良,能夠直觀地看到執行測試用例的相關信息等。

q    更直觀方便的調試信息:鉤子(hook)和請求(request)跟蹤的日誌記錄也獲得了改進,由於可調試或可觀察性再也不僅適用於DevOps。自動化測試人員如今能夠更好地使用改進的用戶界面來進行調試。

q    更完善的文檔:文檔對於任何項目的成功都很是重要。自從Selenium 2.0發佈以來,這些文件已經不少年沒有更新了。也就是說,任何想學習Selenium的人都必須依賴舊的教程,但許多特性在Selenium 3.0中已經發生了變化。SeleniumHQ承諾將提供一份新的文檔,這也許是自動化測試工程師最期待的更新。

相關文章
相關標籤/搜索