在BeforeSuite、BeforeTest、BeforeClass、BeforeMethod及BeforeGroups中,后面三個注解都比較好理解,其實BeforeSuite、BeforeTest的字面意思也是很簡單的:
BeforeSuite:在整個測試集運行之前運行;
BeforeTest:在測試集中的每個Test之前運行。
但是有點疑惑的是:BeforeClass、BeforeMethod及BeforeGroups都是在一個測試類開始運行之后才執行的;而BeforeSuite、BeforeTest定義在測試類的內部,但是卻在
測試類運行之前執行。這就有點不大好理解,如果有多個平行的測試類,這些測試類只需要一個BeforeSuite、BeforeTest,那么這個BeforeSuite、BeforeTest定義在哪個測試類
中比較好呢?或者如果每個測試類都定義了BeforeSuite、BeforeTest,這些BeforeSuite、BeforeTest以怎樣的關系運行?
其實BeforeSuite、BeforeTest的運行與否也是與測試類相關的,如果你在某個測試類中定義了BeforeSuite、BeforeTest,但是在xml文件中不執行該測試類,那么這個
BeforeSuite、BeforeTest也不會被執行。
因此,我的理解是:如果多個測試類需要一個共同的BeforeSuite、BeforeTest,可以在一個單獨的類中定義,但是運行測試時必須包含該類;如果每個測試類需要不同的
BeforeSuite、BeforeTest,那就各自定義各自的。
例如:Test1和Test2都定義了BeforeSuite、BeforeTest:
1 public class Test1 { 2 3 @BeforeSuite 4 public void f_bs() { 5 System.out.println("Test1.f_bs()"); 6 } 7 8 @BeforeTest 9 public void f_bt() { 10 System.out.println("Test1.f_bt()"); 11 } 12 13 @BeforeClass 14 public void f_bc() { 15 System.out.println("Test1.f_bc()"); 16 } 17 18 @Test 19 public void test_m1() { 20 System.out.println("Test1.test_m1()"); 21 } 22 }
1 public class Test2 { 2 3 @BeforeSuite 4 public void f_bs() { 5 System.out.println("Test2.f_bs()"); 6 } 7 8 @BeforeTest 9 public void f_bt() { 10 System.out.println("Test2.f_bt()"); 11 } 12 13 @BeforeClass 14 public void f_bc() { 15 System.out.println("Test2.f_bc()"); 16 } 17 18 @Test 19 public void test_m2() { 20 System.out.println("Test1.test_m2()"); 21 } 22 }
如果XML文件同時運行兩個測試類:
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <suite name="suite1"> 4 <test name="test1" verbose="2"> 5 <classes> 6 <class name="sea.Test1" /> 7 <class name="sea.Test2" /> 8 </classes> 9 </test> 10 </suite>
那么運行結果為如下,可見每個類中定義的BeforeSuite、BeforeTest都執行了:
Test1.f_bs()
Test2.f_bs()
Test1.f_bt()
Test2.f_bt()
Test1.f_bc()
Test1.test_m1()
Test2.f_bc()
Test1.test_m2()
PASSED: test_m1
PASSED: test_m2
如果XML文件只執行1個測試類:
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <suite name="suite1"> 4 <test name="test1" verbose="2"> 5 <classes> 6 <class name="sea.Test1" /> 7 </classes> 8 </test> 9 </suite>
那么運行結果為如下,可見只有Test1類中定義的BeforeSuite、BeforeTest被執行了:
Test1.f_bs()
Test1.f_bt()
Test1.f_bc()
Test1.test_m1()
PASSED: test_m1
如果把兩個測試類放在不同的Test中,那么他們的BeforeTest也是被單獨執行的:
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <suite name="suite1"> 4 <test name="test1" verbose="2"> 5 <classes> 6 <class name="sea.Test1" /> 7 </classes> 8 </test> 9 10 <test name="test2" verbose="2"> 11 <classes> 12 <class name="sea.Test2" /> 13 </classes> 14 </test> 15 </suite>
Test1.f_bs()
Test2.f_bs()
Test1.f_bt()
Test1.f_bc()
Test1.test_m1()
PASSED: test_m1
Test2.f_bt()
Test2.f_bc()
Test1.test_m2()
PASSED: test_m2