基於PO和單例設計模式用python+selenium進行ui自動化框架設計

一)框架目錄的結構

180858n4axbgv48boagrys.png

二)config包當中的config.ini文件主要是用來存項目的絕對路徑,是爲了後續跑用例和生成測試報告做準備
然後目前的配置文件大都會用yaml,ini,excel,還有.py也就是python文件來進行管理這裏用的是ini文件。

180908uw6bfbiz67bbb227.png

三)config包當中的globalconfig文件主要是用來生成項目的路徑,測試用例,測試報告的路徑
其中調用了ReadConfigIni這個類來讀取ini格式的文件。

180916imfupf3iz07i55c7.png

四)Data.xlsx主要是用來存放項目的url,賬號和密碼的
通過excel來存放,可以增加數據的穩定性,後面會通過封裝讀取excel文檔的工具類,來對excel文檔中的數據進行讀取

180927w1aiy01gi2kxi1in.png

五)public包中pages包中的BaseTestCase模塊主要是用來放基類的
當中並且通過set_driver傳入一個driver對象來進行設置driver對象,這其實就是單例設計模式的體現然後通過get_driver來拿driver,
所以只要繼承BaseTestCase這個基類,就可以拿到這個類當中的一切類方法。然後定位頁面元素
用find_element這個類方法來進行封裝,可以使得傳入的參數是一個
元組,然後這裏其實用到了Java當中的page object設計模式,也就是所謂的PO設計模式,使得頁面
中的每一個控件都變成了對象的屬性。

181538un9jee9jtibzr00h.png

182531s7l5z06a6fp55xb9.png

182536e1tp9pkevmsikw3c.png

182547s778bfu18ygbvzvx.png

六)public包中pages包中的login模塊主要封裝了項目的登錄,首先創建一個driver
對象,然後通過調用set_driver方法把driver傳給基類,這個地方是最爲關鍵的
地方,所以基類中的driver,其實就是這個地方傳進去的,然後把driver對象賦值
變成了BaseTestCase這個基類的類變量也就是類的屬性,所以後續基類當中的類方法
其實都是使用的這個login模塊中創建的這個driver對象,這樣的目的就是可以保證我們
的項目從頭到尾都是使用的同一個driver對象,同一個driver指的就是打開的爲同一個
chrome瀏覽器。

182552lq0tuzrrke50i5ur.png

182557nn89uggnupk8id0w.png

七)這裏封裝了一個讀取excel的工具類
因爲後續我們的項目的賬號和密碼都存在excel文檔中去了,所以需要封裝一個
讀取excel的工具類,來讀取賬號和密碼,其中用到了xlrd模塊來讀取。

182718l2qhh3rw7qujq7f8.png

八)Login_data模塊中主要是讀取excel然後返回url,賬號,密碼
get_password方法因爲生成的數據是浮點數,所以用了int函數進行轉換。

182724yu96m7o2eg12mo9g.png

九)封裝了一個發送郵件的工具類,值得注意的是這裏用的是163的smtp服務器
這個代碼是不適用QQ服務器的,而且pwd是163郵箱的授權碼,不是密碼
這個地方需要注意。

182729haob3nniol3abuat.png

182735wu3zeflkzhheapyp.png

十)PageElement這個模塊很爲關鍵,這個PageElement類當中封裝了所有頁面的網頁元素
這裏其實就是用到了讓一個項目中的所有元素定位和用例流程和最終的用例進行分層處理
這個設計有點像RF框架當中的三層封裝設計模式:元素層,流程層和案例層,但是這樣處理
有一個問題就是代碼量會很多。但是優勢也是非常明顯的
優勢如下:
1.讓元素定位,流程,案例進行了分離
2.前端代碼關於元素定位有改動可以隨時進行處理,修改非常方便
3.讓代碼間的耦合性降低
4.降低代碼的維護成本
5.代碼的複用性高
6.採用標準的page object頁面對象設計模式,符合現在主流ui自動化框架的標準搭配

182739sahlm8avajqmzlp8.png

十一)這裏封裝了一個工具類,主要是用來讀取ini文件的
需要先在dos窗口用pip install configparser來安裝configparser模塊

182744rapjofa1811zafzz.png

十二)run模塊中主要是用來加載和運行所有的用例,並且生成測試報告和發送測試報告。

182748q2nn1ffn4f1mf721.png

182752el8p87fuzflp4ii7.png

十三)編寫測試用例,後續有當前模塊的測試用例就可以更新在當前這個模塊中
然後進行斷言。

182756avdokqwewllidvq2.png

原文鏈接:https://www.cnblogs.com/xiaoshubass/p/12373820.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章