TestNG - XML配置文件說明

一、前言

  前面講的大多都是以測試腳本爲基礎來運行的,少部分是以xml運行,這裏以xml來講解下。講之前先說下TestNG的運行方式其實有多種

  • 以編程方式運行TestNG
  • XML運行TestNG

二、以編程方式運行 TestNG

1、按用例類運行

package com.tech.design;

import org.testng.TestListenerAdapter;
import org.testng.TestNG;

public class test {
    public static void main(String[] args) {
        /*
        此示例創建一個TestNG對象並運行測試類Run2。它還添加了一個TestListener。
        可以使用適配器類org.testng.TestListenerAdapter或自己實現org.testng.ITestListener。
        此接口包含各種回調方法,可讓您跟蹤測試何時開始、成功、失敗等...
         */
        TestListenerAdapter tla = new TestListenerAdapter();
        TestNG testng = new TestNG();
        testng.setTestClasses(new Class[] { Case.class });//按類運行
        testng.addListener(tla);
        testng.run();

    }
}

2、按Group運行

package com.tech.design;

import org.testng.TestListenerAdapter;
import org.testng.TestNG;

public class test {
    public static void main(String[] args) {
        /*
        此示例創建一個TestNG對象並運行測試類Run2。它還添加了一個TestListener。
        可以使用適配器類org.testng.TestListenerAdapter或自己實現org.testng.ITestListener。
        此接口包含各種回調方法,可讓您跟蹤測試何時開始、成功、失敗等...
         */
        TestListenerAdapter tla = new TestListenerAdapter();
        TestNG testng = new TestNG();
        testng.setTestClasses(new Class[] { Case.class });//按類運行
        /*
         設定group,只運行其中的幾個group,只設置group名稱是無法運行的,必須先加載用例,
        可以是class也可以是xml,另外根據源碼可知group名稱是可以添加多個的,以,分隔即可;
        如果只是某些group不想運行,則可以用方法testNG.setExcludedGroups(groups);
        同理這個groups同樣是可以包含一個或者多個group名稱,以,分隔;
         */
        testng.setGroups("group1");//按分組運行
        testng.addListener(tla);
        testng.run();

    }
}

三、XML配置文件說明

1、這是一個示例testng.xml文件

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
  
<suite name="Suite1" verbose="1" >
  <test name="Nopackage" >
    <classes>
       <class name="NoPackageTest" />
    </classes>
  </test>
 
  <test name="Regression1">
    <classes>
      <class name="test.sample.ParameterSample"/>
      <class name="test.sample.ParameterTest"/>
    </classes>
  </test>
</suite>

2、可以指定包名而不是類名

  在此示例中,TestNG 將查看包test.sample中的所有類, 並且將僅保留具有 TestNG 註釋的類。

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
 
<suite name="Suite1" verbose="1" >
  <test name="Regression1"   >
    <packages>
      <package name="test.sample" />
   </packages>
 </test>
</suite>

3、可以指定要包含和排除的組和方法:

<test name="Regression1">
  <groups>
    <run>
      <exclude name="brokenTests"  />
      <include name="checkinTests"  />
    </run>
  </groups>
  
  <classes>
    <class name="test.IndividualMethodsTest">
      <methods>
        <include name="testMethod" />
      </methods>
    </class>
  </classes>
</test>

4、可以打亂執行順序

  默認情況下,TestNG 將按照在 XML 文件中找到的順序運行測試。如果想此文件中列出的類和方法以不可預測的順序運行,可以將保留順序 屬性設置爲false 

<test name="Regression1" preserve-order="false">
  <classes>
 
    <class name="test.Test1">
      <methods>
        <include name="m1" />
        <include name="m2" />
      </methods>
    </class>
 
    <class name="test.Test2" />
 
  </classes>
</test>

5、講解XML各個標籤

