私は次の問題に直面しています: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を実行することを防ぐにはどうすればよいですか?
スイート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
各クラスの上部に@Test(testName="test1") / @Test(testName="test2")
を指定するだけで、クラスごとに優先度が自動的にグループ化されます。もちろん、既存の注釈を保持します。
最も正しい方法は、dependsOnMethodsを使用することです。優先度レベルはテストに対してグローバルです(@Testアノテーションが付けられたテストメソッドと混同しないでください)。言い換えると、testngがtest(<test>
タグから)を実行すると、メソッドは優先度ごとにグループ化されてから実行されます。あなたの場合、testA1とtestB1の両方がpriority = 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は優先順位として実行されるため、変更はありません
私の場合、クラスを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>