TestNG注解(一)

TestNG有大量注解,被不同注解修饰的类、方法具有不同的含义,根据使用场景,注解被分为四类:

1. 前置条件和后置条件

        将租界作为前置条件(或初始化操作)和后置条件(或清理操作)使用

2.数据驱动

        测试用例和测试数据分离,便于维护和管理。是TestNG的特点之一。

3.测试用例

        只有@Test这一个注解。其作用是对测试用例进行控制。

4.监听器

        只有@Listeners注解。用于监控测试过程,如果采用默认监听器,则不需要分配任何配置。

一、前置条件和后置条件

1.1  Suite

@BeforeSuite:在该Suite的所有Test都未运行前运行

@AfterSuite:在该Suite的所有Test都运行后运行

一个Suite对应一个顶级模块。一般结合testng.xml文件中的<suite>或<suite-file>使用

1.2 Test

@BeforeTest:在该Test的所有Class都未运行前运行

@AfterTest:在该Test的所有Class都运行后运行

一个Test对应一个子模块。

1.3 Class

@BeforeClass:在该Class的所有@Test都未运行前运行

@AfterClass:在该Class的所有@Test都运行后运行

一个Class对应一个Java类。

1.4 Method

@BeforeMethod:在该Class的每个@Test运行前运行

@AfterMethod:在该Class的每个@Test运行后运行

一个Method对应一个Java方法。

1.5 Group

@BeforeGroups:在该Class第一个分组的@Test运行前运行

@AfterGroups:在该Class最后一个分组的@Test运行后运行

Group的控制粒度在Class和Method之间,一个Class可以包含多个Group,一个Group可以包含多个Method。

代码验证:

package jss.test2;

import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterGroups;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class NewTest {

  @BeforeSuite
  public void BeforeSuite() {
	  System.out.println("BeforeSuite");
  }
  @AfterSuite
  public void AfterSuite() {
	  System.out.println("AfterSuite");
  }
  @BeforeTest
  public void BeforeTest() {
	  System.out.println("++BeforeTest");
  }
  @AfterTest
  public void AfterTest() {
	  System.out.println("++AfterTest");
  }
  @BeforeClass
  public void BeforeClass() {
	  System.out.println("++--BeforeClass");
  }
  @AfterClass
  public void AfterClass() {
	  System.out.println("++--AfterClass");
  }
  @BeforeGroups(groups = {"g1"})
  public void BeforeGroups1() {
	  System.out.println("++--++BeforeGroups g1");
  }
  @AfterGroups(groups = {"g1"})
  public void AfterGroups1() {
	  System.out.println("++--++AfterGroups g1");
  }
  @BeforeGroups(groups = {"g2"})
  public void BeforeGroups2() {
	  System.out.println("++--++BeforeGroups g2");
  }
  @AfterGroups(groups = {"g2"})
  public void AfterGroups2() {
	  System.out.println("++--++AfterGroups g2");
  }
  @BeforeMethod
  public void BeforeMethod() {
	  System.out.println("++--++--BeforeMethod");
  }
  @AfterMethod
  public void AfterMethod() {
	  System.out.println("++--++--AfterMethod");
  }
  @Test(groups = "g1")
  public void Test1() {
	  System.out.println("g1 case1");
  }
  @Test(groups = "g2")
  public void Test2() {
	  System.out.println("g2 case1");
  }
  @Test(groups = "g2")
  public void Test3() {
	  System.out.println("g2 case2");
  }
  @Test(groups = {"g1","g2"})
  public void Test4() {
	  System.out.println("g1 g2 case1");
  }
}

运行结果:

BeforeSuite
++BeforeTest
++--BeforeClass
++--++BeforeGroups g1
++--++--BeforeMethod
g1 case1
++--++--AfterMethod
++--++BeforeGroups g2
++--++--BeforeMethod
g2 case1
++--++--AfterMethod
++--++--BeforeMethod
g2 case2
++--++--AfterMethod
++--++--BeforeMethod
g1 g2 case1
++--++--AfterMethod
++--++AfterGroups g2
++--++AfterGroups g1
++--AfterClass
++AfterTest
PASSED: Test1
PASSED: Test2
PASSED: Test3
PASSED: Test4

===============================================
    Default test
    Tests run: 4, Failures: 0, Skips: 0
===============================================

AfterSuite

===============================================
Default suite
Total tests run: 4, Failures: 0, Skips: 0
===============================================

分析可以得到以下结论:

1.Suite、Test、Class控制测试执行的粒度不同:Suite>Test>Class

2.一个测试用例可以同时属于多个Groups,例如例子中的Test4

TestNG个流行的 Java 测试框架,它提供了丰富的注解来管理和组织测试。以下是 TestNG些常用的注解及其作用: 1. **@Test**: 这是最基础的测试注解,用于标记个方法作为单元测试。当执行 TestNG 启动器时,带有此注解的方法会被自动发现并运行[^1]。 ```java // 示例 @Test public void testMethod() { // 测试代码 } ``` 2. **@Suite**: 套件注解(@Suite),用于定义组相关的测试集合,这些测试可以作为个整体运行。例如: ```java @Suite(name = "My Suite") public class MySuite { // 包含在该套件内的测试类 } ``` 3. **@BeforeClass/AfterClass**: 类注解,它们在每个测试类开始和结束时执行。`@BeforeClass` 在所有测试方法之前运行,而 `@AfterClass` 在所有方法之后运行。 4. **@BeforeMethod/AfterMethod**: 方法注解,用于在单个测试方法开始和结束后执行些初始化或清理操作。 5. **@Parameters**: 用于支持参数化的测试,允许个测试方法接收来自外部的数据源(如文件或数据库)作为输入。 ```java @Parameters(dataProvider = "data") public void testWithParameters(String param1, String param2) { // 使用参数进行测试 } @DataProvider(name = "data") public Object[][] data() { return new Object[][]{{"value1", "value2"}, {"value3", "value4"}}; } ``` 通过组合和使用这些注解TestNG 可以帮助你更好地组织和管理测试流程,提高测试的可维护性和复用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alemm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值