當需要測試的方法含有參數時,可以通過@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時就會調用此構造方法構造此類的對象。
