TestNG使用@Parameter给要测试的方法传递参数
当需要测试的方法含有参数时,可以通过@Parameters 注解给该方法传递参数。
比如下面这个类,要调用whoami则必须写一个main函数,然后在main函数中调用该函数,并传入参数,使用TestNG的@Parameters参数则不需要这么做。
package ngtest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class Student {
@Parameters({"name","age"})//表示该函数使用的参数由testng.xml提供,第一个参数是xml中的name参数,第二个是age参数
@Test
public void whoami(String name,String age){
System.out.println("I am "+name+","+age+" years old.");
}
}
testng.xml配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<parameter name="name" value="Mike"></parameter> <!--参数name的值是Mike-->
<parameter name="age" value="18"></parameter> <!--参数age的值是18-->
<test name="Test">
<classes>
<class name="ngtest.Student"/>
</classes>
</test>
</suite>
运行该testng.xml就会把name和age的值代入到函数的参数列表中,然后执行该函数。输出结果:
[TestNG] Running:
D:\workspace\tester\testng.xml
I am Mike,18 years old
===============================================
Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
还可以使用Optinal注解,如果在testng.xml中没找到Parameters中指定的参数,那么就会使用Optional中的参数来替代。
public class TestNg3 {
@Parameters({"parm1"})
@Test
public void Test(@Optional("没有参数只能用我了") String a){ //如果在testng.xml中没有找到param1参数,则会给a赋值“没有参数只能用我了”
System.out.println(a);
}//打印 没有参数只能用我了
}
testng.xml文件中参数的作用范围
testng.xml文件中的参数是有作用范围的,下面的param1在全局范围内都是hahahaha,但是在一个Test内是oooo,这种情况特别适用于在全局范围内某个值是固定的,但是在某个特殊情况下需要改变它的值的情况
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="My test suite">
<parameter name="parm1" value="hahahaha"/>
<test name="First Test">
<parameter name="parm1" value="oooooooo"/>
<classes>
<class name="com.cangqiong.test.TestNg3"/>
</classes>
</test>
</suite>
@Parameter参数使用的位置
- 可以用在任意有@Test、@Before/@After 或者@Factory注解的方法上
- 可以用在一个类的有参数构造方法上,此类的有参数构造方法只能有一个带@Parameter注解,再执行testng.xml时就会调用此构造方法构造此类的对象。