@BeforeClass: The annotated method will be run before the first test method in the current class is invoked.
@BeforeMethod: The annotated method will be run before each test method.
The annotations above will also be honored (inherited) when placed on a superclass of a TestNG class. This is useful for example to centralize test setup for multiple test classes in a common superclass.
In that case, TestNG guarantees that the "@Before" methods are executed in inheritance order (highest superclass first, then going down the inheritance chain), and the "@After" methods in reverse order (going up the inheritance chain).
8条答案
按热度按时间3b6akqbq1#
SeleniumAbstractTest.class
MyTestClass1.class
MyTestClass2.class
如果您有以下测试套件...
...则输出[缩进以便于阅读]将为
s5a0g9ez2#
@BeforeMethod -在每个测试方法之前执行,例如使用@Test注解的方法
@BeforeTest -仅在testng.xml文件中给定的标记之前执行。
简单地说,@BeforeMethod适用于Java类中定义的测试,而@BeforeTest适用于testng.xml(即XML文件)中定义的测试。
ktca8awb3#
在解释区别之前,首先是一些测试术语
Test suite
-由一个或多个测试标记组成。Test tag
-由一个或多个测试类组成。Test class
-由一个或多个方法组成。例如
@BeforeTest
:在任何测试标记之前,它只被调用一次,无论该标记中有多少个测试类,或者有多少个用@Test
注解的方法,对于每个测试标记,它只被调用一次,在前面的XML示例中,@BeforeTest
将被调用两次,一次在TestTag1
之前,第二次在TestTag2
之前,因此它可用于初始化一个测试标签内的不同测试类之间的公共对象。@BeforeClass
:在任何测试类之前只调用一次,无论这个测试类中有多少个用@Test
注解的方法,每个测试类只调用一次,在前面的XML
示例中@BeforeClass
将被调用三次,一次在TestClass1
之前,第二次在TestClass2
之前,第三次在TestClass3
之前,因此它可用于初始化一个测试类内不同测试方法之间的公共对象。将为
suit1
套件调用一次@BeforeSuite
呼叫顺序将如下
要了解有关
@BeforeMethod
的更多信息,请参阅答案https://stackoverflow.com/a/52331616/1973933lo8azlld4#
如果你从另一个类扩展,结果如下:
p1iqtdky5#
我的意见:
@BeforeClass:带注解的方法将在调用当前类 * 中的第一个测试方法 * 之前运行
@BeforeTest:带注解的方法将在运行当前套件 * 中的任何测试方法 * 之前运行
u1ehiz5o6#
这是TestNG层次结构:测试套件-〉测试-〉类-〉方法
@BeforeTest在test标记内的所有类中的所有方法执行之前执行一次。
@BeforeClass在它所定义的类中的所有方法执行之前执行一次。
我已经把这个脚本上传到我的GitHub个人资料上了。这里有一个相同的链接。如果你喜欢的话,请竖起大拇指。
Please have a look at github:
esbemjvw7#
要了解更多关于TestNG注解的信息:https://testng.org/doc/documentation-main.html#annotations
x4shl7ld8#
以上答案中缺少的是
@BeforeClass
和@BeforeTest
注解之间的用法差异。很明显,用
@BeforeClass
注解的方法(最常见的是setup方法)在类中编写的所有测试用例之前只执行一次,而用'@BeforeTest'注解的方法将在每个测试用例之前执行,而不管它们的计数/顺序/下划线逻辑如何。因此,
@BeforeClass
用于我们的方法具有长调用和长执行时间,并且这些调用的输出不会被任何测试用例改变的情况。例如,在setup方法中获取API响应,这将被所有测试使用。然而,@BeforeTest@
用于我们需要做一些清理工作,并且每个测试都需要一些新的资源来开始。例如,一个新创建的订单等。