1)suite標籤

  testNG.xml文件的最外層標籤即suite,即測試套件,其下可以有多個<test>和<groups>,其有幾個可以添加的屬性在第十節的分suite測試中有做說明,這裏做下詳細說明:

  (1)、name屬性:此屬性屬於必須要有的,值可以自行設定,此名字會在testNG的報告中看到;

  (2)、verbose屬性:此屬性爲指定testNG報告的詳細程度,從0開始到10,其中10爲最詳細,默認生成的xml此屬性值爲1;

  (3)、parallel屬性:此屬性是指代運行方式,默認爲none,即串行運行方式;並行執行方法包括如下幾種,下面做分別說明:

  <suite name="Suite1" parallel="methods" verbose="1" >
  • methods:方法層級,若爲此值,則該suite下所有的測試方法都將進行多線程,即測試用例級別的多線程。如果用例之間有依賴,則執行順序會按照設定的依賴來運行;
  • tests:TestNG將在同一線程中運行相同的<Test>標籤中的所有方法,每個<test>標籤都將處於一個單獨的線程中,這允許您將不是線程安全的所有類分組在同一個<test>中,並保證它們都將在同一個線程中運行,同時利用TestNG使用盡可能多的線程運行測試。
  • classes:類級別併發,即TestNG會將該suite下每個class都將在單獨的線程中運行,同一個class下的所有用例都將在同一個線程中運行;
  • instances:實例級別,即TestNG將在同一線程中運行同一實例中的所有方法,兩個不同實例上的兩個方法將在不同的線程中運行。

  (4)、thread-count屬性:此屬性用於指定線程數,按照需要輸入,需要parallel參數非none時纔可以添加;

  (5)、annotations屬性:此項爲註解的級別,爲methods級別和class級別,一般不用設置;

  (6)、time-out屬性:此屬性用於指定超時時間,該suite下所有的用例的超時時間;

  (7)、group-by-instances屬性:此項用於那些有依賴的方法,且被依賴的對象有多個重載對象,因爲如果是依賴方法,且該方法有多個重載方法,則默認是會將所有重載方法都跑完再運行被依賴方法,但有時候我們不想這樣,則將此項設置爲true即可;

  (8)、preserve-order屬性:值可輸入true或者false,如果爲true,則用例執行會按照在xml中的順序執行,否則會亂序執行,不添加此屬性的話默認是按順序執行的;

2)test標籤

  此標籤無特別意義,其下可以包括多個標籤,如groupsclasses等,其可以附帶的屬性有如下幾種,下面對各個屬性做單獨說明:

  (1)、name屬性
  此屬性屬於必須要有的,值可以自行設定,此名字會在testNG的報告中看到;

  (2)、verbose屬性
  此屬性爲指定testNG報告的詳細程度,從0開始到10,其中10爲最詳細,默認生成的xml此屬性值爲1

  (3)、threadPoolSize屬性
  該屬性指定此test的線程池大小,爲數字;

  (4)、invocationCount屬性
  該屬性指定此test的運行次數,爲數字,範例如上面的代碼所示;

  (5)、time-out屬性
  此屬性用於指定超時時間,該suite下所有的用例的超時時間,範例如上面的代碼所示;

  (6)、group-by-instances屬性
  此項用於那些有依賴的方法,且被依賴的對象有多個重載對象,因爲如果是依賴方法,且該方法有多個重載方法,則默認是會將所有重載方法都跑完再運行被依賴方法,但有時候我們不想這樣,則將此項設置爲true即可;

  (7)、preserve-order屬性
  值可輸入true或者false,如果爲true,則用例執行會按照在xml中的順序執行,否則會亂序執行,不添加此屬性的話默認是按順序執行的;

3)group標籤

  此標籤必然是在<test>標籤下的,用於標識那些組會被用於測試或者被排除在測試之外,其同級必然要包含一個<classes>標籤或者<pakages>標籤,用於指定groups來自於哪些包或者類;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章