(十三)TestNG学習の道—方法遮断器

3756 ワード

目次


(一)TestNG学習の道-HelloWorld入門(二)TestNG学習の道-注釈と属性の概要(三)TestNG学習の道-TestNG.xml/YAML(四)TestNG学習の道-注釈詳細の@Test(五)TestNG学習の道-注釈詳細のパラメータ化(六)TestNG学習の道-注釈詳細の@Factory(七)TestNG学習の道-注釈詳細の無視テスト(八)TestNG学習の道-注釈詳細の同時(九)TestNG学習の道-失敗テスト再走(十)TestNG学習の道-符号化実行TestNG(十一)TestNG学習の道-BeanShell高級用法(十二)TestNG学習の道-注釈変換器(十三)TestNG学習の道-方法遮断器(十四)TestNG学習の道-TestNGリスナー(十五)TestNG学習の道-注入(十六)TestNG学習に依存する道-テスト報告(十七)TestNG+Rest Assured+Allureに基づくインタフェース自動化テストフレームワーク

前言


TestNGが起動すると、すべてのテスト方法が2つに分類されます.
  • 特定の順序で実行されるテスト方法.依存関係(dependsOnMethods,dependsOnGroup)のある試験方法.
  • には、特定の実行順序のテスト方法はありません.第1のクラスを除いて、デフォルトではTestNGはclassでテスト方法をグループ化して実行しようとします.

  • TestNGは、ユーザが第2のクラスのテストメソッドに対してより大きな制御権を持つように、IMethodInterceptorインタフェースを提供し、このインタフェースを実現することによってテストメソッドの実行順序を制御することができる.
    public interface IMethodInterceptor {
      List intercept(List methods, ITestContext context);
    }
    

    interceptメソッドは、すべてのテストメソッドが分類された後、およびすべてのテストメソッドが実行される前に呼び出される.すべてのテストメソッドはintercept戻り値リストの順序で実行されます.したがって、ユーザはinterceptメソッドでリストを変更することができ、例えば、再ソート、さらにはテストメソッドを増加または減少させることができる.また、メソッドに渡されるITestContextパラメータは、ユーザーが特定の値(IAttributes.setAttribute(String,Object))をカスタマイズし、テストレポートに表示することができます.


    IMethodInterceptorインプリメンテーションクラスを作成し、grp 1グループのテスト例を実行します.
    import com.Test;
    import org.testng.IMethodInstance;
    import org.testng.IMethodInterceptor;
    import org.testng.ITestContext;
    import org.testng.ITestNGMethod;
    
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;
    
    public class MethodInterceptors implements IMethodInterceptor {
    
        public List intercept(List methodInstances, ITestContext context) {
            List result = new ArrayList();
    
            for (IMethodInstance methodInstance : methodInstances) {
                ITestNGMethod method = methodInstance.getMethod();
                Set groups = new HashSet();
    
                if (method.isTest()) { // @Test 
                    for (String group : method.getGroups()) {
                        groups.add(group);  // @Test 
                    }
                }
    
                if (groups.contains("grp1"))  // grp1 
                    result.add(methodInstance);
            }
    
            return result;
        }
    }
    
    

    テストクラスを作成し、Listener注記@Listeners(MethodInterceptors.class):
    import org.testng.annotations.AfterClass;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.Listeners;
    import org.testng.annotations.Test;
    
    @Listeners(MethodInterceptors.class)
    public class MethodInterceptorsTest {
        @BeforeClass
        public void bfClass(){
            System.out.println("BeforeClass");
        }
    
        @Test(groups = "grp1")
        public void test1(){
            System.out.println("test1");
        }
    
        @Test(groups = "grp2")
        public void test2(){
            System.out.println("test2");
        }
    
        @Test(groups = "grp2")
        public void test3(){
            System.out.println("test3");
        }
    
        @AfterClass
        public void afClass(){
            System.out.println("AfterClass");
        }
    }
    

    実行結果は次のとおりです.
    BeforeClass
    test1
    AfterClass
    
    ===============================================
    Default Suite
    Total tests run: 1, Failures: 0, Skips: 0
    ===============================================
    

    以上のように、MethodInterceptorsリスナーが機能しています.

    学習資料の拡張


    IMethodInterceptorリスナー入門レベル教育(IMethodInterceptorリスナーによる指定されたグループの実行)実戦TestNGリスナーIMethodInterceptor javadoc