Java接口自動(dòng)化之TestNG單元測試框架(三)
上一篇Java接口自動(dòng)化系列文章:Java接口自動(dòng)化之TestNG單元測試框架(二),主要介紹testng.xml配置文件控制測試用例的運(yùn)行。
以下主要介紹在TestNg中參數(shù)傳遞的兩種方式。
TestNG提供了2種傳遞參數(shù)的方式:
testng.xml文件獲取參數(shù)。
@DataProvider傳遞一些比較復(fù)雜的參數(shù)。
優(yōu)點(diǎn):使得代碼和測試數(shù)據(jù)分離,方便維護(hù)。
缺點(diǎn):若是需要傳遞復(fù)雜的參數(shù),或者從Java中創(chuàng)建參數(shù)(復(fù)雜對(duì)象,對(duì)象從屬性文件或者數(shù)據(jù)庫中讀取),這種方法就再也不適用。
思路:
定義xml配置文件,在文件中申明參數(shù)。
使用 @Parameters 注解從測試配置 xml 文件獲取參數(shù)。
①在maven項(xiàng)目的 resources 目錄下新建文件parameter.xml ,申明參數(shù)。
<?xml version="1.0" encoding="UTF-8"?>
<suite name="parameterTest">
<test name="testParameter">
<classes>
<class name="ParameterTest"/>
<parameter name="name" value="vivi" />
<parameter name="age" value="18" />
</classes>
</test>
</suite>
②創(chuàng)建測試類:ParameterTest。
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class ParameterTest {
@Test
@Parameters({"name","age"})
public void testDemo(String name,int age){
System.out.println("姓名:"+name+","+"年齡: "+age);
}
}
③右鍵運(yùn)行parameter.xml,效果如下:
姓名:vivi,年齡: 18
===============================================
parameterTest
Total tests run: 1, Failures: 0, Skips: 0
===============================================如果需要傳遞一些復(fù)雜的參數(shù),靠xml文件就不太適合了。很多場景是,測試數(shù)據(jù)需要從java對(duì)象或數(shù)據(jù)庫中獲取,這時(shí)候,我們就需要通過DataProvider方式來提供測試數(shù)據(jù)。
思路如下:
1)首先定義一個(gè)數(shù)據(jù)源的方法,通過@DataProvider注解來標(biāo)識(shí)。
數(shù)據(jù)源,是方法提供數(shù)據(jù),返回一個(gè)二維數(shù)組。
@DataProvider(name = "data") 通過該注解來標(biāo)識(shí)這個(gè)數(shù)據(jù)源,name為數(shù)據(jù)源的名稱。
@return 返回一個(gè)二維數(shù)組。
2)然后定義一個(gè)測試方法,通過@Test(dataProvider="data")屬性來獲取數(shù)據(jù)。
通過dataProvider來獲取數(shù)據(jù),執(zhí)行的次數(shù)會(huì)根據(jù)數(shù)據(jù)源提供數(shù)據(jù)的數(shù)量。
新建測試類:DataProviderTest。
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class DataProviderTest {
@DataProvider(name = "data")
public Object[][] provideData() {
Object[][] data = new Object[][]{
{"vivi", 18},
{"coco", 16},
{"tom", 20}
};
return data;
}
@Test(dataProvider = "data")
public void testDataProvider(String name,int age) {
System.out.println("姓名:" + name + "," + "年齡: " + age);
}
}
注意:被@Test標(biāo)注的方法通過dataProvider屬性指明其數(shù)據(jù)提供者,這個(gè)名字必須與@DataProvider(name="...")中的名字一致。
運(yùn)行之后,結(jié)果為:
姓名:vivi,年齡: 18
姓名:coco,年齡: 16
姓名:tom,年齡: 20
===============================================
Default Suite
Total tests run: 3, Failures: 0, Skips: 0
===============================================
(完)

喜歡記得星標(biāo)置頂,讓我們一起守護(hù)成長
