📅  最后修改于: 2023-12-03 15:24:00.949000             🧑  作者: Mango
有时我们需要在测试中多次运行相同的测试用例。为了避免重复编写代码,TestNG提供了一个参数化测试的方法,允许我们在多次运行相同的测试用例时使用不同的数据。
首先,我们需要编写一个数据提供者方法,它将提供测试用例所需的数据。这个方法必须返回一个包含测试数据的两维数组(Object[][])。
@DataProvider(name = "testData")
public Object[][] testData() {
return new Object[][] {
{ "apple", 2 },
{ "banana", 3 },
{ "orange", 4 }
};
}
上面的示例中,我们创建了一个名为“testData”的数据提供者方法,它将提供三个不同的测试数据,每个测试数据包含一个字符串和一个整数。
接下来,我们需要定义一个测试用例,并使用@DataProvider注释指定数据提供者方法。
@Test(dataProvider = "testData")
public void testFruits(String fruit, int count) {
// 执行测试代码
System.out.println("I have " + count + " " + fruit + "s");
}
上面的测试用例将使用数据提供者方法“testData”提供的数据来运行三次,每次使用一个不同的数据集。
现在,我们可以使用TestNG来运行测试用例。我们可以在xml配置文件中指定测试类和测试方法,也可以使用@Test注释直接运行测试方法。无论我们使用哪种方法,TestNG都会运行测试用例三次,每次使用一个不同的数据集。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="MyTestSuite">
<test name="MyTest">
<classes>
<class name="com.example.MyTestClass"/>
</classes>
</test>
</suite>
在上面的xml文件中,我们声明了一个suite和一个test,它们分别包含我们要运行的测试类和测试方法。我们可以在class标记内指定测试类的全限定类名,也可以在method标记内指定测试方法名。
public class MyTestClass {
@Test(dataProvider = "testData")
public void testFruits(String fruit, int count) {
// 执行测试代码
System.out.println("I have " + count + " " + fruit + "s");
}
}
如果我们选择使用@Test注释来运行测试方法,我们只需要在测试类上使用@TestSuite注释,并将我们的测试类作为参数传递即可。
@TestSuite(classes = { MyTestClass.class })
public class MyTestSuite {
}
到此,我们已经成功地使用了TestNG来多次执行相同的测试用例。我们编写了一个数据提供者方法,并把它与我们的测试用例方法关联起来。然后,我们使用TestNG来指定测试类和测试方法,并运行测试。在每次运行测试时,我们都使用不同的数据集来测试我们的代码。