1. 程式人生 > >Java自動化測試框架-03 - TestNG之Test Group篇 - 我們一起組團打怪升級(詳細教程)

Java自動化測試框架-03 - TestNG之Test Group篇 - 我們一起組團打怪升級(詳細教程)

簡介

  其實這篇文章的group巨集哥在上一篇中就提到過,但是就是舉例一筆帶過的,因此今天專門有一篇文章來講解Group的相關知識。希望大家茅塞頓開 ,有著更進一步認識和了解測試組。

一、Test Group(測試組)

  TestNG 允許你將複雜的測試方法歸類為不同的組。不僅僅是可以宣告某個方法屬於某個組,而且還可以讓組包含其他的組。這樣TestNG可以呼叫或者請求包含一組特定的組 (或者正則表示式)而排除其他不需要組的集合。這樣,如果你打算將測試分成兩份的時候,就無需重新編譯。這個特點,會給你在劃分組的時候帶來很大的靈活性。

  組(Group)在testng.xml檔案中指定,可以在<test>或<suite>標記下找到。<suite>標記中指定的組適用於下面的所有<test>標記。請注意,組在這些標記中是累積的:如果在<suite>中指定組“a”,在<test>中指定“b” ,則將包括“a”和“b”。

例如,通常將測試劃分為兩種類別是再常見不過的了:

  檢查性測試(Check-in test):這些測試在你提交新程式碼之前就會執行。它們一般都是很快進行的,並且保證沒有哪個基本的功能是不好使的。

  功能性測試(Functional test):這些測試涵蓋你的軟體中所有的功能,並且至少每天執行一次,不過你也可能希望他們持續的執行。

  典型的來說,檢測性測試通常是功能性測試的一個子集。TestNG允許你根據個人感覺來進行組劃分。例如,你可能希望把你所有的測試類都劃歸為"functest"組,並且額外的有幾個方法輸入"checkintest"組。

TestNG允許您以非常直觀的方式使用測試組指定。例如,您可以通過說明您的整個測試類屬於“functest”組來構建測試,另外還有一些方法屬於“checkintest”組:

package hongge;

import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import hongge.TestSum;

/**
 * @author 北京-巨集哥
 * 
 * java自動化測試交流群:694280102
 *
 * Java自動化測試框架-03 - TestNG之Test Group篇
 *
 * 2019年10月22日
 */
public class Test1 {
    @Test(groups = { "functest", "checkintest" })  
      public void testMethod1() {  
      }  
      @Test(groups = {"functest", "checkintest"} )  
      public void testMethod2() {  
      }  
      @Test(groups = { "functest" })  
      public void testMethod3() {  
      }  
}

通過下面的內容呼叫TestNG

<test name="Test1">  
  <groups>  
    <run>  
      <include name="functest"/>  
    </run>  
  </groups>  
  <classes>  
    <class name="example1.Test1"/>  
  </classes>  
</test>  

以上會執行上面那個類中所有的測試,當要使用checkintest進行呼叫的時候,就僅僅執行testMethod1()和testMethod2()。

下面是另外一個例子。這次使用正則表示式。假定有些測試方法不應該執行在Linux環境下,你的測試會看起來像:

package hongge;

import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import hongge.TestSum;

/**
 * @author 北京-巨集哥
 * 
 * java自動化測試交流群:694280102
 *
 * Java自動化測試框架-03 - TestNG之Test Group篇
 *
 * 2019年10月22日
 */
@Test
public class Test1 {
     @Test(groups = {"windows.checkintest"})   
     public void testWindowsOnly() {  
     }  
     @Test(groups = {"linux.checkintest"})  
     public void testLinuxOnly() {  
     }  
     @Test(groups = {"windows.functest"})  
     public void testWindowsToo() {  
     }  
}

然後你就可以使用下面這個 testng.xml 來只執行在Windows下的方法:

<test name="Test1">  
  <groups>  
    <run>  
      <include name="windows.*"/>  
    </run>  
  </groups>  
  <classes>  
    <class name="example1.Test1"/>  
  </classes>  
</test>  

