[size=medium][size=xx-large][size=large][size=medium][size=xx-small]测试方法可以带有参数,每个测试方法都可以带有任意数量的参数,并且可以通过TestNG的@Parameters传递。
传递方式有两种:testng.xml 和编程。
------1.使用testng.xml设置参数
如果只是使用相对简单的参数,可以再testng.xml中指定,
java文件:
public class ParaByTestNG {
@Parameters({ "name"})
@Test
public void testPara1(String name){
System. out.println(name);
}
}
testng.xml文件:
< suite name= "Suite1" parallel = "false">
< test name= "param1" >
<classes >
<class name = "test.param.ParaByTestNG"/>
</classes >
<parameter name = "name" value= "zhangsan"></ parameter>
</ test> <!-- Test -->
</ suite>
目录结构
--src
---test.param
----ParaByTestNG.java
---testng.xml
注意:1).如果一个项目中有多个java文件需要传参数,且这些参数需要写在一个testng.xml文件中,那么可以在suite节点下添加多个test节点,test对应的那么不一样就行了。如果添加的是suite节点,将报错:The markup in the document following the root element must be well-formed.
2).同一项目中的java文件传递的参数也可以写在不同的xml文件中,只要xml文件名称唯一,需要的时候运行对应的xml文件就行了
3).通过xml文件运行testng suite时,xml只能在src目录下才行
-----2.使用DataProvider提供参数
testng.xml指定参数可以存在不足
---不想使用testng.xml
---需要传递复杂的参数,或者从java中创建参数
当传递的参数比较复杂时,可以使用DataProvider来给需要的测试提供参数。DataProvider是一个能返回数组的方法,且这个方法用@DataProvider标注,具体代码如下:
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class ParamByProvider {
@DataProvider(name= "test1")
public Object[][] createData1(){
return new Object[][]{
{ "zhangsan", "15点参加会议" },
{ "lisi", "今天可以提前下班" }
};
}
@Test(dataProvider= "test1")
public void verifyData1(String n1,String n2){
System. out.println(n1+ " "+n2);
}
}
@DataProvider提供参数所需要的值,@Test获得参数,直接运行Java类就行了
如果需要传入其他参数,修改createData1中的返回数组的值即可。
注:1)这里的@DataProvider的name对应的值必须和@Test中dataProvider对应的值一样,这样才可以把DataProvider的值传到@Test中
2)默认情况下,DataProvider会查找当前测试类或者测试类的基类,如果希望被其他类使用,将其指定为static,并通过dataProviderClass属性指定要使用的类
创建staticProvider方法
public class StaticProvider {
@DataProvider(name= "create")
public static Object[][] createData(){
return new Object[][]{
new Object[]{ new Integer(23)}
};
}
}
创建MyTest方法
public class MyTest {
@Test(dataProvider= "create",dataProviderClass=StaticProvider. class)
public void test(Integer n){
System. out.println(n);
}
}
运行MyTest方法得出测试结果
[/size][/size][/size][/size][/size]
传递方式有两种:testng.xml 和编程。
------1.使用testng.xml设置参数
如果只是使用相对简单的参数,可以再testng.xml中指定,
java文件:
public class ParaByTestNG {
@Parameters({ "name"})
@Test
public void testPara1(String name){
System. out.println(name);
}
}
testng.xml文件:
< suite name= "Suite1" parallel = "false">
< test name= "param1" >
<classes >
<class name = "test.param.ParaByTestNG"/>
</classes >
<parameter name = "name" value= "zhangsan"></ parameter>
</ test> <!-- Test -->
</ suite>
目录结构
--src
---test.param
----ParaByTestNG.java
---testng.xml
注意:1).如果一个项目中有多个java文件需要传参数,且这些参数需要写在一个testng.xml文件中,那么可以在suite节点下添加多个test节点,test对应的那么不一样就行了。如果添加的是suite节点,将报错:The markup in the document following the root element must be well-formed.
2).同一项目中的java文件传递的参数也可以写在不同的xml文件中,只要xml文件名称唯一,需要的时候运行对应的xml文件就行了
3).通过xml文件运行testng suite时,xml只能在src目录下才行
-----2.使用DataProvider提供参数
testng.xml指定参数可以存在不足
---不想使用testng.xml
---需要传递复杂的参数,或者从java中创建参数
当传递的参数比较复杂时,可以使用DataProvider来给需要的测试提供参数。DataProvider是一个能返回数组的方法,且这个方法用@DataProvider标注,具体代码如下:
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class ParamByProvider {
@DataProvider(name= "test1")
public Object[][] createData1(){
return new Object[][]{
{ "zhangsan", "15点参加会议" },
{ "lisi", "今天可以提前下班" }
};
}
@Test(dataProvider= "test1")
public void verifyData1(String n1,String n2){
System. out.println(n1+ " "+n2);
}
}
@DataProvider提供参数所需要的值,@Test获得参数,直接运行Java类就行了
如果需要传入其他参数,修改createData1中的返回数组的值即可。
注:1)这里的@DataProvider的name对应的值必须和@Test中dataProvider对应的值一样,这样才可以把DataProvider的值传到@Test中
2)默认情况下,DataProvider会查找当前测试类或者测试类的基类,如果希望被其他类使用,将其指定为static,并通过dataProviderClass属性指定要使用的类
创建staticProvider方法
public class StaticProvider {
@DataProvider(name= "create")
public static Object[][] createData(){
return new Object[][]{
new Object[]{ new Integer(23)}
};
}
}
创建MyTest方法
public class MyTest {
@Test(dataProvider= "create",dataProviderClass=StaticProvider. class)
public void test(Integer n){
System. out.println(n);
}
}
运行MyTest方法得出测试结果
[/size][/size][/size][/size][/size]