1、從testng.xml傳入參數。
如果參數是一些簡單的值,可以直接在testng.xml中定義。這也是最常用的一種。
可以在測試用例中給參數一個默認值。這樣,即使在xml文件中沒有這個變量,你的測試用例還是能以默認值來執行。
參數能出現的地方: @Test, @Before/After or @Factory

2、通過程序來傳入參數。
如果需要傳遞一些復雜的參數,光靠xml方式就不夠了。有些時候,測試數據需要通過Java代碼來得到(比如從對象中取值或從數據庫取值)。在這些場景下,你需要通過Data Provider方式來提供測試數據。這是類中的一個方法,返回對象數組的數組,通過@DataProvider來聲明
Data Provider 方法返回有兩種類型:
- Object[][] 第一維數組是用來存放測試用例被調用的輪次。第二維數組是存放一次調用所需要的參數,參數的類型必需和測試用例中的類型一致。
- Iterator<Object[]> 唯一與上一種方式不同的是,Iterator是延遲創建測試數據的。TestNG調用iterator時,測試方法所需的參數由iterator一個一個返回。 如果你有大量的參數組合需要准備並且不希望一次性在前面全部創建,用這種方式就很合適。
Data Provider 也可以通過java的反射機制,靈活取值 。我的使用場景是這樣的:通過Data Provider方法來提供測試數據,但不同環境(如測試,預發環境等)的數據會不一樣,這時候我需要根據xml中定義的server變量的值來返回不同的參數。滿足一套代碼多個環境使用的場景。

目前我的測試工程是兩種參數提供方法混合使用,像前文提到的server、host之類的,我就在xml文件中定義。但具體的測試用例所需要的數據就通過data provider提供。
PS:測試用例中調用的參數會顯示在TestNG生成的HTML報告中。