web-dev-qa-db-ja.com

複数のクラスを持つTestNGの優先度

私は次の問題に直面しています:priority属性を持つ@Testsを含む2つのクラスを作成しました:

@Test( priority = 1 )
public void testA1() {
    System.out.println("testA1");
}

@Test( priority = 2 )
public void testA2() {
    System.out.println("testA2");
}

@Test( priority = 3 )
public void testA3() {
    System.out.println("testA3");
}

...および...

@Test( priority = 1 )
public void testB1() {
    System.out.println("testB1");
}

@Test( priority = 2 )
public void testB2() {
    System.out.println("testB2");
}

@Test( priority = 3 )
public void testB3() {
    System.out.println("testB3");
}

Testng.xmlで両方のクラスを1つのテストの下に配置しますが、テストを実行すると、両方のクラスの優先度に基づいて@Testsが順序付けられます。

testA1
testB1
testA2
testB2
testA3
testB3

私は次の結果を期待しています:

testA1
testA2
testA3
testB1
testB2
testB3

私の質問は、両方のクラスに基づいて@Testsを注文し、同時に1つのクラスからのみ@Testsを実行することを防ぐにはどうすればよいですか?

14
peetya

スイートxmlでgroup-by-instances = "true"を使用します

サンプル、TestClass1およびTestClass2の内容があなたのものと同じ

<suite thread-count="2" verbose="10" name="testSuite" parallel="tests">
<test verbose="2" name="MytestCase" group-by-instances="true">
    <classes>
        <class name="com.crazytests.dataproviderissue.TestClass1" />
        <class name="com.crazytests.dataproviderissue.TestClass2" />
    </classes>
</test>
</suite> 

出力が得られます

testA1

testA2

testA3

testB1

testB2

testB3

17
Sachin Francis

各クラスの上部に@Test(testName="test1") / @Test(testName="test2")を指定するだけで、クラスごとに優先度が自動的にグループ化されます。もちろん、既存の注釈を保持します。

1
Marinos An

最も正しい方法は、dependsOnMethodsを使用することです。優先度レベルはテストに対してグローバルです(@Testアノテーションが付けられたテストメソッドと混同しないでください)。言い換えると、testngがtest(<test>タグから)を実行すると、メソッドは優先度ごとにグループ化されてから実行されます。あなたの場合、testA1とtestB1の両方がpriority = 1であるため、最初に実行されます。

1

bテストの優先度をこのように変更する必要があります

    @Test( priority = 4 )
    public void testB1() {
        System.out.println("testB1");
    }

    @Test( priority = 5 )
    public void testB2() {
        System.out.println("testB2");
    }

    @Test( priority = 6 )
    public void testB3() {
        System.out.println("testB3");
    }

xMLは優先順位として実行されるため、変更はありません

0

私の場合、クラスをtestng.xmlファイルの異なるテストに分離し、以前のバージョンと同じように優先順位が機能しました。

<suite name="Suite1" verbose="1">
<test name="TVS_AUTO_TESTS 1">
    <classes>
        <class name="TVS_auto_tests.CheckLoginTests"/>
    </classes>
</test>
<test name="TVS_AUTO_TESTS 2">
    <classes>
        <class name="TVS_auto_tests.PageNavigationTests"/>
    </classes>
</test>
0
rweris