目录
什么是@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方法将不会运行,因为私有方法不能被子类继承。