Before explaining the difference, first this is some testing terminologies
Test suite
– Consists of one or more test tags.
Test tag
- Consists of one or more test classes.
Test class
– Consists of one or more methods.
for examble
<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
: It will be called Only one time before any test tag, no matter how many test classes inside that tag or how many method annotated with @Test
, it will be called only one time for each test tag,in the previous XML example @BeforeTest
will be called twice, one time beforeTestTag1
the second time before TestTag2
so it can be used to initialize common objects between different test classes inside one test tag.
@BeforeClass
: It will be called Only one time before any test class, no matter how many method annotated with @Test
inside this test class, it will be called only one time for each test class,in the previous XML
example @BeforeClass
will be called three times, one time beforeTestClass1
the second time before TestClass2
and the third time before TestClass3
so it can be used to initialize common objects between different test methods inside one test class.
@BeforeSuite
will be called once for the suit1
suit
the order of calls will be as follow
@BeforeSuite
@BeforeTest
@BeforeClass
@BeforeMethod
@Test
To know more about @BeforeMethod
, please refer to the answer https://stackoverflow.com/a/52331616/1973933