1. 程式人生 > >使用Selenium實現基於Web的自動化測試

使用Selenium實現基於Web的自動化測試

Selenium 及其實現原理

Selenium 的主要功能包括:

1)測試與瀏覽器的相容性:測試應用程式能否相容工作在不同瀏覽器和作業系統之上。

2)測試系統功能:錄製用例自動生成測試指令碼,用於迴歸功能測試或者系統用例說明。

簡而言之,Selenium 就是一款可以錄製使用者操作,幫助 Web 測試人員簡化重複勞動的工具。

目前為止 Selenium 有兩種版本:

  • Selenium 1(Selenium RC,Remote Control):傳統 Selenium 框架,支援多種程式語言指令碼生成。但需要啟動一個代理 Server 來處理使用者與測試 Server 之間的通訊。
  • Selenium 2(Selenium Webdriver):全新自動化介面,突破了 Selenium 1 的一些限制,剔除了中間 Server,但由於寫這篇文章為止自動生成指令碼工具對 Selenium 2 的支援還不好,適合熟悉 Selenium API 的手寫 case 測試人員使用。

閱讀本文讀者可以學習到以下技能:

  • 瞭解 Selenium 自動化測試框架的基本概念。
  • 學會搭建應用 Selenium 自動化測試框架的環境。
  • 搭建一個自整合的測試容器以持續測試 Selenium 測試用例。

本文著重介紹傳統 Selenium 1 的原理及使用方法。接下來讓我們看看 Selenium 是如何呼叫錄製指令碼並實現自動測試的。

Selenium 1 實現原理

Selenium 引入了 Remote Control Server 這樣一個代理 Server,JavaScript 指令碼注入和與 Server 通訊都通過這個代理 Server 來進行。如下圖所示:

圖 1. Remote Control 模式執行流程
圖 1. Remote Control 模式執行流程

之所以引入這個代理 Remote Control Server 是因為“同源策略”的限制,通過這個代理伺服器來“欺騙”遠端 Server,達到使其以為是從同一個地方 load 程式碼以正確返回請求資料的效果。

流程說明:

  1. 客戶端建立與 selenium-RC server 的連線。
  2. Selenium RC Server 啟動一個瀏覽器(或是已經使用中),並注入 JS 程式碼
  3. 將 Selenese 程式碼傳到客戶端的 Selenium-Core 中。
  4. Selenium-Core 翻譯並解析執行使用者錄製的操作。
  5. 讓代理 Server 進行通訊
  6. Remote Control Server 負責跟遠端 Web 應用伺服器進行通訊。
  7. 操作完成,顯示結果,並執行下一指令。

以上就是 Selenium Remote Control 的執行原理,接下來的章節中將一步步以圖例加說明的方式快速說明如何使用 Selenium 來錄製指令碼,匯入 Java 工程,然後定期維護工程。

使用 Selenium 實現自動化測試

使用 Selenium IDE 錄製使用者操作

Selenium IDE 是一個基於 Firefox 的外掛,使用者可以在通過這個外掛將客戶端操作錄製成指令碼並匯出為 Java、c#、Ruby 等多種執行語言以便統一管理測試用例。

下載 FireFox: 推薦 Firefox 5.0 以上,目前 Selenium IDE 只提供 Firefox 的外掛。

安裝外掛:

Tools --> Add-ons --> 將下載的 selenium-ide-1.x.xpi 檔案拖入對話方塊即可安裝。

安裝後可以啟動 IDE 外掛檢視是否安裝成功。

圖 2. 啟動 Selenium IDE 外掛
圖 2. 啟動 Selenium IDE 外掛

安裝後,以 IBM Systems Director 產品為例,說明如何實現“使用者登入”這個測試用例。

  1. 點選錄製按鈕 如下圖 3 中的 1
  2. 錄製過程中,登入使用者介面,輸入使用者名稱密碼。如下圖 4
  3. 然後可以通過是否包含某些字串來驗證是否登入成功。如果下圖 5
  4. 回到登入 IDE 介面,檢視已錄製步驟 如圖 3 中的 2
  5. 在 IDE 介面中可以驗證錄製的指令碼,必要時回到第四步,如圖 3 中的 3

