TestNG @DataProvider – 测试参数示例

TestNG @DataProvider – 测试参数示例

原文: https://howtodoinjava.com/testng/testng-dataprovider/

TestNG 提供的重要功能是 testng DataProvider功能。 它可以帮助您编写数据驱动的测试,这实际上意味着同一测试方法可以使用不同的数据集多次运行。

请注意,除了从testng.xml传递参数之外,@DataProvider是向测试方法传递参数的第二种方法。 它有助于为测试方法提供复杂的参数,因为不可能从 XML 做到这一点。

要在测试中使用DataProvider功能,您必须声明一个由@DataProvider注解的方法,然后在测试方法中使用该方法,并在测试方法中使用@Test注解。

1. TestNG 同一类中的@DataProvider@Test

下面的测试类包含一个测试方法,该方法采用一个参数作为输入,并在执行时将其打印到控制台。 通过使用 TestNG 的@DataProvider注解,在同一类中也可以使用DataProvider方法。

使用@DataProvider注解的name属性提及所述DataProvider方法的名称。 DataProvider返回一个具有两个数据集的Object类双数组,即“数据一”和“数据二”。

package com.howtodoinjava.test;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class SameClassDataProvider 
{
	@DataProvider(name = "data-provider")
	public Object[][] dataProviderMethod() {
		return new Object[][] { { "data one" }, { "data two" } };
	}

	@Test(dataProvider = "data-provider")
	public void testMethod(String data) {
		System.out.println("Data is: " + data);
	}
}

现在运行以上测试。 以上测试运行的输出如下:

Data is: data one
Data is: data two

PASSED: testMethod("data one")
PASSED: testMethod("data two")

从上面的测试结果可以看出,该类中的相应测试方法已执行了两次。 测试方法的执行取决于DataProvider方法传递的数据集的数量,在这种情况下,由于DataProvider返回了两组不同的数据,因此测试方法执行了两次。

@DataProvider方法必须以Object类的双数组(Object[][])形式返回数据。 第一个数组代表一个数据集,其中第二个数组包含参数值。

2. TestNG 不同类中的@DataProvider@Test

要了解这一点,请添加两个名称分别为DataProviderClassTestClass的类,如下所示。

2.1. DataProvider.java

import org.testng.annotations.DataProvider;

public class DataProviderClass 
{
	@DataProvider(name = "data-provider")
	public static Object[][] dataProviderMethod() 
	{
		return new Object[][] { { "data one" }, { "data two" } };
	}
}

2.2. TestClass.java

import org.testng.annotations.Test;

public class TestClass 
{
	@Test(dataProvider = "data-provider", dataProviderClass = DataProviderClass.class)
	public void testMethod(String data) 
	{
		System.out.println("Data is: " + data);
	}
}

2.3 演示

现在运行以上测试。 以上测试运行的输出如下:

Data is: data one
Data is: data two

PASSED: testMethod("data one")
PASSED: testMethod("data two")

从上面的测试结果中可以看到,根据DataProvider方法传递给它的数据,该测试方法已执行两次。 在这种情况下,DataProvider方法位于另一个类中。 在这种情况下,必须将dataProviderMethod()声明为静态,以便测试方法可以使用另一类中的dataProviderMethod()来提供数据。

学习愉快!