Time will tell(時間會證實一切).html
本文會以一個web端的UI自動化測試框架設計爲例。在進行自動化框架設計以前咱們首先要明白幾個問題:web
(1)什麼是自動化框架?
(2)設計的時候應該注意什麼原則?
(3)而後該怎麼作?面試
一、框架瀏覽器
特指爲解決一個開放性問題而設計的具備必定約束性的支撐結構。在此結構上能夠根據具體問題擴展、安插更多的組成部分,從而更迅速和方便地構建完整的解決問題的方案。框架
框架是整個或部分系統的可重用設計,表現爲一組抽象構件及構件實例間交互的方法。也就是說框架自己不解決特定的問題,它是經過擴展的各類組件或者工具來解決問題,而且它能夠方便的添加或者修改部分組件的功能。maven
二、自動化測試框架工具
拆分來看其實就是三個方面,自動化、測試、框架,什麼是框架上面說了,還有就是它能執行測試,並且仍是自動化的,因此框架的各個組件的主要功能就是圍繞着如何自動化如何執行測試展開的。學習
這裏能夠把框架的各個功能稱做模塊,那咱們來看看都須要那些模塊,須要一個基礎模塊,主要是怎麼實現腳本編寫,管理模塊,主要的行爲是持續集成,定時執行、case管理,統計模塊,主要是發送測試報告,統計分析。測試
三、總結優化
自動化測試框架的定義就是:把在自動化測試過程當中用到的一些功能或者工具,分裝成各個模塊,包括如何進行自動化腳本編寫以及分層功能的基礎模塊,進行持續集成、定時任務的管理模塊,發送測試報告、進行測試結果統計分析的統計模塊等,將這些模塊組成一套可重用的骨架。
通用性:可以在各類各樣的系統和平臺都可以使用;
易維護性:可以把咱們的數據、用例、框架的實現進行獨立的維護,可以在實現完善的過程,快速的定義到維護的點,而不對框架的其餘功能形成影響;
定時處理:可以在指定的時間執行;
持續集成:當被測程序和測試代碼有更新可以自動執行;
調試:可調試行強;
測試結果:測試報告、測試數據的統計分析;
能夠把自動化測試框架主體分爲兩部分,一個是內部框架,一個是外部框架,內部框架就是咱們本身實現的測試框架代碼,外部框架就是拋開咱們實現的核心代碼,要達到自動化測試框架設計原的一些內容時用到的一些第三方工具。
主要是指以webdriver爲核心,輔之外部第三放框架和工具。用以實現持續集成、自動部署、腳本執行、遠程調用、報告優化、郵件發送導等功能性框架,實現自動化框架設計原則的一些外圍的組件。
也就是分層框架,目的在於更好的優化和管理測試用例,更便捷的進行數據、元素、腳本的維護和更快速的建立新腳本
一、通用的外部框架實現邏輯
maven或者tox-自動編譯,執行TestNG或junit,集成郵件發送等。
TestNG或Junit、pytest,調用webdriver或者發送請求的方法,執行自動化測試用例,規範自動化測試腳本。
selenium腳本或者接口用例腳本。
reportNG或者allure報告優化模板。
main 自動以html郵件通知或者Jenkins發送郵件。
二、內部框架
層架框架-也就是代碼結構優化,根據具體的業務和需求能夠大體分爲如下幾層,有時並不須要下面全部的層次,選取合適本身業務測試的就行。
TestCase層,執行的用例腳本。
Task層,公共業務分裝,是其餘的項目不須要的,只和當前項目相關,好比公共登錄、搜索等業務。
utils層:與業務無關的方法,好比數據驅動-也就進行數據文件的讀寫、瀏覽器操做、元素定位方法等進行封裝。
page層或po層:頁面層,頁面層主要維護某一個頁面的全部元素,對頁面的操做、對元素的操做以及和其餘頁面的交互,業務其實就是一個元素到另外一個元素或者一個頁面到另外一個頁面,這就和task層有點重複通常有一個就能夠了。
element層:公共元素或者組件的維護,或者自定義組件封裝
data層:數據存儲
properties層:配置文件、全局變量
在自動化測試的學習之路中,我也曾無數次彷徨和迷茫過:
一、想學自動化測試,而不知道該怎麼學?
二、想轉型自動化測試,以及技術提高,殊不知道該怎麼作?
三、自學自動化測試過程當中遇到問題,卻無處可聞,始終停滯不前?
四、請教同事礙於面子或同事有所保留,致使學習被動?
五、想系統地瞭解和學習自動化測試,卻無從下手?
六、想系統瞭解web自動化測試在企業中如何落地使用,卻不清楚自動化測試流程?
我深深體會過沒人帶,沒人問的感受,我把本身學習過、實際工做中使用的技術、自學方法、心得、踩過的一些坑以及面試題分享在了175317069羣文件夾中。同時羣裏也有不少技術同行及行業大佬,平時偶爾會交流一些技術問題,也有不按期的軟件測試資料連接發放。