test example selenium selenium-webdriver testng

selenium - testng example



Diferencia entre BeforeClass y BeforeTest en TestNG (4)

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 tiene el siguiente Test Suite ...

<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>

... entonces la salida será

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

Espero eso ayude :)

As we know from official TestNG documentation:

@BeforeClass: el método anotado se ejecutará antes de que se invoque el primer método de prueba en la clase actual.

@BeforeTest: el método anotado se ejecutará antes de ejecutar cualquier método de prueba perteneciente a las clases dentro de la etiqueta <test> .

Ambas anotaciones de prueba anteriores se ven similares en funcionalidad. Sin embargo, debe haber una diferencia única en la característica. ¿Alguien puede enfatizar esto?


si se extiende desde otra clase, estos son los resultados:

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


Mis opiniones:

@BeforeClass: el método anotado se ejecutará antes de que se invoque el primer método de prueba en la clase actual

@BeforeTest: el método anotado se ejecutará antes de ejecutar cualquier método de prueba en el paquete actual


@BeforeMethod - se ejecuta antes de cada método de prueba, por ejemplo, el método que utiliza la anotación @Test

@BeforeTest: se ejecuta solo antes de la etiqueta proporcionada en el archivo testng.xml.

En pocas palabras, @BeforeMethod funciona en la prueba definida en las clases de Java. Y @BeforeTest funciona en la prueba definida en testng.xml, es decir, archivos XML.