As we know from official TestNG documentation:
@BeforeClass:
注釈付きメソッドは、現在のクラスの最初のテストメソッドが呼び出される前に実行されます。
@BeforeTest:
注釈付きメソッドは、<test>
タグ内のクラスに属するテストメソッドが実行される前に実行されます。
上記のtestngアノテーションは両方とも機能的に似ています。ただし、機能には独自の違いがあるはずです。誰もこれを強調してもらえますか?
SeleniumAbstractTest.class
public abstract class SeleniumAbstractTest {
@BeforeSuite
public void beforeSuite() {
System.out.println("BeforeSuite");
}
@BeforeTest
public void beforeTest() {
System.out.println("BeforeTest");
}
@BeforeClass
public void beforeClass() {
System.out.println("BeforeClass");
}
@BeforeMethod
public void beforeMethod() {
System.out.println("BeforeMethod");
}
@AfterMethod
public void afterMethod() {
System.out.println("AfterMethod");
}
@AfterClass
public void afterClass() {
System.out.println("AfterClass");
}
@AfterTest
public void afterTest() {
System.out.println("AfterTest");
}
@AfterSuite
public void afterSuite() {
System.out.println("AfterSuite");
}
}
MyTestClass1.class
public class MyTestClass1 extends SeleniumAbstractTest {
@Test
public void myTestMethod1() {
System.out.println("myTestMethod1");
}
@Test
public void myTestMethod2() {
System.out.println("myTestMethod2");
}
}
MyTestClass2.class
public class MyTestClass2 extends SeleniumAbstractTest {
@Test
public void myTestMethod3() {
System.out.println("myTestMethod3");
}
@Test
public void myTestMethod4() {
System.out.println("myTestMethod4");
}
}
次のテストスイートがある場合...
<suite name="Suite">
<test name="Test1" >
<classes>
<class name="MyTestClass2" />
</classes>
</test>
<test name="Test2">
<classes>
<class name="MyTestClass1"/>
<class name="MyTestClass2"/>
</classes>
</test>
</suite>
...次に、[読みやすいようにインデントされた]出力が
BeforeSuite
' BeforeTest
' ' BeforeClass
' ' ' BeforeMethod
' ' ' ' myTestMethod3
' ' ' AfterMethod
' ' ' BeforeMethod
' ' ' ' myTestMethod4
' ' ' AfterMethod
' ' AfterClass
' AfterTest
' BeforeTest
' ' BeforeClass
' ' ' BeforeMethod
' ' ' ' myTestMethod1
' ' ' AfterMethod
' ' ' BeforeMethod
' ' ' ' myTestMethod2
' ' ' AfterMethod
' ' AfterClass
' ' BeforeClass
' ' ' BeforeMethod
' ' ' ' myTestMethod3
' ' ' AfterMethod
' ' ' BeforeMethod
' ' ' ' myTestMethod4
' ' ' AfterMethod
' ' AfterClass
' AfterTest
AfterSuite
それが役に立てば幸い :)
@BeforeMethod-すべてのテストメソッドの前に実行されます。 @Testアノテーションを使用するメソッド
@BeforeTest-testng.xmlファイルで指定されたタグの前でのみ実行されます。
簡単に言えば、@ BeforeMethodは、Javaクラスで定義されたテストで動作します。@ BeforeTestは、testng.xmlで定義されたテスト、つまりXMLファイルで動作します。
私の意見:
@BeforeClass:注釈付きメソッドは、最初のテストメソッド現在のクラス内が呼び出される前に実行されます
@BeforeTest:注釈付きメソッドは、テストメソッド現在のスイート内が実行される前に実行されます
別のクラスから拡張する場合、結果は次のとおりです。
parentTest - BeforeTest- parent
testClass1 - BeforeTest- test1
parentTest - BeforeClass- parent
testClass1 - BeforeClass- test1
parentTest - BeforeMethod- parent
testClass1 - BeforeMethod- test1
testClass1 - myTestMethod1
testClass1 - AfterMethod- test1
parentTest - AfterMethod- parent
parentTest - BeforeMethod- parent
testClass1 - BeforeMethod- test1
testClass1 - myTestMethod2
testClass1 - AfterMethod- test1
parentTest - AfterMethod- parent
testClass1 - AfterClass- test1
parentTest - AfterClass- parent
testClass1 - AfterTest- test1
parentTest – AfterTest- parent
違いを説明する前に、まずこれはいくつかのテスト用語です
_Test suite
_ – 1つ以上のテストタグで構成されます。
_Test tag
_-1つ以上のテストクラスで構成されます。
_Test class
_ – 1つ以上のメソッドで構成されます。
例として
_<suite name="suit1">
<test name="TestTag1">
<classes>
<class name="TestClass1"/>
</classes>
</test>
<test name="TestTag2">
<classes>
<class name="TestClass2"/>
<class name="TestClass3"/>
</classes>
</test>
</suite>
_
_@BeforeTest
_:テストタグの前に1回だけ呼び出されます。タグ内のテストクラスの数や_@Test
_アノテーションが付けられたメソッドの数に関係なく、テストタグごとに1回だけ呼び出されます。 、前のXMLの例では_@BeforeTest
_が2回呼び出されます。1回はbefore _TestTag1
_の前に、2回目は_TestTag2
_の前に呼び出されます。
_@BeforeClass
_:テストの前に1回だけ呼び出されますclass、この中に_@Test
_アノテーションが付けられたメソッドの数に関係なくテストクラスは、各テストクラスに対して1回だけ呼び出されます。前のXML
の例では_@BeforeClass
_が3回呼び出され、1回は_TestClass1
_の前に2回_TestClass2
_および_TestClass3
_の前の3回目なので、1つのテストクラス内の異なるテストメソッド間の共通オブジェクトを初期化するために使用できます。
_@BeforeSuite
_スーツに対して_suit1
_が1回呼び出されます
呼び出しの順序は次のようになります
_@BeforeSuite
@BeforeTest
@BeforeClass
@BeforeMethod
@Test
_
_@BeforeMethod
_の詳細については、回答を参照してください https://stackoverflow.com/a/52331616/19739