基于TestNG的自動(dòng)化測(cè)試框架ATS

一、需求

????????由于目前很多公司缺少相應(yīng)的集成測(cè)試框架,對(duì)于場(chǎng)景的測(cè)試全部是黑盒測(cè)試,黑盒測(cè)試目前在公司測(cè)試有一個(gè)很大的缺點(diǎn):每一次迭代都需要測(cè)試人員測(cè)試所有的功能,如果有一個(gè)場(chǎng)景沒(méi)有測(cè)試到就有可能導(dǎo)致嚴(yán)重的bug,這樣就帶來(lái)了測(cè)試人員在每次迭代發(fā)布的時(shí)候重復(fù)勞動(dòng);為了解決這種重復(fù)勞動(dòng)和迭代開(kāi)發(fā)效率的問(wèn)題,亟待需要一個(gè)測(cè)試框架,其能夠很方便的編寫(xiě)測(cè)試用例,僅僅需要一些測(cè)試場(chǎng)景的編寫(xiě)(通過(guò)yaml文件),測(cè)試框架就能讀取對(duì)應(yīng)的測(cè)試用例文件進(jìn)行測(cè)試,這樣在每次迭代的時(shí)候只要能夠保證原先的測(cè)試用例能夠跑通,基本上就能夠確定這次的迭代開(kāi)發(fā)沒(méi)有影響到原來(lái)的功能,只需要增加新場(chǎng)景的測(cè)試用例就可以,極大的提高測(cè)試的效率和迭代的快速上線。

二、設(shè)計(jì)

1. 涉及到技術(shù)

(1)yaml文件及其解析 測(cè)試框架使用yaml文件作為用例編寫(xiě)文件,測(cè)試框架通過(guò)解析yaml文件獲得對(duì)應(yīng)的測(cè)試用例場(chǎng)景數(shù)據(jù),將解析到的數(shù)據(jù)傳入對(duì)應(yīng)的測(cè)試接口中進(jìn)行測(cè)試,Yaml文件格式說(shuō)明參考https://en.wikipedia.org/wiki/YAML,其中特別注意的是三個(gè)中劃線---表示的不同結(jié)構(gòu),在框架中我們使用這個(gè)來(lái)確定對(duì)應(yīng)的測(cè)試方法的測(cè)試個(gè)數(shù)。

Yaml解析使用的是SnakeYaml,對(duì)應(yīng)的文檔可以參考http://www.cnblogs.com/felixzh/p/6003396.html,此yaml解析器是目前比較流行的一種解析器,而且還有團(tuán)隊(duì)在維護(hù)。

(2)TestNG TestNG是一個(gè)測(cè)試框架,其靈感來(lái)自JUnit和NUnit,但引入了一些新的功能,使其功能更強(qiáng)大,使用更方便,具體使用介紹參考http://www.yiibai.com/testng/。特別注意的是TestNG中的數(shù)據(jù)驅(qū)動(dòng)開(kāi)發(fā)@DataProvider。

2. 整體設(shè)計(jì)思想

????定義一個(gè)注解(這個(gè)注解主要是用來(lái)說(shuō)明測(cè)試用例的地址,單獨(dú)進(jìn)行測(cè)試的文件名稱以及相關(guān)用例描述),測(cè)試框架通過(guò)獲得注解中的內(nèi)容(用例地址和文件名稱),遍歷對(duì)應(yīng)用例地址,得到所有的用例文件,通過(guò)制定的測(cè)試文件名字和用例地址下的所有用例名字進(jìn)行正則表達(dá)式匹配,只有匹配的才進(jìn)行執(zhí)行,可以實(shí)現(xiàn)用例的批量執(zhí)行。在用例執(zhí)行之前可能需要準(zhǔn)備一些數(shù)據(jù),特別是數(shù)據(jù)庫(kù)中,可以提供一個(gè)工具來(lái)講測(cè)試用例文件中定義的準(zhǔn)備數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中;用例執(zhí)行完之后可能需要校驗(yàn)數(shù)據(jù)庫(kù)中的值是否是自己期望的可以提供一個(gè)工具將用例文件中的期望的數(shù)據(jù)庫(kù)結(jié)果和真正根據(jù)條件查詢到的結(jié)果進(jìn)行字段對(duì)比,實(shí)現(xiàn)快速的場(chǎng)景測(cè)試,提高迭代周期。

