📜  如何使用testng多次执行相同的测试用例? (1)

📅  最后修改于: 2023-12-03 15:24:00.949000             🧑  作者: Mango

如何使用TestNG多次执行相同的测试用例?

有时我们需要在测试中多次运行相同的测试用例。为了避免重复编写代码,TestNG提供了一个参数化测试的方法,允许我们在多次运行相同的测试用例时使用不同的数据。

1. 创建数据提供者方法

首先,我们需要编写一个数据提供者方法,它将提供测试用例所需的数据。这个方法必须返回一个包含测试数据的两维数组(Object[][])。

@DataProvider(name = "testData")
public Object[][] testData() {
    return new Object[][] {
        { "apple", 2 },
        { "banana", 3 },
        { "orange", 4 }
    };
}

上面的示例中,我们创建了一个名为“testData”的数据提供者方法,它将提供三个不同的测试数据,每个测试数据包含一个字符串和一个整数。

2. 定义测试用例

接下来,我们需要定义一个测试用例,并使用@DataProvider注释指定数据提供者方法。

@Test(dataProvider = "testData")
public void testFruits(String fruit, int count) {
    // 执行测试代码
    System.out.println("I have " + count + " " + fruit + "s");
}

上面的测试用例将使用数据提供者方法“testData”提供的数据来运行三次,每次使用一个不同的数据集。

3. 运行测试用例

现在,我们可以使用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来指定测试类和测试方法,并运行测试。在每次运行测试时,我们都使用不同的数据集来测试我们的代码。