1. 程式人生 > >基於TestNG的自動化測試框架ATS

基於TestNG的自動化測試框架ATS

一、需求

        由於目前很多公司缺少相應的整合測試框架,對於場景的測試全部是黑盒測試,黑盒測試目前在公司測試有一個很大的缺點:每一次迭代都需要測試人員測試所有的功能,如果有一個場景沒有測試到就有可能導致嚴重的bug,這樣就帶來了測試人員在每次迭代釋出的時候重複勞動;為了解決這種重複勞動和迭代開發效率的問題,亟待需要一個測試框架,其能夠很方便的編寫測試用例,僅僅需要一些測試場景的編寫(通過yaml檔案),測試框架就能讀取對應的測試用例檔案進行測試,這樣在每次迭代的時候只要能夠保證原先的測試用例能夠跑通,基本上就能夠確定這次的迭代開發沒有影響到原來的功能,只需要增加新場景的測試用例就可以,極大的提高測試的效率和迭代的快速上線。

二、設計

1. 涉及到技術

(1)yaml檔案及其解析 測試框架使用yaml檔案作為用例編寫檔案,測試框架通過解析yaml檔案獲得對應的測試用例場景資料,將解析到的資料傳入對應的測試介面中進行測試,Yaml檔案格式說明參考https://en.wikipedia.org/wiki/YAML,其中特別注意的是三個中劃線---表示的不同結構,在框架中我們使用這個來確定對應的測試方法的測試個數。


Yaml解析使用的是SnakeYaml,對應的文件可以參考http://www.cnblogs.com/felixzh/p/6003396.html,此yaml解析器是目前比較流行的一種解析器,而且還有團隊在維護。

(2)TestNG TestNG是一個測試框架,其靈感來自JUnit和NUnit,但引入了一些新的功能,使其功能更強大,使用更方便,具體使用介紹參考http://www.yiibai.com/testng/。特別注意的是TestNG中的資料驅動開發@DataProvider。

2. 整體設計思想

    定義一個註解(這個註解主要是用來說明測試用例的地址,單獨進行測試的檔名稱以及相關用例描述),測試框架通過獲得註解中的內容(用例地址和檔名稱),遍歷對應用例地址,得到所有的用例檔案,通過制定的測試檔名字和用例地址下的所有用例名字進行正則表示式匹配,只有匹配的才進行執行,可以實現用例的批量執行。在用例執行之前可能需要準備一些資料,特別是資料庫中,可以提供一個工具來講測試用例檔案中定義的準備資料插入到資料庫中;用例執行完之後可能需要校驗資料庫中的值是否是自己期望的可以提供一個工具將用例檔案中的期望的資料庫結果和真正根據條件查詢到的結果進行欄位對比,實現快速的場景測試,提高迭代週期。

三、使用說明

1.引入說明

此自動測試框架已經打包上傳到私倉中,可以指定對應的mvn座標來引入


mvn依賴

2. 選擇繼承類

此測試框架提供了兩個供測試用例繼承的類AbstractAutoTestFramework和AbstractTestSpringContextFramework 這兩個類區別是:類AbstractAutoTestFramework使用的場景是不需要載入Spring對應ApplicatContext上下文,而AbstractTestSpringContextFramework使用的場景是需要載入對應的Spring ApplicatContext;實現區別是AbstractAutoTestFramework沒有繼承任何類,而AbstractTestSpringContextFramework繼承了AbstractTestNGSpringContextTests 類。


不同繼承類對比

3. 類上增加註解

在自己定義的類上面增加@XTest註解,此註解就是為了指定對應的測試用例的路徑和需要指定測試檔案的名稱(不需要副檔名),已經相應的描述資訊,具體用法如下圖所示:


4. 在測試方法中增加dataProvider

在定義的測試方法上增加@Test註解,在這個註解裡面指定對應的dataProvider對應的值(資料驅動名稱,目前這個值是固定的TestDataProvider),具體用法如下圖所示:


測試類加註解和對應的繼承

5. 編寫測試用例程式碼

在編寫測試用例程式碼的時候,有一點需要注意的是測試方法的入參個數和型別,這個是和對應的測試用例yaml檔案對應的,其中測試用例yaml檔案中的有一個“---”就對應的測試方法中的一個引數,具體的引數型別要根據yaml檔案中的內容的定義來定,比如下面情況:


測試方法加註解

這個測試方法有6個引數,這6個引數分別對應的是測試用例檔案中的6個“---”,下面是其對應的用例檔案:並且測試方法中對應的引數也是根據測試用例yaml檔案來定義的。


並且測試方法中對應的引數也是根據測試用例yaml檔案來定義的。

6.特殊用法說明

(1)表字段對應值含有特殊值替換說明 

 目前只實現了一種表字段特殊值替換場景,這個特殊值就是”@now()#日期格式”,當框架在解析對應的表字段對應的值時候,如果發現其含有對應的特殊值@now()則會使用當前時間應用對應指定的日期格式進行轉換獲得對應的欄位值;後續如果有其他特殊需要可以在框架中增加對應的解析。


(2)表字段標記說明

 在進行資料庫中資料校驗的時候,很可能我們只知道對應的表記錄對應的部分資訊,我們需要根據這些資訊查詢資料獲得對應的完整資訊,然後使用查詢出來的結果資訊與測試用例檔案中的期望結果進行校驗對比,以驗證功能是否真的正確;其中表記錄中的部分資料稱為查詢條件,在測試用例檔案中使用“[C]”進行標記,對於有“[C]”標記的欄位框架會其作為查詢條件進行資料庫查詢,其其他使用如下:表示使用id作為查詢條件。


在進行資料欄位check的時候,我們會發現有些欄位是程式碼中的自動生成(每次都不一樣),這樣的欄位根本無法校驗,對於這種情況我們可以使用標記“[N]”來表示這個欄位對應的值不進行校驗,其具體使用如下:說明對應的日期欄位不需要進行校驗。


7. 版本1.0.1新增功能介紹

(1)註解@XTest已經支援在方法進行標記已經支援對每一個測試方法單獨制定對應的測試用例檔案。


方法級別測試用例指定

(2)註解@AtsFrameworkBaseContextCfg支援註解@ComponentScan過濾功能。

(3)DBUtils方法prepare和dbCheck增加在準備資料前刪除準備資料和在資料庫對比之後刪除資料庫中的資料的功能,這樣可以在開發測試程式碼時候不用再寫刪除準備資料和校驗資料的邏輯,刪除邏輯是根據欄位標記[C]來進行刪除的。

(4)多資料庫的支援:只需要在配置檔案中增加如下配置就可以單獨制定對應表的資料庫:


多資料庫的支援配置

8. 版本1.0.2新增功能介紹

(1)增強類ObjectCompareUtils的功能,使其支援根據”.”來進行屬性排除和包含來進行對比,如下面的形式:


增強類ObjectCompareUtils的功能
car類定義

通過“.”可以實現排序car物件中屬性carSeat中的name屬性和color屬性,也就是說這兩個屬性在進行CarSeat進行對比的時候排除這兩個物件。

四、 原始碼地址

https://github.com/lwjaiyjk/ats

轉載請說明出處