摘抄了一份寫得不錯的自動化框架概述,來自 https://www.cnblogs.com/tdp0108/p/10476437.html
1 自動化測試框架概述
所謂的框架其實就是一個解決問題的思維,前言中描述的諸多問題如果得到解決,自然而然這種得到良好解決的東西它就可以稱之為一個框架,只是這個框架用來解決如何組織開展自動化測試。一個典型的自動化測試框架一般包括測試用例集模塊、測試執行控制模塊、測試報告生成模塊、日志記錄模塊、發送郵件模塊、測試截圖或者斷言驗證等模塊,這些模塊之間不是相互孤立的,而是相輔相成的存在。下圖為基本的自動化框架的基本單元或模塊:

下面簡要說明每個模塊的作用:
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面向對象都有哪些基本概念:
1、繼承(inheritance)子項繼承父項的某些功能,在程序中表現某種聯系
2、封裝(encapsulation)把需要重用的函數或者功能封裝,方便其他程序直接調用
3、類:對具有相同數據或者方法的一組對象的集合
4、對象:對象是一個類的具體事例
5、實例化:是一個對象實例化的實現,就是一個具體的對象
6、實例屬性:一個對象就是一組屬性的集合
7、實例方法:所有存取或者更新對象某個實例一條或者多條屬性函數的集合。
8、類屬性:屬於一個類中所有對象的屬性,
9、類方法:在一個類中定義的方法
這里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的設計模式來開展
