1. 程式人生 > >章節十六、3-TestNG方法和類註解

章節十六、3-TestNG方法和類註解

一、Test Suite(測試套件)

我們通常認為一個testcase就是一個測試方法,但是會有很多的testcase,所以我們不可能把所有的testcase放到同一個測試類中,假如需要測試的頁面有10個,我們需要建立不同的類來測試這10個頁面的具體功能,測試具體功能的測試用例會放到具體的測試類中,把這些所有的測試類組合起來就成了Test Suite。可以根據我們的測試目的,選擇一些類來組成Test Suite。可以選擇一些基本功能的測試類,組成冒煙測試的測試類,冒煙測試可以快速的檢驗軟體的基本功能,也可以選擇一些測試類組成迴歸測試的test suite。

 

二、Test Suite案例演示----》如何一次執行多個測試類

1、首先新建兩個testcase

 1 package testclasses;
 2 
 3 import org.testng.annotations.Test;
 4 import org.testng.annotations.BeforeMethod;
 5 import org.testng.annotations.AfterClass;
 6 import org.testng.annotations.AfterMethod;
 7 import org.testng.annotations.BeforeClass;
 8 
 9 public class TestNG_TestClass1 {
10 
11     @BeforeClass
12     public void beforeClass() {
13         System.out.println("\nClass1-->beforeMethod在類裡所有的方法執行前跑");
14     }
15 
16     @AfterClass
17     public void afterClass() {
18         System.out.println("\nClass1-->afterClass在類裡所有的方法執行後跑\n");
19     }
20 
21     @BeforeMethod
22     public void beforeMethod() {
23         System.out.println("\nClass1-->BeforeMethod每個測試方法執行前跑");
24     }
25 
26     @AfterMethod
27     public void afterMethod() {
28         System.out.println("\nClass1-->afterMethod每個測試方法執行後跑");
29     }
30 
31     @Test
32     public void test1() {
33         System.out.println("\nClass1-->test1測試方法");
34     }
35 
36     @Test
37     public void test2() {
38         System.out.println("\nClass1-->test2測試方法");
39     }
40 }
 1 package testclasses;
 2 
 3 import org.testng.annotations.Test;
 4 import org.testng.annotations.BeforeMethod;
 5 import org.testng.annotations.AfterMethod;
 6 import org.testng.annotations.BeforeClass;
 7 import org.testng.annotations.AfterClass;
 8 
 9 public class TestNG_TestClass2 {
10 
11     @BeforeClass
12     public void beforeClass() {
13         System.out.println("\nClass2-->beforeMethod在類裡所有的方法執行前跑");
14     }
15 
16     @AfterClass
17     public void afterClass() {
18         System.out.println("\nClass2-->afterClass在類裡所有的方法執行後跑\n");
19     }
20 
21     @BeforeMethod
22     public void beforeMethod() {
23         System.out.println("\nClass2-->BeforeMethod每個測試方法執行前跑");
24     }
25 
26     @AfterMethod
27     public void afterMethod() {
28         System.out.println("\nClass2-->afterMethod每個測試方法執行後跑");
29     }
30 
31     @Test
32     public void test1() {
33         System.out.println("\nClass2-->test1測試方法");
34     }
35 
36     @Test
37     public void test2() {
38         System.out.println("\nClass2-->test2測試方法");
39     }
40 }

2、新建一個xml檔案

xml是標記型語言,是一種簡單的資料儲存語言,用一系列簡單的標記來描述資料,把資料放在標籤中。

<!-- 沒有此行配置執行時會報錯 -->
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<!-- name中的值表示命名,可隨意命名 -->
<suite name="Regression TestSuite">
<!-- name中的值表示命名,可隨意命名 -->
<test name="Application Test">
<!-- name中的值為需要測試的具體類名,格式:包名.類名 -->
<classes>
<class name="testclasses.TestNG_TestClass1"></class>
<class name="testclasses.TestNG_TestClass2"></class>
</classes>
</test>
</suite>

3、執行結果成功:

從執行結果中可以看出,當我們在配置完xml檔案後,直接執行xml檔案,2個testcase就能夠一起執行成功了

 

三、@BeforeSuite和@AfterSuite

