TestNG参数化之@Parameters传参
通过TestNG实现参数话常用两种方式,一种是借助 @Parameters读取testng.xml中参数,一种是使用@DataProvider注解传参。
此次主要讲解XML传参,语法:在java类中定义参数名@Parameters({
"paraName"
}
);在TestNG.xml中设置参数值<
parameter
name
=
"paraName"
value
=
"paraValue"
/>
以下为关键代码部分,柠檬黄色标记部分是具体传参代码
1.传一个参数
testDemo.java
@Parameters({ "first-name" }) @Test public void testSingleString(String firstName) {//对应parameters只有一个参数 System.out.println("Invoked testString " + firstName); }
testng.xml
<suite name="Suite" parallel="false"> <parameter name="first-name" value="Cedric"/> <test name="Simple example"> <classes> <class name="**.testDemo"/> </classes> </test> </suite>
2.传多个参数
testDemo.java
@Parameters({ "userName", "password" }) @BeforeMethod public void beforeTest(String userName, String pwd) { System.out.println("参数userName值为:"+userName); System.out.println("参数password值为:"+pwd); }
testng.xml
<suite name="Suite" parallel="false"> <parameter name="userName" value="admin"/> <parameter name="password" value="123456"/> <test name="mulParameters"> <classes> <class name="**.testDemo"/> </classes> </test> </suite>
3.使用默认值
testDemo.java
@Parameters("db") @Test public void testNonExistentParameter(@Optional("mysql") String db) { System.out.println("数据库为:"+db); }
testng.xml
<!-- 无name=“db”的parameter ,testDemo中直接读取默认值“mysql”--> <suite name="Suite" parallel="false"> <test name="demo"> <classes> <class name="**.testDemo"/> </classes> </test> </suite>
打印结果 数据库为:mysql
备注:
- 只有已使用 @Test, @Before/After or @Factory 注解的方法可以使用@Parameters.
- 参数有作用域,在 testng.xml中,参数在 <suite> 或 <test>标签下赋值. 如果有同名参数, <test> 标签下参数优先级高.