xml文件配置:
<suite name="Parameter test Suite" verbose="1"> <!-- This parameter will be passed to every test in this suite --> <parameter name="suite-param" value="suite level parameter" /> <test name="Parameter Test one"> <classes> <class name="com.howtodoinjava.test.ParameterTest"> <methods> <include name="prameterTestOne" /> </methods> </class> </classes> </test> <test name="Parameter Test two"> <!-- This parameter will be passed this test only --> <parameter name="test-two-param" value="Test two parameter" /> <classes> <class name="com.howtodoinjava.test.ParameterTest"> <methods> <include name="prameterTestTwo" /> </methods> </class> </classes> </test> <test name="Parameter Test three"> <!-- Overriding suite level parameter --> <parameter name="suite-param" value="overiding suite parameter" /> <!-- Test specific parameter --> <parameter name="test-three-param" value="test three parameter" /> <classes> <class name="com.howtodoinjava.test.ParameterTest"> <methods> <include name="prameterTestThree" /> </methods> </class> </classes> </test> </suite> |
也可以使用可选参数,如果xml里没有给参数传入值,那么测试方法将会调用可选的参数值:
public class ParameterTest
{
@Parameters({ "optional-value" })
@Test
public void optionTest(@Optional("optional value") String value) {
System.out.println("This is: " + value);
}
}
对应的xml文件配置:
<suite name="Optional test Suite" verbose="1"> <test name="Optional Test one"> <classes> <class name="test.parameter.OptionalTest" /> </classes> </test> <test name="Optional Test two"> <parameter name="optional-value" value="passed from xml" /> <classes> <class name="test.parameter.OptionalTest" /> </classes> </test> </suite> |
这里配置了两个test,第一个执行option方法时,由于没有在xml文件里找到option-value对应的值,所以将会输出方法中的@Optional的值;而第二个test中有设置option-value的值为passed........那么将会输出对应的值。
结果:
This is: optional value
This is: passed from xml
===============================================
Optional test Suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================
DataProvider方式传参
只提供了一个字符串属性:名称,供测试方法作为传递参数的annotation使用两种DataProvider,一种是返回一个二维数组对象(Object[][],第一个数组是数据集,第二个数组代表参数值),如上面的例子;另外一种DataProvider是返回一个Iterator,DataProvider可以向测试方法传递任意类型任意数目的参数,利用DataProvider提供不同的参数集合对一个测试方法进行多次调用。
dataProvider可以进行数据驱动的测试。
在同一个类中使用dataProvider:
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")
在不同的类中使用:
public class DataProviderClass { @DataProvider(name = "data-provider") public static Object[][] dataProviderMethod() { return new Object[][] { { "data one" }, { "data two" } }; } } public class TestClass { @Test(dataProvider = "data-provider", dataProviderClass = DataProviderClass.class) public void testMethod(String data) { System.out.println("Data is: " + data); } } |
结果和上面的一样,只是要注意,在使用数据集的方法中需要添加dataProviderClass的属性,指明是那个类提供数据。