目录
什么是@AfterSuite annotation?
代码示例
是时候来点头脑风暴了
我们可以在一个类中使用多个@AfterSuite注释方法吗?
@AfterSuite放在超类上时如何工作?
TestNG是Java中广泛使用的测试框架,用于进行单元,功能和集成测试。它包括几个注释,有助于管理测试生命周期和报告结果。@AfterSuite就是这样一个注释的例子,它使您能够在TestNG套件中的所有测试完成后执行特定的操作。
在TestNG中,与@BeforeXXX和@AfterXXX注释相比,@AfterSuite注释具有最低的优先级。
什么是@AfterSuite annotation?
@AfterSuite是TestNG注释套件的一部分,用于在套件中的所有测试运行后执行清理任务。对于关闭数据库连接、删除临时文件和生成测试报告等任务,它是一个有用的注释。@AfterSuite注释仅在套件中的所有测试完成后执行一次。
代码示例
正如我们所知,@AfterSuite注释的执行发生在所有测试执行之后。下面提到的TestNG.xml文件指定了@AfterSuite注释的确切执行点,以便更清楚地说明。
<!-- @BeforeSuite annoated method will execute here --> <suite name="codekru"> <test name="codekru"> <classes> <class name="Test.CodekruTestFirst" /> <class name="Test.CodekruTestSecond" /> </classes> </test> </suite> <!-- @AfterSuite annoated method will execute here -->
因此,@AfterSuite注释的方法将在suite标记之后执行。
让我们使用两个类(CodekruTestOne和CodekruTestSecond),我们将在CodekruTestSecond类中定义@AfterSuite注释方法。
CodekruTestOne.java
package Test; import org.testng.Assert; import org.testng.annotations.Test; public class CodekruTestFirst { @Test public void test() { System.out.println("Executing the test in CodekruTestFirst class"); Assert.assertTrue(true); } }
CodekruTestSecond.java
package Test; import org.testng.Assert; import org.testng.annotations.AfterSuite; import org.testng.annotations.Test; public class CodekruTestSecond { @AfterSuite public void afterSuite() { System.out.println("In afterSuite method"); } @Test public void test() { System.out.println("Executing the test in CodekruTestSecond class"); Assert.assertTrue(true); } }
现在,我们将运行下面的testng.xml文件,看看会发生什么
<suite name="codekru"> <test name="codekru"> <classes> <class name="Test.CodekruTestSecond" /> <class name="Test.CodekruTestFirst" /> </classes> </test> </suite>
产出-
Executing the test in CodekruTestSecond class Executing the test in CodekruTestFirst class In afterSuite method =============================================== codekru Total tests run: 2, Failures: 0, Skips: 0 ===============================================
我们可以看到afterSuite方法在套件中的所有测试之后运行。
是时候来点头脑风暴了
我们可以在一个类中使用多个@AfterSuite注释方法吗?
答案是肯定的。我们可以在一个类中使用多个@AfterSuite注释的方法,然后所有这些方法都会在该套件中的所有测试之后运行。让我们看一个例子。
package Test; import org.testng.Assert; import org.testng.annotations.AfterSuite; import org.testng.annotations.Test; public class CodekruTestSecond { @AfterSuite public void afterSuite1() { System.out.println("In afterSuite1 method"); } @AfterSuite public void afterSuite2() { System.out.println("In afterSuite2 method"); } @Test public void test() { System.out.println("Executing the test in CodekruTestSecond class"); Assert.assertTrue(true); } }
现在运行下面的XML文件。
<suite name="codekru"> <test name="codekruTest"> <classes> <class name="Test.CodekruTestSecond" /> </classes> </test> </suite> <!-- @AfterSuite annoated method will execute here -->
产出-
Executing the test in CodekruTestSecond class In afterSuite1 method In afterSuite2 method =============================================== codekru Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
@AfterSuite放在超类上时如何工作?
让我们看一个例子。
package Test; import org.testng.Assert; import org.testng.annotations.AfterSuite; import org.testng.annotations.Test; class CodekruTest { @AfterSuite public void afterSuiteMethod() { System.out.println("afterSuite method called"); } } public class CodekruTestSubclass extends CodekruTest { @Test() public void test() { System.out.println("Executing the subclass test"); Assert.assertTrue(true); } }
现在,我们将在testng.xml下面运行,看看会发生什么。
<suite name="codekru"> <test name="codekru"> <classes> <class name="Test.CodekruTestSubclass" /> </classes> </test> </suite>
输出-
Executing the subclass test afterSuite method called =============================================== codekru Total tests run: 1, Failures: 0, Skips: 0
因此,afterSuiteMethod即使被放置在超类上也可以运行,因为子类继承了所有方法。但是如果我们将afterSuiteMethod设置为私有,afterSuiteMethod方法将不会运行,因为私有方法不能被子类继承。