TestNG-グループテスト

グループテストは、JUnitフレームワークには存在しないTestNGの新しい革新的な機能です。これにより、メソッドを適切な部分にディスパッチし、テストメソッドの高度なグループ化を実行できます。

グループに属するメソッドを宣言できるだけでなく、他のグループを含むグループを指定することもできます。次に、TestNGを呼び出して、特定のグループのセット(または正規表現)を含め、別のセットを除外するように要求できます。

グループテストは、テストのパーティション分割方法に最大限の柔軟性を提供し、2つの異なるテストセットを連続して実行する場合は、何も再コンパイルする必要はありません。

グループは、<groups>タグを使用してtestng.xmlファイルで指定されます。<test>または<suite>タグの下にあります。<suite>タグで指定されたグループは、その下にあるすべての<test>タグに適用されます。

それでは、例を見て、グループテストがどのように機能するかを見てみましょう。

クラスを作成する

  • テストするJavaクラスを作成します。たとえば、 MessageUtil.javaC:\> TestNG_WORKSPACE

/*
* This class prints the given message on console.
*/
public class MessageUtil {
   private String message;

   // Constructor
   // @param message to be printed
   public MessageUtil(String message) {
      this.message = message;
   }

   // prints the message
   public String printMessage() {
      System.out.println(message);
      return message;
   }

   // add "tutorialspoint" to the message
   public String salutationMessage() {
      message = "tutorialspoint" + message;
      System.out.println(message);
      return message;
   }

   // add "www." to the message
   public String exitMessage() {
      message = "www." + message;
      System.out.println(message);
      return message;
   }
}

テストケースクラスを作成する

  • GroupTestExample.javaなどのJavaテストクラスを作成します。

  • テストメソッドtestPrintMessage()とtestSalutationMessage()をテストクラスに追加します。

  • テスト方法を2つのカテゴリにグループ化します-

    • Check-in tests (checkintest)−これらのテストは、新しいコードを送信する前に実行する必要があります。通常は高速で、基本的な機能が壊れていないことを確認する必要があります。

    • Functional tests (functest) −これらのテストは、ソフトウェアのすべての機能をカバーし、少なくとも1日に1回実行する必要がありますが、理想的には継続的に実行する必要があります。

名前の付いたJavaクラスファイルを作成します GroupTestExample.javaC:\>TestNG_WORKSPACE

import org.testng.Assert;
import org.testng.annotations.Test;

public class GroupTestExample {
   String message = ".com";
   MessageUtil messageUtil = new MessageUtil(message);

   @Test(groups = { "functest", "checkintest" })
   
   public void testPrintMessage() {
      System.out.println("Inside testPrintMessage()");
      message = ".com";
      Assert.assertEquals(message, messageUtil.printMessage());
   }

   @Test(groups = { "checkintest" })
   
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "tutorialspoint" + ".com";
      Assert.assertEquals(message, messageUtil.salutationMessage());
   }

   @Test(groups = { "functest" })
   
   public void testingExitMessage() {
      System.out.println("Inside testExitMessage()");
      message = "www." + "tutorialspoint"+".com";
      Assert.assertEquals(message, messageUtil.exitMessage());
   }  
}

testng.xmlを作成します

でtestng.xmlを作成します C:\> TestNG_WORKSPACE、テストケースを実行します。ここでは、グループfunctestに属するテストのみを実行します。

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
   
      <groups>
         <run>
            <include name = "functest" />
         </run>
      </groups>

      <classes>
         <class name = "GroupTestExample" />
      </classes>
   
   </test>
</suite>

javacを使用してMessageUtil、テストケースクラスをコンパイルします。

C:\TestNG_WORKSPACE>javac MessageUtil.java GroupTestExample.java

ここで、testng.xmlを実行します。これは、グループfunctestに属しているため、メソッドtestPrintMessage()のみを実行します。

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

出力を確認します。testPrintMessage()メソッドのみが実行されます。

Inside testPrintMessage()
.com
Inside testExitMessage()
www..com

===============================================
Suite1
Total tests run: 2, Failures: 1, Skips: 0
===============================================

グループのグループ

グループには他のグループを含めることもできます。これらのグループはMetaGroups。たとえば、checkintestfunctestを含むすべてのグループを定義したい場合があります。testng.xmlファイルを次のように変更しましょう-

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
   <test name = "test1">
   
      <groups>
      
         <define name = "all">
            <include name = "functest"/>
            <include name = "checkintest"/>
         </define>
         
         <run>
            <include name = "all"/>
         </run>
         
      </groups>
      
      <classes>
         <class name = "GroupTestExample" />
      </classes>
      
   </test>
</suite>

上記のtestng.xmlを実行すると、3つのテストすべてが実行され、次の結果が得られます。

Inside testPrintMessage()
.com
Inside testSalutationMessage()
tutorialspoint.com
Inside testExitMessage()
www.tutorialspoint.com

===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================

除外グループ

以下に示すように、<exclude>タグを使用してグループを無視できます-

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
   <test name = "test1">

      <groups>
         <define name = "all">
            <exclude name = "functest"/>
            <include name = "checkintest"/>
         </define>

         <run>
            <include name = "all"/>
         </run>
      </groups>

      <classes>
         <class name = "GroupTestExample" />
      </classes>

   </test>
</suite>