目錄
(一)TestNG學(xué)習(xí)之路—HelloWorld入門
(二)TestNG學(xué)習(xí)之路—注解及屬性概覽
(三)TestNG學(xué)習(xí)之路—TestNG.xml/YAML
(四)TestNG學(xué)習(xí)之路—注解詳述之@Test
(五)TestNG學(xué)習(xí)之路—注解詳述之參數(shù)化
(六)TestNG學(xué)習(xí)之路—注解詳述之@Factory
(七)TestNG學(xué)習(xí)之路—注解詳述之忽略測(cè)試
(八)TestNG學(xué)習(xí)之路—注解詳述之并發(fā)
(九)TestNG學(xué)習(xí)之路—失敗測(cè)試重跑
(十)TestNG學(xué)習(xí)之路—編碼執(zhí)行TestNG
(十一)TestNG學(xué)習(xí)之路—BeanShell高級(jí)用法
(十二)TestNG學(xué)習(xí)之路—注解轉(zhuǎn)換器
(十三)TestNG學(xué)習(xí)之路—方法攔截器
(十四)TestNG學(xué)習(xí)之路—TestNG監(jiān)聽器
(十五)TestNG學(xué)習(xí)之路—依賴注入
(十六)TestNG學(xué)習(xí)之路—測(cè)試報(bào)告
(十七)基于TestNG+Rest Assured+Allure的接口自動(dòng)化測(cè)試框架
前言
文章《TestNG學(xué)習(xí)之路—HelloWorld入門》提到了ant、xml、命令行三種方式來執(zhí)行測(cè)試,該篇文章將詳細(xì)講述xml執(zhí)行方式。
testng.xml詳解
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<!--suite有以下屬性:
name:suite名稱,測(cè)試報(bào)告中展現(xiàn)
verbose: 在控制臺(tái)中如何輸出,該設(shè)置不影響測(cè)試報(bào)告
allow-return-values:如果設(shè)置為false,被@Test注解且有return的方法被忽略執(zhí)行
annotations:如果為"javadoc", 則使用javadoc注解,否則使用jdk注解
configfailurepolicy:字典:continue,skip,如果@Before*方法失敗,TestNG是否應(yīng)該繼續(xù)執(zhí)行套件中的其余測(cè)試,默認(rèn)為skip
data-provider-thread-count:并發(fā)執(zhí)行data-provider的線程數(shù),默認(rèn)大小為10
group-by-instances:默認(rèn)情況下,依賴方法按類分組。例如,如果方法b()依賴于方法a(),并且您有幾個(gè)包含這些方法的類實(shí)例(因?yàn)閿?shù)據(jù)提供者的工廠),
那么調(diào)用順序?qū)椋簊ignIn("us"),signIn("uk"),signOut("us"),,signOut("uk")。group-by-instances設(shè)置為true的話,調(diào)用順序?qū)椋簊ignIn("us"),signOut("us"),signIn("uk"),signOut("uk")
guice-stage:創(chuàng)建父注入器的stage
junit:是否以junit模式運(yùn)行
object-factory:用于實(shí)現(xiàn)IObjectFactory的類,實(shí)例化測(cè)試對(duì)象
parallel:是否多線程并發(fā)運(yùn)行測(cè)試,默認(rèn)為false,字典:classes,methods,instances,tests,true,false
parent-module:用于創(chuàng)建所有g(shù)uice注入器的父注入器的模塊
preserve-order:默認(rèn)情況下,TestNG將按照在XML文件配置的順序運(yùn)行測(cè)試。如果希望以不可預(yù)知的順序運(yùn)行文件中列出的類和方法,可將preserve-order屬性設(shè)置為false
skipfailedinvocationcounts:是否跳過失敗的調(diào)用
thread-count:使用并行模式,要使用的線程池的大小。
time-out:為具體執(zhí)行單元設(shè)定一個(gè)超時(shí)時(shí)間,方法(parallel="methods")或測(cè)試(parallel="tests")
-->
<suite name="Suite" verbose="1">
<!--一個(gè)suite可以包含多個(gè)test,test有以下屬性:
name:這個(gè)測(cè)試的名稱(將出現(xiàn)在報(bào)告中)
annotations:同suite套件屬性
allow-return-values:同suite套件屬性
verbose:同suite套件屬性
enabled:啟用/禁用當(dāng)前測(cè)試的標(biāo)志。默認(rèn)值:true
group-by-instances:同suite套件屬性
junit:同suite套件屬性
parallel:同suite套件屬性
preserve-order:同suite套件屬性
skipfailedinvocationcounts:同suite套件屬性
thread-count:同suite套件屬性
time-out:同suite套件屬性
-->
<test name="test">
<!--指定執(zhí)行包-->
<packages>
<!--包名稱-->
<package name="com">
</package>
</packages>
</test>
<!--testng.xml中只能設(shè)置一個(gè)<suite>標(biāo)簽,可通過<suite-files >標(biāo)簽實(shí)現(xiàn)多個(gè)測(cè)試集設(shè)置。-->
<suite-files>
<suite-file path="testNG.xml"/>
<suite-file path="testNG.xml"/>
</suite-files>
<!--設(shè)置監(jiān)聽器,后續(xù)文章詳解-->
<listeners>
<listener class-name="TestNGHelloWorld1"/>
</listeners>
<!--方法攔截器,后續(xù)文章詳解-->
<method-selectors>
<method-selector>
<selector-class name="TestNGHelloWorld1"/>
</method-selector>
</method-selectors>
<!--方法攔截器,后續(xù)文章詳解-->
<method-selectors>
<method-selector>
<script language="java"/>
</method-selector>
</method-selectors>
<test name="TestNG1">
<groups>
<!--組中組,即test4包含了test1和test3兩個(gè)組-->
<define name="test4">
<include name="test1"/>
<include name="test3"/>
</define>
<!--運(yùn)行test4組,不運(yùn)行test2組-->
<run>
<include name="test4"/>
<exclude name="test2"/>
</run>
<!--test3組依賴于test1,test2組,多個(gè)依賴用空格隔開-->
<dependencies>
<group name="test3" depends-on="test1 test2"/>
</dependencies>
</groups>
<!--類-->
<classes>
<class name="TestNGHelloWorld1"/>
</classes>
</test> <!-- TestNG -->
<test name="TestNG2">
<!--入?yún)ⅲ謩e為參數(shù)名和參數(shù)值-->
<parameter name="str" value="Test1"/>
<classes>
<class name="TestNGHelloWorld1">
<!--類中的方法-->
<methods>
<!--執(zhí)行該方法-->
<include name="helloWorldTest1"/>
<!--不執(zhí)行該方法-->
<exclude name="helloWorldTest2"/>
</methods>
</class>
</classes>
</test>
</suite>
YAML
testNG支持YAML作為指定套件文件的另一種方法。例如,以下XML文件:
<suite name="SingleSuite" verbose="2" thread-count="4">
<parameter name="n" value="42" />
<test name="Regression2">
<groups>
<run>
<exclude name="broken" />
</run>
</groups>
<classes>
<class name="test.listeners.ResultEndMillisTest" />
</classes>
</test>
</suite>
對(duì)應(yīng)的YAML版本如下:
name: SingleSuite
threadCount: 4
parameters: { n: 42 }
tests:
- name: Regression2
parameters: { count: 10 }
excludedGroups: [ broken ]
classes:
- test.listeners.ResultEndMillisTest