注意:TestNG使用的是正則表示式,而不是萬用字元。注意這二者的區別

例如,"anything" 是匹配於 ".*" -- 點和星號 -- 而不是星號 "*".

二、MetaGroups(組中組)

  測試組也可以包含其他組。這樣的組叫做“元組”(MetaGroups)。例如,你可能要定義一個組all來包含其他的組,chekcintest 和functest。"functest"本身只包含了組windows和linux,而"checkintest"僅僅包含windows。你就可以在屬性檔案中這樣定義:

<test name="Regression1">  
  <groups>  
    <define name="functest">  
      <include name="windows"/>  
      <include name="linux"/>  
    </define>  
    <define name="all">  
      <include name="functest"/>  
      <include name="checkintest"/>  
    </define>  
    <run>  
      <include name="all"/>  
    </run>  
  </groups>  
  <classes>  
    <class name="test.sample.Test1"/>  
  </classes>  
</test>  

三、排除組

   TestNG 允許你包含組,當然也可以排除之。

譬如說,因為最近的改動,導致當前的測試中斷並且,你還沒有時間修復這些問題都是司空見慣的。但是,你還需要自己的功能測試可以正確執行,所以,製藥簡單的讓這些不需要的測試失效就可以了。但是別忘記在以後需要的時候,要重新讓其生效。

   一個簡單的辦法來解決這個問題就是建立一個叫做"broken"組,然後使得這些測試方法從屬於那個組。例如上面的例子,假設我知道testMethod2()會中斷,所以我希望使其失效:

package hongge;

import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import hongge.TestSum;

/**
 * @author 北京-巨集哥
 * 
 * java自動化測試交流群:694280102
 *
 * Java自動化測試框架-03 - TestNG之Test Group篇
 *
 * 2019年10月22日
 */
@Test(groups = {"checkintest", "broken"} )  
public void testMethod2() {}  

而我所需要做的一切就是從執行中排除這個組:

<test name="Simple example">  
  <groups>  
    <run>  
      <include name="checkintest"/>  
      <exclude name="broken"/>  
    </run>  
  </groups>  
  <classes>  
    <class name="example1.Test1"/>  
  </classes>  
</test>  

通過這種辦法,我們既可以得到整潔的測試執行,同時也能夠跟蹤那些需要稍後修正的中斷的測試。

注意:你可以可以通過使用"enabled"屬性來完成,這個屬性適用於@Test 和 @Before/After annotation。

四、區域性組

可以在類級別定義組,之後還可以在方法級定義組:

package hongge;

import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import hongge.TestSum;

/**
 * @author 北京-巨集哥
 * 
 * java自動化測試交流群:694280102
 *
 * Java自動化測試框架-03 - TestNG之Test Group篇
 *
 * 2019年10月22日
 */
@Test(groups = { "checkin-test" })  
public class All {  
@Test(groups = { "func-test" )  
public void method1() { ... }  
public void method2() { ... }  
}  

在這個類中,method2() 類級組"checkin-test"的一部分,而method1()即屬於"checkin-test"也屬於"func-test"組。

五、方法組

你可以排除或者包含單個方法

<test name="Test1">

  <classes>

    <class name="example1.Test1">

      <methods>

        <include name=".*enabledTestMethod.*"/>

        <exclude name=".*brokenTestMethod.*"/>

      </methods>

     </class>

  </classes>

</test>

這可以派上用來停用單個方法而不必重新編譯任何東西,但我不建議過多地使用這種技術,因為如果你開始重構Java程式碼(正則表示式中使用的正則表示式),它會使你的測試框架崩潰。標籤可能不再符合您的方法)。

小結

  嘿嘿!今天就分享到這裡。下一篇計劃是測試方法(Test Method),希望小夥伴們和童鞋們喜歡和繼續關注巨集哥!

有問題加入java自動化測試交流群:694280102

 

個人公眾號                                                             微信群 (微信群已滿100,可以加巨集哥的微信拉你進群,請備註:進群)          

                                                                 

您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得點波 推薦 哦!!!(點選右邊的小球即可!(^__^) 嘻嘻……)