三、使用說(shuō)明

1.引入說(shuō)明

此自動(dòng)測(cè)試框架已經(jīng)打包上傳到私倉(cāng)中,可以指定對(duì)應(yīng)的mvn坐標(biāo)來(lái)引入


mvn依賴

2. 選擇繼承類

此測(cè)試框架提供了兩個(gè)供測(cè)試用例繼承的類AbstractAutoTestFramework和AbstractTestSpringContextFramework 這兩個(gè)類區(qū)別是:類AbstractAutoTestFramework使用的場(chǎng)景是不需要加載Spring對(duì)應(yīng)ApplicatContext上下文,而AbstractTestSpringContextFramework使用的場(chǎng)景是需要加載對(duì)應(yīng)的Spring ApplicatContext;實(shí)現(xiàn)區(qū)別是AbstractAutoTestFramework沒(méi)有繼承任何類,而AbstractTestSpringContextFramework繼承了AbstractTestNGSpringContextTests 類。

不同繼承類對(duì)比

3. 類上增加注解

在自己定義的類上面增加@XTest注解,此注解就是為了指定對(duì)應(yīng)的測(cè)試用例的路徑和需要指定測(cè)試文件的名稱(不需要擴(kuò)展名),已經(jīng)相應(yīng)的描述信息,具體用法如下圖所示:

4. 在測(cè)試方法中增加dataProvider

在定義的測(cè)試方法上增加@Test注解,在這個(gè)注解里面指定對(duì)應(yīng)的dataProvider對(duì)應(yīng)的值(數(shù)據(jù)驅(qū)動(dòng)名稱,目前這個(gè)值是固定的TestDataProvider),具體用法如下圖所示:

測(cè)試類加注解和對(duì)應(yīng)的繼承

5. 編寫(xiě)測(cè)試用例代碼

在編寫(xiě)測(cè)試用例代碼的時(shí)候,有一點(diǎn)需要注意的是測(cè)試方法的入?yún)€(gè)數(shù)和類型,這個(gè)是和對(duì)應(yīng)的測(cè)試用例yaml文件對(duì)應(yīng)的,其中測(cè)試用例yaml文件中的有一個(gè)“---”就對(duì)應(yīng)的測(cè)試方法中的一個(gè)參數(shù),具體的參數(shù)類型要根據(jù)yaml文件中的內(nèi)容的定義來(lái)定,比如下面情況:

測(cè)試方法加注解

這個(gè)測(cè)試方法有6個(gè)參數(shù),這6個(gè)參數(shù)分別對(duì)應(yīng)的是測(cè)試用例文件中的6個(gè)“---”,下面是其對(duì)應(yīng)的用例文件:并且測(cè)試方法中對(duì)應(yīng)的參數(shù)也是根據(jù)測(cè)試用例yaml文件來(lái)定義的。

并且測(cè)試方法中對(duì)應(yīng)的參數(shù)也是根據(jù)測(cè)試用例yaml文件來(lái)定義的。

6.特殊用法說(shuō)明

(1)表字段對(duì)應(yīng)值含有特殊值替換說(shuō)明?

?目前只實(shí)現(xiàn)了一種表字段特殊值替換場(chǎng)景,這個(gè)特殊值就是”@now()#日期格式”,當(dāng)框架在解析對(duì)應(yīng)的表字段對(duì)應(yīng)的值時(shí)候,如果發(fā)現(xiàn)其含有對(duì)應(yīng)的特殊值@now()則會(huì)使用當(dāng)前時(shí)間應(yīng)用對(duì)應(yīng)指定的日期格式進(jìn)行轉(zhuǎn)換獲得對(duì)應(yīng)的字段值;后續(xù)如果有其他特殊需要可以在框架中增加對(duì)應(yīng)的解析。

