As we know from official TestNG documentation:
@BeforeClass:
La méthode annotée sera exécutée avant que la première méthode de test de la classe en cours soit appelée.
@BeforeTest:
La méthode annotée sera exécutée avant toute méthode de test appartenant aux classes de la balise <test>
.
Les deux annotations de test ci-dessus ont une fonctionnalité similaire. Cependant, il devrait y avoir une différence unique dans la fonctionnalité. Quelqu'un peut-il s'il vous plaît souligner cela?
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");
}
}
Si vous avez la suite de tests suivante ...
<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>
... alors la sortie [en retrait pour faciliter la lecture] sera
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
J'espère que ça aide :)
@BeforeMethod - s'exécute avant chaque méthode de test, par exemple. La méthode qui utilise l'annotation @Test
@BeforeTest - s'exécute uniquement avant la balise donnée dans le fichier testng.xml.
En bref, @BeforeMethod fonctionne sur test défini dans les classes Java . Et @BeforeTest fonctionne sur test défini dans testng.xml i.e fichiers XML.
Mes opinions:
@BeforeClass: la méthode annotée sera exécutée avant que la première méthode de test dans la classe en cours soit invoquée
@BeforeTest: la méthode annotée sera exécutée avant toute méthode de test dans la suite actuelle est exécuté
si vous prolongez d'une autre classe ce sont les résultats:
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