在 IDE 中重執行錄製的指令碼通過就說明指令碼沒問題,可以用於測試用例程式碼匯出了。

圖 3. Selenium IDE 錄製視窗
圖 3. Selenium IDE 錄製視窗
圖 4. 錄製過程中,輸入使用者名稱密碼
圖 4. 錄製過程中,輸入使用者名稱密碼
圖 5. 通過確認是否包含某些文字來驗證是否成功登入
圖 5. 通過確認是否包含某些文字來驗證是否成功登入

使用 Selenium IDE 匯出 JUnit 測試用例

在 Selenium IDE 中執行成功後,就可以把測試指令碼匯出成 JUnit 測試用例了,如圖 6 所示:

圖 6. 匯出 JUnit 程式碼
圖 6. 匯出 JUnit 程式碼

匯出用例如下:

清單 1. VerifyLogin.java
 import com.thoughtworks.selenium.*; 
 import org.junit.After; 
 import org.junit.Before; 
 import org.junit.Test; 

 public class VerifyLogin extends SeleneseTestCase { 
 @Before 
 public void setUp() throws Exception { 
     selenium = new DefaultSelenium("localhost", 4444, "*chrome", "localhost:8422/"); 
     selenium.start(); 
 } 

 @Test 
 public void testVerifyDirectorLogin() throws Exception { 
     selenium.setTimeout("300000"); 
     selenium.open("/ibm/console/logon.jsp"); 
     selenium.type("id=j_username", "test"); 
     selenium.type("id=j_password", "test"); 
     selenium.click("id=other"); 
     selenium.waitForPageToLoad("300000"); 
     verifyTrue(selenium.isTextPresent("IBM Systems Director")); 
 } 

 @After 
 public void tearDown() throws Exception { 
    selenium.stop(); 
   } 
 }

說明:首先例項化一個 DefaultSelenium 物件,傳入的引數分別是 RC 伺服器 IP、埠、瀏覽器型別和待測試的 Server 的資訊。然後在測試方法裡呼叫 Selenium 1 的 API,這裡的程式碼完全由 IDE 生成,就為我們省去了很多重複程式碼工作。

執行測試用例:

有了基於 JUnit 的執行測試用例就可以把它匯入到 Java IDE 中執行測試了。執行中既需要客戶端驅動支援(用於 Eclipse 編譯),也需要啟動 RC Server:

執行命令 java –jar selenium-server-standalone-2.5.0.jar 啟動 Selenium RC Server:

圖 7. 啟動 Selenium RC Server
圖 7. 啟動 Selenium RC Server

啟動後就可以直接在 Eclipse 中執行測試用例,RC Server 就會啟動新視窗並自動按照錄制指令碼進行測試。並可在 Eclipse 中檢視執行結果。

下面讓我們看看怎樣脫離 Eclipse 自己搭建一個可以持續測試的容器。

構建 JUnit 測試容器以持續測試 Selenium 的測試用例

我們搭建的這個容器可以檢測某個資料夾裡所有的測試用例自動執行 JUnit 程式碼進行測試。如果需要還可以將這個容器合併到持續整合環境裡,以達到不間斷持續功能性測試的需求。

在這裡我們會用到 Ant 工具。可以在這裡下載:

基礎架構

圖 8. 基於 Selenium 的 JUnit 的測試容器架構圖
圖 8. 基於 Selenium 的 JUnit 的測試容器架構圖

可以看見測試人員的工作如紫色箭頭所示,而自動化工作如藍色箭頭所示。

這套框架的意義在於,它能自動識別測試用例,並讀取配置檔案以測試套件執行不同的測試用例。它還可以被合併到專案持續整合軟體中,定期地持續進行基於 Web 的功能性測試,並將報告以郵件形式通知管理人員。

