【譯】TestNG官方文檔中文版(05)—— 測試方法、測試類別和測試組(5.1-5.4)

來源:互聯網
上載者:User
5 - 測試方法、測試類別和測試組5.1 - 測試組

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

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

  • 檢查性測試(Check-in test):這些測試在你提交新代碼之前就會運行。它們一般都是很快進行的,並且保證沒有哪個基本的功能是不好使的。
  • 功能性測試(Functional test):這些測試涵蓋你的軟體中所有的功能,並且至少每天運行一次,不過你也可能希望他們持續的運行。

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

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()。

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

@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使用的是 Regex,而不是 萬用字元。注意這二者的區別(例如,"anything" 是匹配於 ".*" -- 點和星號 -- 而不是星號 "*").

方法組

也可以單獨排除和包含若干方法:

<test name="Test1">
  <classes>
    <class name="example1.Test1">
      <methods>
        <include name=".*enabledTestMethod.*"/>
        <exclude name=".*brokenTestMethod.*"/>
      </methods>
     </class>
  </classes>
</test>

這樣就可以不用編譯而處理任何不需要的方法了,但是我不推薦過分的使用這個技巧,因為如果你要重構你的代碼,那麼這有可能讓你的測試架構出問題(在標籤中使用的方法可能再也不會匹配你的方法名了)。

5.2 - 組中組

測試組也可以包含其他組。這樣的組叫做“元組”(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>
5.3 - 排除組

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

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

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

@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。

5.4 - 局部組

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

@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"組。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.