使用DataProvider提供數據有兩種形式:
第一種:一種是在測試代碼和測試數據放在同一個類中;
第二種:把所有的數據提供都單獨寫在一個類里面,當測試數據比較多時,這種方法利於維護。
DataProvider定義了屬性name時,提取數據時可以使用name,沒有定義name時,提取數據時直接使用方法名稱。
public class ParamTestWithDataProvider1 {
@DataProvider(name = "test1")
public static Object[][] primeNumbers() {
return new Object[][] { { 2, true ,"hi"}, { 6, false ,"test"}, { 19, true ,"good"},
{ 22, false ,"aha"}, { 23, true ,"loo"} };
}
//參數必須要一致
@Test(dataProvider = "test1")
public void testPrimeNumberChecker(Integer inputNumber,
Boolean expectedResult, String test) {
System.out.println(inputNumber + " " + expectedResult+" "+test);
Assert.assertEquals(expectedResult,
primeNumberChecker.validate(inputNumber));
}
}
第二種是通過DataProviderClass 把測試數據文件引過來
package TestngTest;
import org.testng.annotations.DataProvider;
public class DataProviderMethod {
//無指定數據名稱,默認使用方法名
@DataProvider
public static Object[][] NoNameMethod(){
return new Object[][]{
{"DataWithNoName1"},
{"DataWithNoName2"},
{"DataWithNoName3"}
};
}
//指定名稱1
@DataProvider(name="dataprovider1")
public static Object[][] dataProvider1(){
return new Object[][]{
{"dataprovider1-1"},
{"dataprovider1-2"}
};
}
//指定名稱2
@DataProvider(name="dataprovider2")
public static Object[][] dataProvider2(){
return new Object[][]{
{"dataprovider2-1"},
{"dataprovider2-2"}
};
}
}
java測試代碼
package TestngTest;
import org.testng.annotations.Test;
public class DdataProviderTest {
@Test(dataProvider="NoNameMethod",dataProviderClass=DataProviderMethod.class)
public void doTestNG(String testdatas) {
System.out.println("未指定名稱,數據源名為方法名NoNameMethod:"+testdatas);
}
@Test(dataProvider="dataprovider1",dataProviderClass=DataProviderMethod.class)
public void doTestNG1(String testdatas){
System.out.println("指定名稱,數據源名稱選擇了dataprovider1:"+testdatas);
}
@Test(dataProvider="dataprovider2",dataProviderClass=DataProviderMethod.class)
public void doTestNG2(String testdatas){
System.out.println("指定名稱,數據源名稱選擇了dataprovider2:"+testdatas);
}
}
來源於:http://yaowenyu.iteye.com/blog/2146031