1. 程式人生 > >WEB UI自動化框架設計

WEB UI自動化框架設計

1、框架簡介

1、1 框架設計理念

        本框架是由selenium+testng+java+maven編寫的資料驅動框架,對於用例的設計邏輯性比較強,分離了頁面元素、頁面元素操作、用例和檢查點,也就是說,每個頁面的元素、操作、檢查點單獨封裝了,之後在用例中用到什麼操作都可以呼叫之前寫的。

        對於測試資料,是單獨儲存在excel檔案中的,同一個功能有正向和逆向測試,只要把測試資料儲存在excel中,多種逆向可能性都可以列出來,包括檢查的資料,程式會一一讀取,並反饋檢查點是否正確,這就避開了每個正向或逆向測試都要寫一遍用例的麻煩。

        對於失敗的用例,我在監聽器中加入了失敗用例重跑功能,可設定重跑次數。因為有的時候用例的失敗可能並不是出現bug,也許是網路原因或其他原因,可以再跑一次驗證結果。

        對於測試結果,我這裡有儲存log日誌,可檢視每個用例都做了哪些操作,用了什麼資料、檢查點等,最後執行是否正確都有記錄,同時還有testng的執行結果,裡面統計了執行成功和失敗的用例。還改寫和report,使執行失敗的用例截圖放在執行結果中,以便檢視問題。更值得一提的是,框架里加入了傳送郵件功能,可以配置郵箱資料,待程式執行完成後吧帶截圖的結果傳送到指定的郵箱。

2、utils封裝

2、1 從txt檔案讀取配置資料

        Txt檔案放置一些配置資料,儲存在config資料夾下,內容格式如:name=lily。

目前放置的是驅動的路徑和

2、2選擇作業系統和瀏覽器

    封裝了選擇作業系統和瀏覽器的方法,瀏覽器在xml檔案中定義,作業系統由程式碼獲取。

2.3日誌獲取和儲存

       日誌方法用到的外掛是log4j,方法主要是配置日誌輸出格式和路徑,呼叫時先初始化

static Logger logger = Logger.getLogger(BaseParpares.class.getName());

2.4從excel檔案讀取測試資料

       傳參為檔名和sheet(用例名),返回的是引數值陣列,具體可檢視testng的@DataProvider。這裡讀取資料的時候,如果有多行會一併讀取,每行都是一條測試用例。

2.5 獲取隨機數

2.6 連線資料庫

2.7 獲取用例描述

3、selenium常用操作封裝

       Seleniumutils,按不同功能分了好幾個類,封裝同類功能各種操作方法,其中Browser是對瀏覽器操作的封裝,包含了driver的定義,由於所有的操作都需要driver,其他的類都需要繼承Browser,不會出現no session的情況。

4、BaseParpares

       基本資料和設定,所有的用例都從這裡開始,繼承這個類的資料,寫了beforeclass和afterclass的操作,每個用例的class執行前後都會執行這兩個方法。還有@BeforeMethod和@AfterMethod,每個用例@Test執行前後都會執行這兩個方法。以及每個用例用到的資料提供者配置,獲取到用例的包和用例編碼,對應excel檔案的檔名和sheet名。以及獲取用例名稱、路徑、classpath等的方法。

5、用例設定

       用例的設定包括三大塊,pages、pagehandlers、testcases。

Pages:是每個頁面的元素,呼叫org.openqa.selenium.By ,定義元素定位,如:

public static final By L_LOGIN = By.id("login_frame");

之後在pagehandlers中被呼叫。

Pagehandlers:是每個頁面的功能和檢查點封裝。注意檢查點不需要異常處理,且呼叫檢查方法時用Assert.assertTrue();因為其他地基本方都做了異常處理,如果這個也用異常處理的話整個用例就不會停止也不會失敗,報錯後會一直執行,增加了不必要的等待時間。

Testcases:就是測試用例,呼叫pagehandlers的功能組合成用例。每個類都需要繼承BaseParpares 。@Test的時候加入測試資料的讀取@Test(dataProvider="testData") ,這樣才能讀取到對應的測試資料。這裡讀取資料的時候,如果有多行會一併讀取,每行都是一條測試用例。所以要把用例寫封裝好,把測試資料作為方法的引數一併讀取,再用@Test(dataProvider="testData") 獲取excel資料同時傳給一個用例。

6、監聽器

TestResultListener:用例失敗之後截圖,通過重寫testng的監聽方法,需要匯入org.testng.TestListenerAdapter;繼承TestListenerAdapter。重寫onTestFailure,加入截圖的功能。同時加入了onTestStart、onTestSuccess等,onTestStart與base中的BeforeMethod有點重複,視情況重寫。

這個監聽器可放在BaseParpares,因為每個用例的類都繼承了BaseParpares,放置方法@Listeners({TestResultListener.class})

       RetryListener:是重跑失敗的測試用例。通過implements IAnnotationTransformer寫了新介面,implements 是實現多個介面,介面的方法一般為空的, 必須重寫才能使用,還需要載入配置檔案config.properties。

       EmailableReporterListener:是執行完成後獲取結果併發送到指定郵箱的監聽器,重寫了testng的EmailableReporter2,單獨謝了傳送郵件功能在這裡呼叫,在testng套件裡無論哪一級呼叫都得不到最終結果,所以最終選擇在reporter呼叫,原始碼檢視org.testng.reporters. EmailableReporter2。

監聽器都配置在testng.xml檔案中,才可以載入。

    <listeners>

        <listener class-name="com.test.listener.RetryListener" />

        <listener class-name="com.test.listener.TestResultListener" />      

        <listener class-name="com.test.listener.EmailableReporterListener"/>

    </listeners>

以上就是對於框架的介紹,程式碼我就不貼出來了,有興趣可以