目录
什么是@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 {@Testpublic 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 {@AfterSuitepublic void afterSuite() {System.out.println("In afterSuite method");}@Testpublic 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 {@AfterSuitepublic void afterSuite1() {System.out.println("In afterSuite1 method");}@AfterSuitepublic void afterSuite2() {System.out.println("In afterSuite2 method");}@Testpublic 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 {@AfterSuitepublic 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方法将不会运行,因为私有方法不能被子类继承。