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


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

 1.1  Selenium自動化測試框架概述

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

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

 

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

  那么Selenium是誰開發的?它是用來解決什么問題的?它為什么會被自動化測試人員廣泛使用呢?

 

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

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

 

圖1-2  GitHub上的Selenium項目信息

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

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

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

 

圖1-3  Selenium的核心組件

1.2.1  Selenium 1.0

1.Selenium IDE

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

 

圖1-4  通過Selenium IDE錄制腳本

圖1-5  由Selenium IDE轉換后的Python腳本信息

  Selenium IDE具有以下特點。

  • 操作簡單,不要求操作人員具有編碼能力。
  • 測試腳本可復用,從而減輕測試人員的重復性操作壓力。
  • 可以單個或批量運行測試腳本。
  • 腳本支持命令行調用可用於持續集成。
  • 可以控制腳本的執行速度。
  • 一定程度上支持腳本調試功能,如斷點、單步運行等。
  • 可以將腳本導出為使用多種不同語言。

這里只是對Selenium IDE做了簡單介紹,后續我們將進行更加詳細的介紹。

2.Selenium Remote Control(RC)

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

3.Selenium Grid

  Patrick Lightbody開發了Selenium Grid。Selenium Grid可以實現在不同的瀏覽器和操作系統中並行地執行測試腳本,從而最大限度地縮短測試時間,提升工作效率。具體的工作模式如下。

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

1.2.2  Selenium 2.0

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

1.Selenium WebDriver

  Selenium WebDriver由Simon Stewart在2006年開發,是一個可以在操作系統級別配置和控制瀏覽器的跨平台測試框架。Selenium WebDriver可直接與瀏覽器應用程序進行本地交互。Selenium WebDriver支持各種編程語言,如Python、Ruby、PHP和Perl等,還可以與JUnit和Unittest之類的單元測試框架集成以進行測試管理。

  Selenium WebDriver架構主要包括4部分—— Selenium Client Library、JSON Wire Protocal Over HTTP Client、Browser Drivers和Browsers,如圖1-6所示。

 

圖1-6  Selenium WebDriver架構

  • Selenium Client Library:Selenium自動化測試人員可以使用Java、Ruby、Python、C#等語言,利用它們提供的庫來編寫腳本。
  • JSON Wire Protocol Over HTTP Client:JSON Wire Protocol是在HTTP服務器之間傳輸信息的REST風格的API。每個瀏覽器驅動程序(如FirefoxDriver、ChromeDriver等)都有它們各自的HTTP服務器。
  • Browser Drivers:不同的瀏覽器都包含一個單獨的瀏覽器驅動程序。瀏覽器驅動程序與相應的瀏覽器通信。當瀏覽器驅動程序接收到任何指令時,將在相應的瀏覽器中執行,響應信息將以HTTP的形式返回。
  • Browsers:Selenium支持多種瀏覽器,如Firefox、Chrome、IE、Safari等。

Selenium和WebDriver原本屬於兩個不同的項目。為了彌補Selenium和WebDriver各自的不足,形成更加完善的Selenium測試框架,才對這兩個項目進行了合並。

2.Selenium 3.0

目前發布的穩定版本是Selenium 3.0,Selenium 3.0版本做了以下更新。

  • 去除了Selenium RC組件。
  • Selenium 3.0只支持Java 8及以上版本。
  • 在IE支持方面,只支持IE 9.0以上版本。
  • Selenium 3.0中的Firefox需要使用獨立的瀏覽器驅動。

3.Selenium 4.0

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

 

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

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

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

  • Selenium IDE功能改版:用過Selenium IDE的讀者都清楚,之前Selenium IDE以插件的形式運行在Firefox和Chrome瀏覽器中,改版后將能夠用於更多瀏覽器,同時還提供了全新的基於Node.js的CLI(命令行)運行程序,能夠並行執行測試用例,並提供通過和失敗的測試用例、執行耗時等相關信息。新的Selenium IDE運行程序完全基於Selenium WebDriver。

 

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

  • WebDriver API成為W3C標准:WebDriver API不僅用於Selenium,還用在很多其他的自動化測試工具(如Appium)中。Selenium新版本最突出的變化是WebDriver API完全遵循W3C標准,這意味着WebDriver API現在可以跨不同的軟件實現,而不會出現任何兼容性問題。
  • Selenium Grid改良:如果你以前用過Selenium Grid,一定會遇到一些節點配置方面的問題並記憶深刻。Selenium Grid有兩個基礎組件—— Node和Hub。Node用於執行測試用例,而Hub用於控制所有執行用例的Node。我們在連接Hub和Node時,經常會出現很多問題。但在Selenium 4.0中,當啟動Selenium Grid時,Selenium Grid將同時充當Hub和Node的角色,使得連接過程變得非常容易,從而很好地支持了Docker部署,並且不存在線程問題。Selenium Grid 服務器還可以輸出JSON格式的日志文件。在用戶界面上,Selenium 4.0也有了很多改良,可以直觀地看到執行測試用例的相關信息等。
  • 更直觀方便的調試信息:鈎子(hook)和請求(request)跟蹤的日志記錄也得到了改進,因為可調試或可觀察性不再僅適用於DevOps。自動化測試人員現在可以更好地使用改進的用戶界面來進行調試。
  • 更完善的文檔:文檔對於任何項目的成功都非常重要。自從Selenium 2.0發布以來,這些文件已經很多年沒有更新了。也就是說,任何想學習Selenium的人都必須依賴舊的教程,但許多特性在Selenium 3.0中已經發生了變化。SeleniumHQ承諾將提供一份新的文檔,這也許是自動化測試工程師最期待的更新。


    答疑解惑群:50788246


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM