Разница между BeforeClass и BeforeTest в TestNG
As we know from official TestNG documentation:
@BeforeClass:
Аннотированный метод будет запущен до того, как будет запущен первый метод тестирования в текущем классе.
@BeforeTest:
Аннотированный метод будет запущен до того, как будет запущен любой тестовый метод, принадлежащий классам внутри тега <test>
.
Оба вышеупомянутых аннотации для тестирования выглядят одинаково по функциональности.
Однако в этой функции должно быть уникальное различие.
Может ли кто-нибудь подчеркнуть это?
Ответы
Ответ 1
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
Надеюсь, поможет :)
Ответ 2
@BeforeMethod - выполняется перед каждым тестовым методом, например. Метод, который использует аннотацию @Test
@BeforeTest - выполняется только перед тегом, указанным в файле testng.xml.
В двух словах, @BeforeMethod работает над тестом, определенным в Java-классах.
И @BeforeTest работает над тестом, определенным в XML файлах testng.xml i.e.
Ответ 3
если вы переходите из другого класса, это результаты:
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
Ответ 4
Мое мнение:
@BeforeClass: аннотированный метод будет запущен до того, как будет запущен первый метод тестирования в текущем классе
@BeforeTest: аннотированный метод будет запущен до запуска любого метода тестирования в текущем пакете
Ответ 5
Прежде чем объяснить разницу, сначала приведем несколько терминов тестирования
Test suite
- состоит из одного или нескольких тегов теста.
Test tag
- состоит из одного или нескольких тестовых классов.
Test class
- состоит из одного или нескольких методов.
за экзамен
<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
: он будет вызываться только один раз перед любым тестовым тегом, независимо от того, сколько тестовых классов внутри этого тега или сколько методов @Test
, он будет вызываться только один раз для каждого тестового тега в предыдущем примере XML @BeforeTest
будет вызываться дважды, один раз перед TestTag1
второй раз перед TestTag2
чтобы его можно было использовать для инициализации общих объектов между различными классами тестов внутри одного тестового тега.
@BeforeClass
: он будет вызываться только один раз перед любым тестовым классом, независимо от того, сколько методов, @Test
внутри этого тестового класса, он будет вызываться только один раз для каждого тестового класса, в предыдущем примере XML
@BeforeClass
будет TestClass1
три раза, один раз перед TestClass1
второй перед TestClass2
и третий раз перед TestClass3
чтобы его можно было использовать для инициализации общих объектов между различными методами тестирования внутри одного класса тестирования.
@BeforeSuite
будет вызван один раз за костюм suit1
порядок звонков будет следующим
@BeforeSuite
@BeforeTest
@BeforeClass
@BeforeMethod
@Test
Чтобы узнать больше о @BeforeMethod
, пожалуйста, обратитесь к ответу fooobar.com/info/15852076/...