說明:

  1. 由測試人員錄製指令碼並匯出 JUnit。
  2. 測試人員修改配置檔案,將測試用例包含在測試套件中。
  3. 合併在持續整合軟體後,框架會定期檢測配置的測試套件
  4. 逐個載入測試用例。
  5. 以測試套件為單位其執行所有測試用例。
  6. 執行完成後將測試套件的結果報告以郵件形式通知管理人員

實現這套框架最關鍵的當屬 Ant 執行指令碼了,也是程式執行的入口。這裡列出 Ant 的執行指令碼,以供讀者參考:

清單 2. Build.xml
以下為部分重點內容,會在後面加以說明。完整的 build.xml 請檢視附件。
 <?xml version="1.0" encoding="UTF-8"?> 
 <project name="automationtesting" default="run" basedir="."> 
 ……
 <!-- 呼叫 Junit task 執行測試用例-->
 <mkdir dir="${xml}/${var}" /> 
 <junit printsummary="yes"> 
 <classpath> 
 <fileset dir="${lib}"> 
 <include name="**/*.jar" /> 
 </fileset> 
 <pathelement path="${classpath}" /> 
 </classpath> 
 <batchtest todir="${xml}/${var}"> 
 <filelist refid="casesToBeRunning"></filelist> 
 <formatter type="xml" /> 
 </batchtest> 
 </junit> 
……
 <!-- 呼叫 Junitreport task 生成報表-->
 <junitreport todir="${reports}"> 
 <fileset dir="${xml}/${var}"> 
 <include name="TEST-*.xml" /> 
 </fileset> 
 <report id="${var}_Report" format="noframes" todir="${reports}/html"> 
 <param name="TITLE" expression="Automation Testing Results for ${var}" /> 
 </report> 
 </junitreport> 
……

 <!-- 呼叫 mail task 傳送郵件-->
 <mail mailhost="xx.xx.xx.xx" subject="${reportResult} Result for TestSuite: ${var}"> 
 <from address="AutomationTestTool" /> 
 <to address="[email protected]" /> 
 <message mimetype="text/html" src="${reports}\html\Testsuite-report-${var}.html"> 
 </message> 
 <fileset dir="${reports}\html"> 
 <include name="Testsuite-report-${var}.html" /> 
 <include name="Testcase-reports-${var}.zip" /> 
 </fileset> 
 </mail> 
 </project>

說明:程式的入口是 Run task,在 Run task 裡先是編譯整個工程,然後讀取 TestSuites.xml 配置檔案,迴圈執行每一個測試套件。過程中,以此執行以下操作:

  • 讀取配置的並且實現 TestCase 的 Java 類;
  • 呼叫 Ant 的 junit task 執行測試用例;
  • 呼叫 Ant 的 junitreport task 生成報表;
  • 呼叫 Ant 的 mail task 傳送報表到指定郵箱。
清單 3. TestSuites.xml 配置檔案樣例
 <TestSuites> 
 <TestSuite enable="false" id="DiscoverTestSuite"> 
 <Testcase>VerifyLogin</Testcase> 
 <Testcase>DiscoverDevice</Testcase> 
 </TestSuite> 
 <TestSuite enable="true" id="DeleteDeviceTestSuite"> 
 <Testcase>VerifyLogin</Testcase> 
 <Testcase>DeleteDevice</Testcase> 
 </TestSuite> 
 </TestSuites>

說明:配置檔案中定義了兩個測試套件,第一個包含了 2 個測試用例,先 Login 再發現裝置。第二個也包含了 2 個測試用例,先 Login 再刪除裝置。而第一個測試套件 enable=false 將不被執行。

到此為止,一個簡單的可持續測試框架就已經搭建完畢,來執行下看看結果吧

執行測試組建

用 ant 命令執行 Build.xml 即可執行測試框架。

圖 9. 工具執行時
圖 9. 工具執行時

執行完成後就會將所有測試用例的結果以報告形式傳送郵件到指定郵箱。

圖 10. 報告式樣
圖 10. 報告式樣

結束語

