2017-11-10 17 views
-3

私はJava/Selenium/TestNGを使って私の会社の内部アプリケーションの各ページに少しの機能を実行するナビゲーションテストスイートをまとめています。TestNGでTestクラスの最初のテストを実行する方法

私のNavigationTestsディレクトリにApplicationsITというテストクラスがあります。このクラスでは、10個の@Testsアノテーションがあるので、NavigationTestsスイート全体を実行するたびに10回のテストがすべて実行されます。

しかし、時間のために、私は各テストクラスで最初のテストを実行するしか方法はありませんか?

"(alwaysRun = false)"タグをつぶすようにしましたが、どうやって期待していたかは分かりませんでした。

私はこれがうまく構築された質問/投稿であることを知っていますので、できる限り明確にすることができます。

+1

これは実際にはTestNGの質問であり、Seleniumとは関係ありません。私は他人を混乱させないようにタグを削除します。 TestNGのドキュメントを見ましたか?私はこれを行うための少なくとも一つの方法を説明すると確信しています。 – JeffC

答えて

1

これを少なくとも2つの方法で動的に行うことができます。

  1. org.testng.IAnnotationTransformerの実装を使用する。ここでは基本的にインターフェイスorg.testng.IAnnotationTransformerを実装し、そのtransform()メソッド内で、入力するtestMethodjava.lang.reflect.Methodオブジェクトを調べて、その名前が実行または実行しないものと一致するかどうかを確認します。 JVM引数を使用して複数のメソッドを実行するかどうかを指定することができます。一致する場合は、基本的にannotation.setEnabled(false)でテスト方法を無効にします。annotationorg.testng.annotations.ITestAnnotationです。スイートXMLファイルの<listeners>タグを使用して、サービス・ローダー(または)を介してこのリスナーに配線する必要があります。一般的なリスナーの詳細については、私のブログ記事をご覧ください。here
  2. もう一つのオプションはbeanshellを利用することです。以下のサンプルは、beanshellの使い方を示しています。私のブログ投稿hereから、beanshellsの使い方の詳細を読むことができます。
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="47230879_Suite" parallel="false" verbose="2"> 
    <test name="47230879_test" verbose="2"> 
     <method-selectors> 
      <method-selector> 
       <script language="beanshell"> 
        <![CDATA[ 
         try { 
          input = System.getProperty("methods",""); 
          if (input.trim().isEmpty()) { 
           return true; 
          } 
          methods= input.split(","); 
          for (int i =0; i< methods.length; i++) { 
           if (method.getName().equals(methods[i])) { 
            return true; 
           } 
          } 
          return false; 
         } catch(e) { 
          print(e); 
         } 
        ]]> 
       </script> 
      </method-selector> 
     </method-selectors> 
     <classes> 
      <class name="com.rationaleemotions.stackoverflow.qn47230879.TestclassSample"/> 
     </classes> 
    </test> 
</suite> 

テストクラスは

package com.rationaleemotions.stackoverflow.qn47230879; 

import org.testng.annotations.Test; 

public class TestclassSample { 
    @Test 
    public void a() { 
     System.err.println("a()"); 
    } 

    @Test 
    public void b() { 
     System.err.println("b()"); 
    } 

    @Test 
    public void c() { 
     System.err.println("c()"); 
    } 

    @Test 
    public void d() { 
     System.err.println("d()"); 
    } 

    @Test 
    public void e() { 
     System.err.println("e()"); 
    } 
} 

あなたはJVM引数を経由して任意のメソッドを指定せずにスイートを実行する場合は、すべてのメソッドが実行されます下のように見えますが、あなたならば介して、メソッド名の束を指定しますJVM引数-Dmethods=a,b,c(例えば、の場合)は、それらのメソッドだけが実行されます。

関連する問題