2016-11-15 8 views
-1

私はグループのbeforeMethodを持っていて、別のグループを実行しますが、そのグループの中には、 beforeMethodのグループと同様に走っているので、私はそのテストがその前のメソッドを実行するようにしたい。だから、例えば:私はグループでのTestNG =補足を実行したときにメソッド*がグループを含むときに@BeforeMethodのtestNGアノテーションを実行する

@BeforeMethod(groups = "a") 
public void setupForGroupA() { 
... 
} 

@Test(groups = {"supplemental", "a"}) 
public void test() { 
... 
} 

は、私はまだbeforeMethodは、テスト前に実行したいが、グループではなく、「A」の補足であるので、それはしません。

これは、私がグループを間違って使用しなければならないような気がするので、私のワークフローについても説明したいと思います。

私はグループを使ってさまざまなテストのレイヤーを定義し、独自のアカウントを作成する必要があるのか​​、データにアクセスするためにプロキシーを使用する必要があるのか​​などを調べています。 、補足と回帰だけでなく、uniqueAccount、proxyなどのグループもあります。最初のグループには特別な設定は必要ありませんが、それらはmavenで実行するために渡すグループです。私は後者のグループに対して特別な設定が必要ですが、プロキシを必要とするテストだけを実行したり、一意のアカウントを必要とすることはありません。

答えて

1

グループ構成は実行時に評価されません。 testメソッドはsetupForGroupAメソッドを有効にしません。

この機能は、実行するメソッドを見つけるために使用されます。次の例によると :あなたはグループでこのクラスを実行する場合、それらはグループ「A」とマークされているので、

@BeforeMethod(groups = "a") 
public void setupForGroupA() { 
... 
} 

@Test(groups = {"supplemental", "a"}) 
public void test() { 
... 
} 

@Test(groups = {"supplemental"}) 
public void test2() { 
... 
} 

「」それはsetupForGroupAtestメソッドを実行します。

"supplemental"グループでこのクラスを実行すると、グループ "supplemental"でマークされているので、testtest2のメソッドが実行されます。

いくつかの方法で動作が異なるようです。そのため、異なるクラスのメソッドを分離し、グループごとにテストを選択するのではなく、クラスごとにテストを選択するのが良い方法です。

public class A { 
    @BeforeMethod 
    public void setupForGroupA() { 
    ... 
    } 

    @Test 
    public void test() { 
    ... 
    } 
} 

public class Supplemental { 
    @Test 
    public void test2() { 
    ... 
    } 
} 

実行クラスAはsetupForGroupAtestのみが実行されます。 実行中のクラス補足ではtest2のみが実行されます。 両方のクラスを実行するとすべてが実行されます。

あなたが何か他のもので、クラスとフィルタの両方を実行したい場合は、あなたがa method interceptorを使用して独自のロジックを実装することができます

@MyCustomAnnotation(tags = "a", "supplemental") 
public class A { 
    ... 
} 

@MyCustomAnnotation(tags = "supplemental") 
public class Supplemental { 
    ... 
} 

public class MyInterceptor implements IMethodInterceptor { 

    public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) { 
    // for each method, if its class contains the expected tag, then add it to the list 
    // expect tag can be passed by a system property or in a parameter from the suite file (available from ITestContext) 
    } 
} 
1

私が正しくなったら、毎回beforeメソッドを実行したいと思う。この場合、前のメソッドに対してalwaysRun = trueを設定することができます。

@BeforeMethod(alwaysRun = true, groups = "a") 
public void setupForGroupA() { 
... 
} 

このソリューションの1つです。

+0

ですから、例えばを少し拡大して、私は別のメソッドを追加することができるグループと「TEST2」補足ですが、グループ 'a'はありません。この場合、beforeメソッドは 'test'の前に実行し、 'test2'の前には実行しないことをお勧めします。 – RankWeis

関連する問題