2016-04-04 14 views
0

統合テストではTestNGを使用しています。私たちは最近jUnitから変換して、org.junit.rules.TestRuleを使用して、失敗したとカウントする前に自動的に各テストを3回再試行しました。これにより、テストケースが時折のみ失敗するたびに誤検出がなくなりました。すべてのテストを自動的に3回再試行してから失敗します。

TestNGへの変換では、この再試行ルールが見落とされました。実際に誤検出である「失敗」というテストケースが多数ありました。

私はどのように自動的に再実行TestNGのテストケースの上のいくつかの記事が見つかりました:

https://jepombar.wordpress.com/2015/02/16/testng-adding-a-retryanalyzer-to-all-you-tests/

http://mylearnings.net/11.html

それの要点は、あなたが、個々の@TestについてretryAnalizerを指定することができますです-annotatedテストケース。私は自分のアナライザをセットアップし、それをテストケースに適用しました。しかし、すべての単一のテストケースにリトライアナライザを手動で適用することは良い解決策ではありません。の場合、すべてのテストケースがこれを行う必要があります。 jepombar.wordpress.comの記事では、クラス内のすべてのテストに適用する方法を示していますが、何らかの理由で書かれているようには動作しません。

私は、次のIAnnotationTransformerを作った:

public class RetryListener implements IAnnotationTransformer { 

    @Override 
    public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) { 
     IRetryAnalyzer retry = annotation.getRetryAnalyzer(); 
     if (retry == null) { 
      annotation.setRetryAnalyzer(RetryRule.class); // my TestNG RetryAnalizer implementation 
     } 
    } 

} 

そして、私はこのようなクラスに適用します:

@Listeners(RetryListener.class) 
public class FooTest extends SeleniumMockedTest { 
    ... 
} 

これは動作しません。 RetryListener.transform()のコードは決して実行されないので、クラスのテストケースのいずれにもRetryRuleが追加されることはありません。

これを動作させるにはどうすればよいですか?

私の本物の質問:実際に失敗したカウントが失敗する前に、統合テストスイートのすべてのテストケースを自動的に3回試してみるにはどうすればよいですか?

答えて

0

@Listenersを使用しても動作させることはできませんが、コマンドラインを使用して動作させることができます。例えば:

java org.testng.TestNG -listener MyTransformer testng.xml 

それは@Listenersを使用して動作していないが、バグかもしれません。問題hereを報告できます。

+1

ああ、言わないでください!プログラミングツールにはバグはありません。 ;) –

+0

TestNGはクラスを一度しか読んでいないので、すべてのリスナーが@Listenersで動作するわけではありません。 IAnnotationTransformerは、クラスの読み込み時にトリガされるはずなので、鶏卵問題があります。 – juherr

関連する問題