Python3+Selenium2完整的自動化測試實現之旅(五):自動化測試框架、Python面向對象以及POM設計模型簡介

       

前言

     以前的系列博客,陸續學習整理了自動化測試環境的搭建、IE和Chrome瀏覽器驅動的配置、selenium-webdriver模塊封裝的元素定位以及控制瀏覽器、處理警示框、鼠標鍵盤等方法的使用,這些內容還須要後續多加練習掌握,以達到靈活運用的程度。but,這僅僅只是開始,說明我們可以使用selenium框架下的webdriver寫出一個個測試用例腳本,也僅僅寫給本身看看,若是須要寫100條、1000條測試腳本,並可以高效快速的編寫完成並批量執行,且要看到完整的執行結果,失敗多少,成功多少,等等諸多問題須要一個完善的解決問題的思想。說白了就是如何高效的組織測試腳本編寫和後續的維護,並輸出咱們自動化測試的最重要的一個部分:測試報告,所以解決上述問題的思想就是須要寫一個適用於測試團隊的自動化測試框架,並在框架下持續的進行腳本開發和維護的過程。那麼,何爲框架?來來來,喝杯咖啡,提提神先~~~前端

1  自動化測試框架概述

     所謂的框架其實就是一個解決問題的思惟,前言中描述的諸多問題若是獲得解決,天然而然這種獲得良好解決的東西它就能夠稱之爲一個框架,只是這個框架用來解決如何組織開展自動化測試。一個典型的自動化測試框架通常包括測試用例集模塊、測試執行控制模塊、測試報告生成模塊、日誌記錄模塊、發送郵件模塊、測試截圖或者斷言驗證等模塊,這些模塊之間不是相互孤立的,而是相輔相成的存在。下圖爲基本的自動化框架的基本單元或模塊:java

下面簡要說明每一個模塊的做用:web

  1. Test Case Module

測試用例模塊包括具體的測試用例腳本集、測試數據的管理以及公共函數庫編程

        2.Test Run Control設計模式

測試運行控制模塊是自動化用例執行組織模塊,主要負責以什麼方式執行測試用例腳本,以及什麼時間執行、執行多少次、執行哪些用例等瀏覽器

       3.Test Report Module框架

測試報告生成模塊主要負責測試執行的結果集生成報表,報表通常以HTML格式體現,能夠知道執行了多少條用例,成功數、失敗數等信息函數

      4.Logging Module工具

日誌模塊主要用來記錄腳本執行的狀況,便於更加高效的查看腳本執行的狀況以及位置,和腳本執行失敗的狀況單元測試

     5.Send Email Module

發送郵件模塊主要實現測試報告以郵件的形式發送

     6.Test image

測試用例執行後預期結果的驗證,通常以截圖或者日誌以及測試斷言的形式來判斷用例是否符合預期結果

2  自動化測試框架須要的環境

Python3.6:因爲Python2版本要逐步退出歷史舞臺,故選用主流的Python3版本,後續的測試腳本均基於Python3編寫

PyCharm:Python IDLE開發工具,便於快速建立項目和開發腳本,以及它相應的代碼錯誤檢測和代碼調試機制,防止代碼語法錯誤,從而構建層次清晰的項目和代碼結構。

Selenium2:使用Selenium自動化測試框架,主要用到Selenium Webdriver模塊,能模擬提供瀏覽器、頁面元素定位、元素操做、鼠標鍵盤等相關的操做和方法

Python Unittest:Python的單元測試框架模塊,在此框架下編寫具體的業務測試用例腳本,另外此框架能組織測試用例集的執行和測試場景恢復

Python相關的標準庫:time模塊主要提供對時間的相關操做, os.path 模塊主要提供對文件路徑相關的操做,logging模塊主要提供對日誌相關的設置 ,smtplib 模塊主要負責發送郵件等

Python 相關的第三方模塊庫:HTMLTestRunner 模塊主要用於生成HTML格式的可視化測試報告,xlrd模塊是讀取excel文件數據的模塊,xlwt模塊是向excel文件中寫入數據的模塊

其中Python單元測試框架模塊以及標準庫和第三方庫的使用,後續的博客會陸續總結出來

3  自動化測試框架設計思想:Python面向對象

      面向對象的編程---object oriented programming,簡稱:OOP,是一種編程的思想。OOP把對象當成一個程序的基本單元,一個對象包含了數據和操做數據的函數或者方法。面向對象能極大的提升了編程的效率,使其編程的重用性增高。所以既然我們是寫測試腳本,固然但願可以快速開發並易於維護,寫出層次清晰的代碼。就好比:一個登陸功能的腳本,我們能夠寫成一個公共的函數,後續其餘的腳本用例須要使用登陸這塊的,直接調用便可,這裏就是一個簡單的封裝啦!Python從誕生開始就是一基於面向對象來設計的語言,相似於java面向對象的思想。那麼Python面向對象都有哪些基本概念:

       一、繼承(inheritance)子項繼承父項的某些功能,在程序中表現某種聯繫

  二、封裝(encapsulation)把須要重用的函數或者功能封裝,方便其餘程序直接調用

  三、類:對具備相同數據或者方法的一組對象的集合

  四、對象:對象是一個類的具體事例

  五、實例化:是一個對象實例化的實現,就是一個具體的對象

  六、實例屬性:一個對象就是一組屬性的集合

  七、實例方法:全部存取或者更新對象某個實例一條或者多條屬性函數的集合。

  八、類屬性:屬於一個類中全部對象的屬性,

  九、類方法:在一個類中定義的方法

這裏Python面向對象的話題較大,這裏就再也不深刻探討,我們後續在實際的測試框架模塊的實現過程當中以一個個實例進行說明,反正Python面向對象的思想必定要深刻骨髓,寫多了就天然知道其好處。

4  自動化測試框架設計思想:POM(Page Object Model)頁面對象模型

       POM是很是流行的自動化測試模型,它是一種測試腳本開發思想,採用POM的目的是爲了解決軟件前端元素或者UI界面頻繁變化,從而形成自動化測試腳本維護和更改困難,其基本理念是將軟件各個頁面抽象成一個單獨的頁面類,類中封裝頁面元素的定位和操做方法,這種頁面模式是頁面與測試用例之間的橋樑。以下圖所示:

     採起POM後,主要的區別就是,把頁面元素和業務邏輯和測試腳本分離出來到兩個不一樣類文件。ClassA只寫頁面元素定位,和業務邏輯代碼操做的封裝,ClassB只寫測試腳本,不關心如何定位元素,而後繼承ClassA中的方法去覆蓋不一樣的測試場景。若是前端頁面發生變化,只須要修改ClassA的元素定位,而不須要去修改ClassB中的測試腳本代碼。下圖爲對比非POM模式下的狀況:

POM主要有如下優勢:

1. 把web ui對象從測試腳本分離,業務代碼和測試腳本分離。

2. 每個頁面對應一個頁面類,頁面的元素寫到這個頁面類中。

3. 頁面類主要包括該頁面的元素定位,和這些元素相關的業務操做代碼封裝的方法。

4. 代碼複用,從而減小測試腳本代碼量。

5. 層次清晰,同時支持多個編寫自動化腳本開發,例如每一個人寫哪幾個頁面,不影響他人。

總結:後續自動化測試框架各個模塊單元的實現以及後續的測試腳本的開發編寫,都會以Python面向對象和POM的設計模式來開展

相關文章
相關標籤/搜索