Parameters注解在測試方法上指定參數列表,然后在測試方法中聲明對應的形參,形參與參數列表一一對應,但名字可以不同,如下所示:
1 public class Test1 { 2 3 @Parameters({"Name", "Age", "Hobby"}) 4 @Test 5 public void test1(String name, int age, String hobby) { 6 System.out.println(name + " is " + age + " years old and likes " + hobby); 7 } 8 }
然后在XML文件中通過<parameter>標簽對每個參數賦值,采用name-value對的形式:
1 <suite name="suite1"> 2 <parameter name="Name" value="xiaoming" /> 3 <parameter name="Age" value="20" /> 4 <parameter name="Hobby" value="dajiangyou" /> 5 6 <test name="test1" verbose="2"> 7 <classes> 8 <class name="sea.Test1" /> 9 </classes> 10 </test> 11 12 </suite>
運行結果為:
xiaoming is 20 years old and likes dajiangyou
PASSED: test1("xiaoming", 20, "dajiangyou")
Parameters一般用於比較簡單的參數,對於參數比較多、復雜或者需要從文件讀取的時候一般使用DataProvider注解。
采用DataProvider時構造參數的方法必須返回Obiect[][],可以看着二維數組(當然也可存放一維數據)。
使用時,首先定義一個DataProvider,通過name參數指定該測試數據的名字;
然后在測試方法中,通過Test注解的dataProvider參數指定需要使用的測試數據名字,多個測試方法可以使用同一個dataProvider;
最后在測試方法的形參列表中,定義與Obiect[][]的每一行數據一一對應的參數,該測試方法被執行時,有多少組參數就會被執行多少次。
舉例如下,可以看到test2這個用例被執行了3次:
1 public class Test1 { 2 @DataProvider(name = "data1") 3 public Object[][] createdata() { 4 return new Object[][] { 5 {"lilei", 20, "football"}, 6 {"hanmeimei", 18, "music"}, 7 {"wangnima", 25, "baozoumanhua"} 8 }; 9 } 10 11 @Test(dataProvider = "data1") 12 public void test2(String name, int age, String hobby) { 13 System.out.println(name + " is " + age + " years old and likes " + hobby); 14 } 15 }
lilei is 20 years old and likes football hanmeimei is 18 years old and likes music wangnima is 25 years old and likes baozoumanhua PASSED: test2("lilei", 20, "football") PASSED: test2("hanmeimei", 18, "music") PASSED: test2("wangnima", 25, "baozoumanhua")