数据提供者本身可以接受两个类型的参数:Method和ITestContext
在创建@DataProvider方法是可以有四种格式如图:
第一种在上一篇中有学到
1-Methode参数使用
@DataProvider 使用 java.lang.reflect.Method 作为第一个参数,TestNG 会把当前的测试方法当成参数传给第一个参数。
这样不同测@test测试方法可以调用不同的测试数据
package com.lc.testChuanCan02; import java.lang.reflect.Method; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class testNG10 { @DataProvider(name = "data1") public Object[][] testNG10_01(Method method) { Object[][] data01 = null; //method.getName()的值是@test测试方法的名称 if(method.getName().equals("testNG10_02")) { data01 = new Object[][] {{"我是测试方法a","我是测试方法a"}}; }else if(method.getName().equals("testNG10_03")) { data01 = new Object[][] {{"我是测试方法b","我是测试方法b"}}; } return data01; } @Test(dataProvider = "data1") public void testNG10_03(String name1,String name2) { System.out.println("name1:"+name1+";name2:"+name2); } }
给数据提供者提供ITestContext参数像是吧@test方的所在组提供给他;要配合txtng.xml文件使用。
下面是 @DataProvider 数据提供者如果 组名是functional-test( group.equals("functional-test")) 则随机生成10随机数给他测试方法,如果不是就提供2个随机数
package com.lc.testChuanCan02; import java.util.List; import java.util.Random; import org.testng.ITestContext; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class testNG11 { @DataProvider public Object[][] randomIntegers(ITestContext context){ String[] groups = context.getIncludedGroups(); int size = 2 ; for(String group : groups) { System.out.println("group=="+group); if(group.equals("functional-test")) { size = 10 ; break; } } Object[][] result = new Object[size][]; Random r = new Random(); for(int i = 0 ; i < size ; i++) { result[i] = new Object[] {new Integer(r.nextInt())}; } return result; } @Test(dataProvider = "randomIntegers",groups = {"unit-test","functional-test"}) public void random(Integer n) { System.out.println("n="+n); } }
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="none">
<test name="Test">
<groups>
<run>
<include name="functional-test"></include>
</run>
</groups>
<classes>
<class name="com.lc.testChuanCan02.testNG11"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->