通过TestNG实现参数化常用两种方式,此篇讲述@Parameters方式的传参用法;
@Parameters读取testng.xml中参数
@DataProvider 注解传参
注意⚠️
1.只有已使用 @Test, @Before/After or @Factory 注解的方法可以使用@Parameters.
2.参数有作用域,在 testng.xml中,参数在 <suite> 或 <test>标签下赋值. 如果有同名参数, <test> 标签下参数优先级高.
语法:
step1:在java类中定义参数名@Parameters({ "paraName" });
step2:在TestNG.xml中设置参数值<parameter name="paraName" value="paraValue"/>
一、传递一个参数 (testDemo11.xml)
<?xml version="1.0" encoding="utf-8" ?>
<suite name="suitTestDemo1" verbose="1">
<test name="test">
<parameter name="strName" value="rose" />
<classes>
<class name="testNG2.testDemo1" >
<methods>
<include name="testParamOne"/>
</methods>
</class>
</classes>
</test>
</suite>
//类文件 testDemo1
package testNG2;
import org.testng.annotations.*;
/**
* @Description: 接口:
* 接口类型:GET
* @Date: Created in 下午2:18 2018/11/5
*/
public class testDemo1 {
@BeforeTest
public void beforeTest() {
System.out.println();
System.out.println("-------执行.xml文件结果如下------");
}
@Parameters({"strName"})
@Test
public void testParamOne(String name) {
System.out.println(this.getClass().getName() + "_" + name);
}
@Test
@Parameters({"userName", "credit"})
public void testParamsTwo(String userName, String credit) {
System.out.println(this.getClass().getName() + "_" + userName);
System.out.println(this.getClass().getName() + "_" + credit);
}
@Parameters({"courseName"})
@Test
public void testParamsDefault(@Optional("chinese") String course){
System.out.println(this.getClass().getName()+"_"+course);
}
}
-------执行.xml文件结果如下------
testNG2.testDemo1_rose
二、传递多个参数(testDemo12.xml)
<?xml version="1.0" encoding="utf-8" ?>
<suite name="suitTestDemo1" verbose="1">
<parameter name="userName" value="rose" />
<parameter name="credit" value="1K" />
<test name="test">
<classes>
<class name="testNG2.testDemo1" >
<methods>
<include name="testParamsTwo"/>
</methods>
</class>
</classes>
</test>
</suite>
-------执行.xml文件结果如下------
testNG2.testDemo1_rose
testNG2.testDemo1_1K
三、使用参数的默认值(testDemo13.xml)
<?xml version="1.0" encoding="utf-8" ?>
<suite name="suitTestDemo1" verbose="1">
<!--没有name=coursename的parameter,testDemo中testParamsDefault方法直接读取默认提供的参数chinese-->
<test name="test">
<classes>
<class name="testNG2.testDemo1" >
<methods>
<include name="testParamsDefault"/>
</methods>
</class>
</classes>
</test>
</suite>
//执行 testParamsDefault方法或者执行testDemo13.xml文件的结果为
-------执行.xml文件结果如下------
testNG2.testDemo1_chinese