天天看點

基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結

Selenium 是一個基于浏覽器的自動化工具,它提供了一種跨平台、跨浏覽器的端到端的web自動化解決方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid:

Selenium IDE:Firefox的一個擴充,它可以進行錄制回放,并可以把錄制的操作以多種語言(例如java,python等)的形式導出成測試用例。

Selenium WebDriver:提供Web自動化所需的API,主要用作浏覽器控制、頁面元素選擇和調試。不同的浏覽器需要不同的WebDriver。

Selenium Grid:提供了在不同機器的不同浏覽器上運作selenium測試的能力

本文中主要使用python結合Selenium WebDriver庫進行自動化測試架構的搭建。

一個典型的自動化測試架構一般包括用例管理子產品、自動化執行控制器、報表生成子產品和日志子產品等,這些子產品之間不是互相孤立的,而是相輔相成的。

基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結

下面來介紹下每個子產品的邏輯單元:

用例管理子產品

用例管理子產品包括用例的添加、修改、删除等操作單元,這些單元也會涉及到用例書寫的模式,測試資料的管理、可複用庫等

自動化執行控制器

控制器是自動化用例執行的組織子產品,主要負責以什麼方式去執行用例。比較典型的控制器有使用者圖形界面(GUI)和“commandline+檔案”兩種。

報表生成子產品

報表生成子產品主要負責執行完用例以後生成報表,報表一般以HTML格式居多,資訊主要包括用例的執行情況及相應的總結報告。另外還可以添加發送郵件功能。

日志子產品

日志子產品主要用來記錄用例的執行情況,以便于更高效的調查用例失敗資訊及追蹤用例執行情況。

測試對象是一個典型的背景系統的Web展現平台,基于此平台設計的自動化架構要包含測試用例管理、測試執行控制、測試報表及測試日志的生成,整體測試架構要輕量易用。

概要設計包括了四個大的子產品:公共庫子產品(可複用函數、日志管理、報表管理以及發送郵件管理)、用例倉庫(具體用例的管理)、頁面管理(單獨對Web頁面進行抽象,封裝頁面元素和操作方法)以及執行子產品。

概要設計類圖:

基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結

                測試Web對象是一個典型的單頁面應用,是以采用頁面模式(page pattern)來進行組織:

基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結

頁面模式是頁面與測試用例之間的橋梁,它将每個頁面抽象成一個單獨的頁面類,為測試用例提供頁面元素的定位和操作。

頁面模式的類圖如下:

基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結

BasePage作為基類隻包含一個driver成員變量,它用來标記Selenium中的WebDriver,以便在BasePage的派生類中定位頁面元素。LoginPage和PageN等作為派生類,可以提供相應頁面元素的定位和操作方法。比如測試對象的登入頁面:

基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結

從頁面可以看出,需要操作的頁面元素分别為:Username,Password,remember my username checkbox和Sign in按鈕,它們對應的操作為輸入使用者名和密碼,點選checkbox和點選Sign In按鈕,具體代碼級别的實作如下:

頁面基類BasePage.py:

LoginPage頁面繼承自BasePage,并進行Login Page的元素定位及操作實作。代碼中定位了username和password,并且添加了設定使用者名和密碼的操作。

基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結
基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結

采用頁面模式來管理頁面和測試用例有很多好處,主要展現在:

簡單并且清晰

每個頁面都有單獨的類來封裝頁面元素和操作,讓頁面操作更加具體化,而不是相對獨立的。

比如未使用頁面模式,測試用例的輸入使用者名和密碼的代碼:

使用頁面模式之後,輸入使用者名和密碼的代碼:

通過對比我們不難發現,未使用頁面模式的代碼組織比較混亂,步驟多,可讀性非常差,不難想象,一個通篇都是find_element_by_id或者send_Keys的測試用例到底有多糟糕!而使用了頁面模式之後,在哪個頁面做什麼操作都非常清晰,非常接近測試用例的步驟,易讀性非常好。

可複用性好

由于頁面操作都被封裝在了頁面類中,是以頁面方法和容易調用,可複用性非常好。而未使用頁面模式的用例隻能每次都實作一遍。

可維護性好