(2)表字段標(biāo)記說(shuō)明

?在進(jìn)行數(shù)據(jù)庫(kù)中數(shù)據(jù)校驗(yàn)的時(shí)候,很可能我們只知道對(duì)應(yīng)的表記錄對(duì)應(yīng)的部分信息,我們需要根據(jù)這些信息查詢數(shù)據(jù)獲得對(duì)應(yīng)的完整信息,然后使用查詢出來(lái)的結(jié)果信息與測(cè)試用例文件中的期望結(jié)果進(jìn)行校驗(yàn)對(duì)比,以驗(yàn)證功能是否真的正確;其中表記錄中的部分?jǐn)?shù)據(jù)稱為查詢條件,在測(cè)試用例文件中使用“[C]”進(jìn)行標(biāo)記,對(duì)于有“[C]”標(biāo)記的字段框架會(huì)其作為查詢條件進(jìn)行數(shù)據(jù)庫(kù)查詢,其其他使用如下:表示使用id作為查詢條件。

在進(jìn)行數(shù)據(jù)字段check的時(shí)候,我們會(huì)發(fā)現(xiàn)有些字段是代碼中的自動(dòng)生成(每次都不一樣),這樣的字段根本無(wú)法校驗(yàn),對(duì)于這種情況我們可以使用標(biāo)記“[N]”來(lái)表示這個(gè)字段對(duì)應(yīng)的值不進(jìn)行校驗(yàn),其具體使用如下:說(shuō)明對(duì)應(yīng)的日期字段不需要進(jìn)行校驗(yàn)。

7. 版本1.0.1新增功能介紹

(1)注解@XTest已經(jīng)支持在方法進(jìn)行標(biāo)記已經(jīng)支持對(duì)每一個(gè)測(cè)試方法單獨(dú)制定對(duì)應(yīng)的測(cè)試用例文件。

方法級(jí)別測(cè)試用例指定

(2)注解@AtsFrameworkBaseContextCfg支持注解@ComponentScan過(guò)濾功能。

(3)DBUtils方法prepare和dbCheck增加在準(zhǔn)備數(shù)據(jù)前刪除準(zhǔn)備數(shù)據(jù)和在數(shù)據(jù)庫(kù)對(duì)比之后刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)的功能,這樣可以在開(kāi)發(fā)測(cè)試代碼時(shí)候不用再寫(xiě)刪除準(zhǔn)備數(shù)據(jù)和校驗(yàn)數(shù)據(jù)的邏輯,刪除邏輯是根據(jù)字段標(biāo)記[C]來(lái)進(jìn)行刪除的。

(4)多數(shù)據(jù)庫(kù)的支持:只需要在配置文件中增加如下配置就可以單獨(dú)制定對(duì)應(yīng)表的數(shù)據(jù)庫(kù):

多數(shù)據(jù)庫(kù)的支持配置

8. 版本1.0.2新增功能介紹

(1)增強(qiáng)類ObjectCompareUtils的功能,使其支持根據(jù)”.”來(lái)進(jìn)行屬性排除和包含來(lái)進(jìn)行對(duì)比,如下面的形式:

增強(qiáng)類ObjectCompareUtils的功能


car類定義

通過(guò)“.”可以實(shí)現(xiàn)排序car對(duì)象中屬性carSeat中的name屬性和color屬性,也就是說(shuō)這兩個(gè)屬性在進(jìn)行CarSeat進(jìn)行對(duì)比的時(shí)候排除這兩個(gè)對(duì)象。

四、 源碼地址

https://github.com/lwjaiyjk/ats

轉(zhuǎn)載請(qǐng)說(shuō)明出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 頂著烈日,冒著酷暑,我來(lái)到了你的面前。 北山街高大的法國(guó)梧桐,給游人帶來(lái)極大的陰涼,那根根手牽著手的枝椏,就像一片...
    木木晨光閱讀 323評(píng)論 2 2

友情鏈接更多精彩內(nèi)容