本文首先介紹了 Selenium 以及 Selenium 1 的實現原理。緊接著用一個 Login 的簡單例子講述瞭如何去搭建 Selenium 執行環境,並將其匯出為 JUnit 程式碼。最後構建了一個基於 Ant 的自動化測試 Selenium 框架,持續地對生成的 JUnit 測試用例進行管理以及功能性測試。讀者也可以借鑑該指令碼搭建自己的輕量級的單元測試框架。

目前主流的 web 自動化測試框架還有 QTP,基於 Ruby 的 WATIR。與這些框架相比,Selenium 支援 IE、Mozilla Firefox 等多種瀏覽器,同時支援自動錄製指令碼以及 Java、C#、Ruby 等多種執行語言的自動生成,測試用例製作快捷,執行也比較快速。對於較為輕量級相比起來 Selenium 要顯得更為靈活實用。Selenium 不僅用於功能性測試及迴歸測試,同時也可用於 Web 視覺化驗收測試。更多的,Selenium 可整合在諸如 Cruise 持續整合軟體中,為整體專案提供更大整合測試範圍。

下載

描述 名字 大小
build.xml 示例 2KB

相關推薦

使用Selenium實現基於Web自動化測試

Selenium 及其實現原理 Selenium 的主要功能包括: 1)測試與瀏覽器的相容性:測試應用程式能否相容工作在不同瀏覽器和作業系統之上。 2)測試系統功能:錄製用例自動生成測試指令碼,用於迴歸功能測試或者系統用例說明。 簡而言之,Selenium 就是一款可以錄製使用者操作,幫助 Web

在Linux下實現Python+selenium+chrome的web自動化測試

宣告:ubuntu版本是在16.04下進行的 1、首先需要先安裝Chrome sudo apt-get install libxss1 libappindicator1 libindicator7 wget https://dl.google.com/linux/direc

基於Selenium技術的Web自動化測試框架

時光飛逝,轉瞬之間,已在計算機軟體這個行業,在開發和測試崗位工作了10年。而這其中的酸楚,苦澀和甜美,恐怕只有親身經歷過才能深有體會。 在當今資訊社會,飛速發展的時代大背景下,小小的我,無疑是幸運的。感謝奮戰過的每一個崗位,感謝每一位領導,感謝每一位同事。是他們提供了平臺和

一隻自動化測試小白的學習記錄——Python+Selenium+Sublime 運用API、元素定位、元素操作方法、滑鼠鍵盤事件實現入門Web自動化測試

題外話:之前做一些自動化測試的入門實驗都是用的Python的IDLE進行編寫的,正兒八經的好處(可以一行一行地執行,因此能夠直觀地看到對於網頁測試的每一步變化,也能夠明確地知道在哪一步出了錯),不知所云的壞處(沒有一下子執行指令碼程式的成就感?????(黑人嚴肅臉)) 。於是

基於Selenium+Python的web自動化測試框架

一、什麼是Selenium? Selenium是一個基於瀏覽器的自動化測試工具,它提供了一種跨平臺、跨瀏覽器的端到端的web自動化解決方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE:Firefo

Selenium+Python進行web自動化測試(Demo+API)

mod amp cep path chrome all 配置使用 nas img Selenium官方網站 http://selenium-python.readthedocs.io/ 配置使用環境 下載相應的瀏覽器驅動, Firefox 是默認的 本文以 chrome 為

火狐外掛安裝-基於web自動化測試

一、Firebug 安裝 1、  開啟火狐瀏覽器—選擇右上角“開啟選單”(圖一)----附件元件(圖二) 圖一   圖二   2、  點選:擴充套件(圖三)—-------用於所有附加元件的工具(圖四)----選擇“從檔案安裝附加元件” 圖三  

seleniumSelenium基於Python3的Web自動化測試腳本在IE上運行慢的解決方法

drivers 解決方法 bsp exe com 32位 方法 解決辦法 文本 闡述問題: 執行自動化腳本時,發現文本輸入在IE瀏覽器上特別慢,這樣大大降低了自動化效率 解決辦法:原因是原先下載的IEDriverServer.exe為64位系統的IE,換為32位的IED

Selenium基於Python 進行 web 自動化測試

