JUnit中有讲述使用注解的方式进行数据源读取进行自动循环测试的方法,在TestNG中也提供了相应的方法
public class TestngDataProvider {
/**
* 数组内的每个元素都会作为一个用例数据被执行 On execution testEmployeeData() will be executed 4
* times,
*
* 数据源可以是Java对象、配置文件、数据库
*
* @return
*/
@DataProvider(name = "DP1")
public Object[][] createData() {
Object[][] retObjArr = { { "001", "Jack", "London" },
{ "002", "John", "New York" }, { "003", "Mary", "Miami" },
{ "004", "George", "california" } };
return (retObjArr);
}
@Test(dataProvider = "DP1")
public void testEmployeeData(String empid, String empName, String city) {
System.err.println(empid);
System.err.println(empName);
System.err.println(city);
}
@DataProvider(name = "iterator")
public Iterator<Object[]> getData() {
Set<Object[]> set = new HashSet<Object[]>();
set.add(new String[] { "hello" });
Iterator<Object[]> iterator = set.iterator();
return iterator;
}
@Test(dataProvider = "iterator")
public void testIteraorData(String iterator) {
System.err.println("iterator .. " + iterator);
}
}
测试结果:
001
Jack
London
002
John
New York
003
Mary
Miami
004
George
california
iterator .. hello
PASSED: testEmployeeData("001", "Jack", "London")
PASSED: testEmployeeData("002", "John", "New York")
PASSED: testEmployeeData("003", "Mary", "Miami")
PASSED: testEmployeeData("004", "George", "california")
PASSED: testIteraorData("hello")
===============================================
Default test
Tests run: 5, Failures: 0, Skips: 0
===============================================
注意要点:
1.我们的@DataProvider方法可以通过读取Excel、数据库、properties文件等方式进行获取,这个取决于实际测试用例的设计和项目的需要,
2.其返回值是返回一个二维数组,数组内的二维元素个数必须和调用方法的参数一致,
3.这个一致包括了个数和顺序以及类型,否则如果类型不匹配或无法自动转换时就会抛出类型转换异常,而参数个数不匹配也会抛出参数缺失异常。
TestNG的组测试和组中组测试
如果我善良,
别认为我软弱。因为我明白,善良是本性,做人不能恶。