由于測試目标頁面的多變性,頁面元素的定位經常需要改變,利用了頁面模式後,隻需要修改一遍其頁面類中的定位就可以對所用用到該元素的測試用例生效;而在未使用該模式的情況下,必須修改每一個用到該元素的測試用例,非常容易遺漏,工作量也非常大。

綜合以上頁面模式的各種優點,我們在以後的web自動化中可以多使用該模式來組織頁面。

                公共庫子產品是為建立測試用例服務的,它主要包括常量、公共函數、日志管理、報表管理以及發送郵件管理等。

                公共庫子產品涉及到的功能一般多而雜,在設計的時候隻要遵循高内聚低耦合就可以了。比如常量、變量和一些公共函數可以放在同一個檔案中Common.py:

基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結
基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結

測試用例資訊類用來辨別測試用例,并且包括執行用例執行結果資訊,主要包括以下字段:

基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結
基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結

測試用例資訊需要在每個測試用例中執行個體化,以便對測試用例進行标記,并最終展現在測試報告中。

日志主要用來記錄測試用例執行步驟及産生的錯誤資訊,不同的資訊有不同的日志級别,比如Information,Warning,Critical和Debug。由于每個測試用例産生的日志條目比較少,是以在測試架構中隻利用了最進階别的日志列印,即Debug級别,該級别也會将其他所有的日志級别的資訊同樣列印出來。在具體的實作中引用了Python标準庫中的logging類庫,以便更友善的控制日志輸出:

基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結
基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結

報表管理及發送郵件子產品實作了報表(html格式)的生成及自動發送郵件的功能。報表和郵件依附于目前測試的執行,每次執行都會獨立的觸發報表生成和郵件發送。該子產品主要運用了Python中的lxml、smtplib和email庫。

                用例倉庫主要用來組織自動化測試用例。每條測試用例都被抽象成一個獨立的類,并且均繼承自unittest.TestCase類。 Python中的unittest庫提供了豐富的測試架構支援,包括測試用例的setUp和tearDown方法,在實作用例的過程中可以重寫。依托頁面管理和公共庫子產品實作的頁面方法和公共函數,每一個測試用例腳本的書寫都會非常清晰簡潔,一個簡單的Floor Manager Lite的登入用例如下:  

基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結
基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結

從這個測試用例中,我們可以看到

Setup中定義了執行測試用例前的一些執行個體化工作

tearDown對執行完測試做了清理和寫日志檔案工作

測試步驟、測試資料和測試檢查點非常清晰,易修改(比如使用者名密碼)

日志級别僅有Debug,是以寫日志僅需用同一Log方法

                執行子產品主要用來控制測試用例腳本的批量執行,形成一個測試集。用例的執行引用了Python标準庫中的subprocess來執行nosetests的shell指令,進而執行給定測試用例集中的用例。測試用例集是一個簡單的純文字檔案,實作過程中利用了.txt檔案testcases.txt:

用例前沒有“#“标記的測試用例腳本會被執行,而有”#“标記的則會被忽略,這樣可以很友善的控制測試集的執行,當然也可以建立不同的檔案來執行不同的測試集。

具體的調用代碼如下:

基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結
基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結

測試用例執行完畢後主要有兩種輸出:日志和測試報告。測試報告會html附件的形式通過郵件發出,例如:

基于Selenium的web自動化架構基于Selenium的web自動化架構1 什麼是selenium2 自動化測試架構3 自動化架構的設計與實作4 需要改進的子產品5 總結

     對于現有實作的測試架構,已經可以滿足web對象的自動化需求,但還是有些可以改進提高的地方,比如:

針對部分測試用例是否可以嘗試資料驅動

添加螢幕截圖功能

封裝selenium中By庫中的函數,以便更高效的定位頁面元素等

結合業界優秀的自動化架構和實踐持續改進

         基于selenium實作的web自動化架構不僅輕量級而且靈活,可以快速的開發自動化測試用例。結合本篇中的架構設計以及一些好的實踐,希望對大家以後的web自動化架構的設計和實作有所幫助。

源代碼:https://github.com/AlvinXuCH/WebAutomaiton 

文章轉載來源:https://www.cnblogs.com/AlwinXu/p/5836709.html

作者:徐文