對象 little syn can chang 執行 pri lba 版本 From: https://www.cnblogs.com/hanxiaobei/p/6108677.html 配置使用環境 下載相應的瀏覽器驅動, Firefox 是默認的 本文以 chrom

基於SeleniumWeb自動化測試實戰&面試題以及答案整理

1.你如何用Selenium測試? Selenium+Maven+TestNG+Jekins   2.你在測試中常遇到哪些問題? 這個常見的比如定位問題,   3.如何解決問題? 先思考,然後百度,考慮網速、電腦配置等原因,這題主要看重解決問題的能力和

基於seleniumweb自動化測試

第1章 自動化測試的前提及整體介紹測試的現狀及課程目標,功能測試和自動化測試的區別,自動化測試流程有哪些,自動化用例和功能用例的區別,自動化測試用例的編寫,selenium的優勢及工作原理。1-1 Web自動化測試課程介紹1-2 功能測試和自動化測試的區別1-3 自動化測試流程有哪些1-4 自動化測試用例和手

Mac搭建pyhton+selenium+pycharm實現web自動化測試

安裝pip或者安裝pip3:  1 sudo easy_install pip  二選一安裝  1 sudo easy_install python3-pip        安裝selenium:  1 sudo p

Selenium+Python實現WEB自動化測試】000_先隨便聊聊

閒聊 自我介紹 逮嘎猴,我是安叔。其實年紀沒那麼大,被人叫叔是因為大學時的一個梗,後來叫著叫著也習慣了。 我自己挺喜歡被人叫叔的,也喜歡自稱叔, 家有大叔初養成。並沒有佔便宜的意思。 部落格簡述 為什麼開始寫部落格?大概因為兩點吧。 一是對自己近一兩年學習的技能總

Selenium+Python實現WEB自動化測試】001_自動化環境準備

叔是個俗人,不懂用“工欲善其事必先利其器”之類的話來給系列部落格開篇。 只能說,環境搭建是繞不開的各位老鐵,必須先講環境怎麼弄。幸運的是,Selenium環境比Appium弄起來簡單多了。 作業系統 Windows7旗艦版。 瀏覽器準備 系列博文都是基於Chro

基於SeleniumWeb自動化測試實戰&面試題以及答案整理

1.你如何用Selenium測試? Selenium+Maven+TestNG+Jekins 2.你在測試中常遇到哪些問題? 這個常見的比如定位問題, 3.如何解決問題? 先思考,然後百度,考慮網速、電腦配置等原因,這題主要看重解決問題的能力和思維。

python2.7基於seleniumweb自動化測試專案--house目錄

#ResidentiaPage.py ###樓盤模組 # -*- coding:utf8 -*- from base.Base import Base from base import Page from selenium.webdriver.common.by imp

python2.7基於seleniumweb自動化測試專案--user目錄

#Login.py ###封裝登入系統 # -*- coding:utf8 -*- from base.Base import Base from selenium.webdriver.common.by import By from base.Base import l

淺談基於SeleniumWeb自動化測試框架

 ● 面臨的挑戰   從Google到Facebook,從Twitter到新浪微博,新一輪的網際網路熱潮正在全世界蔓延。隨著雲概念的日益清晰,越來越多的企業也已經擺脫了傳統的C/S架構的應用框架而轉投雲端計算的懷抱,Web已經成為我們生活和工作的重心。   有別於傳統

Selenium基於Python的web自動化測試框架(3)-搭建selenium環境

搭建環境 建立selenium虛擬環境 mkvirtualenv selenium-py3 selenium-py3是虛擬環境的名字 由於筆者本地只有python3版本,所以不需要指定python

基於SeleniumWeb自動化測試實戰 課程中面試題和答案整理

1.你如何用Selenium測試?Selenium+Maven+TestNG+Jekins2.你在測試中常遇到哪些問題?這個常見的比如定位問題,3.如何解決問題?先思考,然後百度,考慮網速、電腦配置等原因,這題主要看重解決問題的能力和思維。4.Selenium的工作原理?可以