Pra*_*ams 25 testng selenium selenium-webdriver
As we know from official TestNG documentation:
Run Code Online (Sandbox Code Playgroud)
@BeforeClass: 带注释的方法将在调用当前类中的第一个测试方法之前运行.
@BeforeTest:在运行属于<test>标记内的类的任何测试方法之前,将运行带注释的方法.
上述两个testng注释在功能上看起来都相似.但是,该功能应该有一个独特的区别.有人可以强调一下吗?
pee*_*tya 103
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");
}
}
Run Code Online (Sandbox Code Playgroud)
MyTestClass1.class
public class MyTestClass1 extends SeleniumAbstractTest {
@Test
public void myTestMethod1() {
System.out.println("myTestMethod1");
}
@Test
public void myTestMethod2() {
System.out.println("myTestMethod2");
}
}
Run Code Online (Sandbox Code Playgroud)
MyTestClass2.class
public class MyTestClass2 extends SeleniumAbstractTest {
@Test
public void myTestMethod3() {
System.out.println("myTestMethod3");
}
@Test
public void myTestMethod4() {
System.out.println("myTestMethod4");
}
}
Run Code Online (Sandbox Code Playgroud)
如果您有以下测试套件......
<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>
Run Code Online (Sandbox Code Playgroud)
...然后输出[缩进以便于阅读]将是
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
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你 :)
小智 6
@BeforeMethod - 在每个测试方法之前执行,例如使用@Test注释的方法
@BeforeTest - 仅在testng.xml文件中给出的标记之前执行.
简而言之,@ ByMethod适用于Java类中定义的测试.@BeforeTest适用于testng.xml中定义的测试,即XML文件.
在解释区别之前,首先这是一些测试术语
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>
Run Code Online (Sandbox Code Playgroud)
@BeforeTest: 它只会在任何测试标签之前调用一次,无论该标签内有多少个测试类或用 注释了多少方法@Test,它只会为每个测试标签调用一次,在前面的 XML 示例@BeforeTest中将被调用两次,TestTag1在第二次之前一次,TestTag2 因此它可以用于初始化一个测试标签内不同测试类之间的公共对象。
@BeforeClass: 它只会在任何测试类之前调用一次,无论@Test这个测试类内部注释了多少方法,每个测试类只会调用一次,在前面的XML例子中@BeforeClass会调用三次,一次之前TestClass1之前第二次TestClass2和第三次之前,TestClass3因此它可以用于初始化一个测试类中不同测试方法之间的公共对象。
@BeforeSuite将被称为一次suit1诉讼
调用顺序如下
@BeforeSuite
@BeforeTest
@BeforeClass
@BeforeMethod
@Test
Run Code Online (Sandbox Code Playgroud)
要了解更多@BeforeMethod,请参考答案/sf/answers/3663213151/
| 归档时间: |
|
| 查看次数: |
59535 次 |
| 最近记录: |