通過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> 標簽下參數優先級高.