在TestNG的另一個有趣的功能是參數(shù)測試。在大多數(shù)情況下,你會遇到這樣一個場景,業(yè)務(wù)邏輯需要一個巨大的不同數(shù)量的測試。參數(shù)測試,允許開發(fā)人員運(yùn)行同樣的測試,一遍又一遍使用不同的值。
TestNG讓你直接傳遞參數(shù)測試方法兩種不同的方式:
使用testng.xml
數(shù)據(jù)提供程序
傳遞參數(shù)使用testng.xml
有了這種技術(shù),在testng.xml文件中定義的簡單參數(shù),然后在源文件中引用這些參數(shù)。讓我們看看下面的例子中如何使用這種技術(shù)來傳遞參數(shù)。
創(chuàng)建測試案例類
創(chuàng)建一個Java測試類 ParameterizedTest1.java.
測試方法parameterTest()添加到測試類。此方法需要一個字符串作為輸入?yún)?shù)。
添加注釋 @Parameters("myName") 到此方法。該參數(shù)將被傳遞testng.xml,在下一步我們將看到一個值。
創(chuàng)建Java類文件名 ParameterizedTest1.java 在 C: > TestNG_WORKSPACE
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class ParameterizedTest1 {
@Test
@Parameters("myName")
public void parameterTest(String myName) {
System.out.println("Parameterized value is : " + myName);
}
}
創(chuàng)建 TESTNG.XML
創(chuàng)建 testng.xml C: > TestNG_WORKSPACE 執(zhí)行測試案例
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="test1">
<parameter name="myName" value="manisha"/>
<classes>
<class name="ParameterizedTest1" />
</classes>
</test>
</suite>
我們還可以定義參數(shù)在<suite>級別。假設(shè)我們已經(jīng)定義在兩個<suite>和<test>級別myName,在這種情況下,常規(guī)的作用域規(guī)則適用。這意味著,任何類里面<test>標(biāo)簽將查看值參數(shù)定義在<test>,而testng.xml文件中的類的其余部分將看到定義在<suite>中值
編譯使用javac的測試用例類。
C:TestNG_WORKSPACE>javac ParameterizedTest1.java
現(xiàn)在,運(yùn)行testng.xml,其中將運(yùn)行parameterTest方法。TestNG的將試圖找到一個命名myName的第一<test>標(biāo)簽的參數(shù),然后,如果它不能找到它,它會搜索包圍在的<suit>標(biāo)簽。
C:TestNG_WORKSPACE>java -cp "C:TestNG_WORKSPACE" org.testng.TestNG testng.xml
驗(yàn)證輸出。
Parameterized value is : manisha
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================
TestNG 對testng.xml 的參數(shù)的類型指定的值會自動嘗試轉(zhuǎn)換。下面是支持的類型:
String
int/Integer
boolean/Boolean
byte/Byte
char/Character
double/Double
float/Float
long/Long
short/Short