基於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

轉載請說明出處


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