当前位置: 首页 > news >正文

TestNG中的@BeforeSuite注释

目录

什么是@BeforeSuite注解?

@BeforeSuite带注释的方法何时执行?

@BeforeSuite annotation有什么用?

所以,是时候集思广益了

我们可以在一个类中使用多个@BeforeSuite注释方法吗?

@BeforeSuite放在超类上时如何工作?


TestNG是Java生态系统中许多人使用的流行测试框架。它提供了各种注释,帮助规范测试执行。最重要的注释之一是@BeforeSuite注释。

本文将讨论@BeforeSuite注释及其在TestNG中的用法。我们将介绍以下主题:

  • 什么是@BeforeSuite注解?
  • 使用@BeforeSuite注释有什么好处?
  • 然后是一些有趣的问题
什么是@BeforeSuite注解?

@BeforeSuite注释是TestNG中所有@BeforeXXX和@AfterXXX注释中的最高优先级。这意味着任何带有@BeforeSuite注释的方法都将在套件中的任何其他测试之前执行。

@BeforeSuite带注释的方法何时执行?

通过参考testng.xml文件,可以很容易地理解@BeforeXXX和@AfterXXX注释的执行点。

<!-- @BeforeSuite annoated method will execute here  -->
<suite name="codekru"><test name="codekru"><classes><class name="Test.CodekruTestFirst" /><class name="Test.CodekruTestSecond" /></classes></test>
</suite>

因此,@BeforeSuite注释方法将在suite标记之前执行。

我们将采用两个类(CodekruTestOne和CodekruTestSecond),并在CodekruTestSecond类中定义@BeforeSuite注释方法。

CodekruTestFirst.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.BeforeSuite;
import org.testng.annotations.Test;public class CodekruTestSecond {@BeforeSuitepublic void beforeSuite() {System.out.println("In beforeSuite method");}@Testpublic void test() {System.out.println("Executing the test in CodekruTestSecond class");Assert.assertTrue(true);}}

我们现在将运行下面的XML来执行这两个类,让我们看看会发生什么。

<suite name="codekru"><test name="codekru"><classes><class name="Test.CodekruTestFirst" /><class name="Test.CodekruTestSecond" /></classes></test>
</suite>

输出-

In beforeSuite method
Executing the test in CodekruTestFirst class
Executing the test in CodekruTestSecond class===============================================
codekru
Total tests run: 2, Failures: 0, Skips: 0

 

@BeforeSuite annotation有什么用?
  • 它允许您为套件中的所有测试执行常见的设置任务,例如初始化数据或设置环境。
  • 它允许您在单个方法中定义常见的设置任务,从而减少了代码重复。
  • 它通过将常见的设置任务与实际的测试代码分开来提高测试代码的可读性。
所以,是时候集思广益了
我们可以在一个类中使用多个@BeforeSuite注释方法吗?

答案是肯定的。我们可以在一个类中使用多个@BeforeSuite注释方法,并且所有方法都将在套件中的测试用例之前运行。我们将在CodekruTestSecond类中保留两个@BeforeSuite注释方法。我们来做个示范。

package Test;import org.testng.Assert;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;public class CodekruTestSecond {@BeforeSuitepublic void beforeSuite1() {System.out.println("In beforeSuite1 method");}@BeforeSuitepublic void beforeSuite2() {System.out.println("In beforeSuite2 method");}@Testpublic void test() {System.out.println("Executing the test in CodekruTestSecond class");Assert.assertTrue(true);}}

然后运行下面的XML文件

<!-- @BeforeSuite annoated method will execute here  -->
<suite name="codekru">   <test name="codekruTest"><classes><class name="Test.CodekruTestSecond" /></classes></test></suite>

输出-

In beforeSuite1 method
In beforeSuite2 method
Executing the test in CodekruTestSecond class===============================================
codekru
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
===============================================

 

@BeforeSuite放在超类上时如何工作?

让我们通过一个例子来看看这个问题。

package Test;import org.testng.Assert;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;class CodekruTest {@BeforeSuitepublic void beforeSuiteMethod() {System.out.println("beforeSuite 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>

输出-

beforeSuite method called
Executing the subclass test===============================================
codekru
Total tests run: 1, Failures: 0, Skips: 0
===============================================

因此,即使带注释的方法放在超类上,beforeSuiteMethod也会运行,因为子类继承了所有方法。但是,如果我们将beforeSuiteMethod设置为private,它将不会运行,因为private方法不能被子类继承。

http://www.lryc.cn/news/285689.html

相关文章:

  • [学习笔记]刘知远团队大模型技术与交叉应用L3-Transformer_and_PLMs
  • 图像处理工具包Pillow的使用分享
  • python进程间通信——命名管道(Named Pipe、FIFO)
  • 03 OSPF 学习大纲
  • HJ7 取近似值【C语言】
  • php基础学习之常量
  • 2024最新面试经验分享
  • 《WebKit 技术内幕》之八(1):硬件加速机制
  • 子表单扫码录入,显著节省填写时间
  • 【Redis】Ubuntu安装配置
  • idea远程服务调试
  • Google Colab运行Pytorch项目
  • Android Studi安卓读写NDEF智能海报源码
  • Demo: 实现PDF加水印以及自定义水印样式
  • 每日OJ题_算法_二分查找①_力扣704. 二分查找
  • 【Python】--- 基础语法(1)
  • 详解gorm中DB对象的clone属性
  • 数据库(MySQL库表操作)
  • 内网穿透的应用-如何使用Docker部署Redis数据库并结合内网穿透工具实现公网远程访问
  • 计算机网络复试
  • Android学习之路(23)组件化框架ARouter的使用
  • HCIA vlan练习
  • Ubuntu下安装Gazebo仿真器
  • Chatgpt+Comfyui绘图源码说明及本地部署文档
  • ts中 any 和 unknown 有什么区别,分别什么时候使用
  • C++中命名空间、缺省参数、函数重载
  • 【笔记】Helm-3 主题-12 Helm插件指南
  • 2023.1.17 关于 Redis 持久化 AOF 策略详解
  • P2PNet推理和训练
  • pyexecjs原生js加密算法逆向