@BeforeSuite:表示在test suite中的所有測試類在執行前就先執行帶有該註解方法中的程式碼。

 @AfterSuite:表示在test suite中的所有測試類執行完成後再執行帶有該註解方法中的程式碼。

 1、新建一個帶有@BeforeSuite和@AfterSuite註解的類

 1 package base;
 2 
 3 import org.testng.annotations.AfterClass;
 4 import org.testng.annotations.AfterSuite;
 5 import org.testng.annotations.BeforeClass;
 6 import org.testng.annotations.BeforeSuite;
 7 
 8 public class BaseTestSuite {
 9 
10     @BeforeClass
11     public void beforeClasss() {
12         System.out.println("\nBaseTestSuite-->beforeClass在每個測試類執行前跑");
13     }
14 
15     @AfterClass
16     public void afterClasss() {
17         System.out.println("\nAfterClass-->afterClass在每個測試類執行完成後跑\n");
18     }
19 
20     @BeforeSuite
21     public void beforeSuite() {
22         System.out.println("\nBeforeSuite-->beforeSuite在每個test suite執行前跑");
23     }
24 
25     @AfterSuite
26     public void afterSuite() {
27         System.out.println("\nBeforeSuite-->beforeSuite在每個test suite執行完成後跑\n");
28     }
29 }

2、讓test suite中的TestNG_TestClass1類和TestNG_TestClass2類繼承新建的類BaseTestSuite 。

3、執行xml配置檔案

<!-- 沒有此行配置執行時會報錯 -->
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<!-- name中的值表示命名,可隨意命名 -->
<suite name="Regression TestSuite">
    <!-- name中的值表示命名,可隨意命名 -->
    <test name="Application Test">
        <!-- name中的值為需要測試的具體類名,格式:包名.類名 -->
        <classes>
            <class name="regressionsuite.TestNG_TestClass1"></class>
            <class name="regressionsuite.TestNG_TestClass2"></class>
        </classes>
    </test>
</suite>

4、執行結果

從執行結果中我們可以看出,@BeforeSuite和@AfterSuite分別只在所有的test suite執行前和介紹後執行一次

 

 四、@BeforeTest和@AfterTest註解

@BeforeTest:使用這個註解的方法會在xml檔案中的test標籤中的每個test方法執行之前執行。

@AfterTest:使用這個註解的方法會在xml檔案中的test標籤中的每個test方法執行之後執行。

 

 1 <!-- 沒有此行配置執行時會報錯 -->
 2 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
 3 <!-- name中的值表示命名,可隨意命名 -->
 4 <suite name="Regression TestSuite">
 5     <!-- name中的值表示命名,可隨意命名 -->
 6     <test name="Application Test">
 7         <!-- name中的值為需要測試的具體類名,格式:包名.類名 -->
 8         <classes>
 9             <class name="regressionsuite.TestNG_TestClass1"></class>
10             <class name="regressionsuite.TestNG_TestClass2"></class>
11         </classes>
12     </test>
13     
14     <test name="Application Test">
15         <!-- name中的值為需要測試的具體類名,格式:包名.類名 -->
16         <classes>
17             <class name="regressionsuite.TestNG_TestClass1"></class>
18             <class name="regressionsuite.TestNG_TestClass2"></class>
19         </classes>
20     </test>
21 </suite>

 

 

 五、@BeforeClass和@AfterClass註解

@BeforeClass:使用這個註解的方法會在當前這個類的第一個test方法執行之前執行。

@AfterClass:使用這個註解的方法會在當前這個類的最後一個test方法執行之後執行。

 

六、@BeforeMethod和@AfterMethod註解

@BeforeMethod:使用這個註解的方法會在每個test方法執行之前執行。

@AfterMethod:使用這個註解的方法會在每個test方法執行之後執行。

 

注:帶@BeforeTest和@AfterTest、@BeforeSuite和@AfterSuite註解的方法不能在類中直接執行(直接執行會報如下圖所示的錯誤資訊),必須在xml中才能執行。

 

 

 

如果有不明白的小夥伴可以加群“555191854”問我,群裡都是軟體行業的小夥伴相互一起學習。

內容具有連慣性,未標註的地方可以看前面的部落格,這是一整套關於ava+selenium自動化的內容,從java基礎開始。

歡迎關注,轉載請註明來