二、先搭一個架子
在我還是小白連py語法都不太熟悉的時候,經常在網上看關于自學ui自動化測試的博客,最熟悉的套路莫過于先給你介紹一下selenium的各個api,然后寫一套代碼去登陸微博或者百度什么的,但我今天不愿意這么寫,因為這樣的話,實際上并沒有什么卵用,他不能用到實際的項目里,今天我們來先搭一個架子。
搭架子先畫圖
我們首先來確定一下我們的項目架構圖,也即是我們打算怎么具體設計我們的項目,下面來聊一聊我設計時的思路。
其他的先不談,測試用例肯定是集中放到一個地方的,于是我創建了一個testcase的位置專門用來放用例,此時我們的架構圖是這樣的:
—————testcase
接下來我又想到,我們的用例可能需要按照要求集合執行,所以我又創建了一個testsuite的位置專門放集合的用例,于是架構圖多了一個:
—————testcase
—————testsuite
然后又想到,因為我們的測試用例需要支持單獨執行,所以必然需要重復的測試前和測試后的動作,先不談更多的動作,但是打開和關閉瀏覽器肯定是必須的,所以要想不在每個case里重復的寫這些動作,我們就需要一個測試用例的主類用以被case繼承,我把這個主類單獨的放置到了一個位置maincase,于是架構圖:
—————testcase
—————testsuite
—————maincase
我們再來想一下case里更具體的問題吧,比如說,我們可能需要一個(除開瀏覽器操作外的)工具集用以對case提供支持,包括發送Email,打開windows窗口選擇文件還有其他可能遇到的奇奇怪怪的事情,我們給這個部分留了一個util的位置,再來看看架構圖:
—————testcase
—————testsuite
—————maincase
—————util
再想想,如果我們發送email,那當然是要先生成測試報告,測試里遇到問題的話,最好可以有截圖用來看看當時為什么出錯了,那么我們各留一個位置給報告和截圖:
—————testcase
—————testsuite
—————maincase
—————util
—————testreport
—————sreenshot
接下來,處理一下我們的元素存放位置,元素的管理是UI自動化里的重要點,如果不做到case和元素分離的話,維護用例將會變得非常困難,每次迭代只要元素變動了,你就得一個一個case的改,這里我們把元素集中到一個config里,稍后在具體編寫階段告訴大家如何存儲,這里先分一個config的位置給元素:
—————testcase
—————testsuite
—————maincase
—————util
—————testreport
—————sreenshot
—————config
最后,如果我們希望我們的用例足夠簡潔的話,我們就應該把那些常用的操作封裝起來,這里的封裝分為兩個層面封裝,第一是對常用基礎操作的封裝,第二是對常用業務操作的封裝。
解釋一下的話,就是我們首先把基礎的操作封裝到一起,例如,尋找元素,如果我們想統一使用隱式等待(不明白的話后續篇章會介紹到)去查找元素的話,就需要把selenium里的find方法封裝一下,這種是對原先的基礎操作的封裝;
而比如說,我們寫case的時候發現,很多個case都會有一個同樣的跳轉路徑,都是通過點擊xx,再點擊xx到達這個頁面,我們就把這個操作路徑封裝了給我們的case使用,避免case里重復的寫這些路徑,這層封裝是對復用性高的業務邏輯操作的封裝。
我們給這兩層封裝留個位置operate:
—————testcase
—————testsuite
—————maincase
—————util
—————testreport
—————sreenshot
—————config
—————operate
這樣目前來看,我們的架構圖大體就畫完了,剩下的如果有遺漏再開發過程里修復吧,我們看看最終的項目架構(目前還是空的):
