TestNG部分常用注解使用方法

本文介绍在TestNG使用过程中,部分常用注解的使用方法

  1. 注解@DataProvider

当DataProvider后添加name=XX属性时,此时@Test(dataProvider = "XX"),两个值要相同,可查看第1行代码与第6行代码。

执行代码如下:

  @Test(dataProvider = "tb")
  public void test(Integer id, String name) {
      System.out.println("编号:"+id+", 姓名:"+name);
  }
  
  @DataProvider(name ="tb")
  public Object[][] dpTest() {
    return new Object[][] {
      new Object[] { 1, "Lucy" },
      new Object[] { 2, "Jack" },
    };
  }

当DataProvider后没有添加name属性时,此时@Test(dataProvider = "XX"),即XX等于添加DataProvider方法的方法名称,可结合第1行、第6行、第7行代码查看。

执行代码如下:

  @Test(dataProvider = "dpTest")
  public void test(Integer id, String name) {
      System.out.println("编号:"+id+", 姓名:"+name);
  }
  
  @DataProvider
  public Object[][] dpTest() {
    return new Object[][] {
      new Object[] { 1, "Lucy" },
      new Object[] { 2, "Jack" },
    };
  }
  1. 注解@Test

①当属性值为dataProvider,@Test注解会循环每行数据,代码与执行结果如下:

/*
 *代码行
 */  
@Test(dataProvider = "dpTest")
  public void test(Integer id, String name) {
      System.out.println("编号:"+id+", 姓名:"+name);
  }
  
  @DataProvider
  public Object[][] dpTest() {
    return new Object[][] {
      new Object[] { 1, "Lucy" },
      new Object[] { 2, "Jack" },
    };
  }

执行结果:

编号:1, 姓名:Lucy
编号:2, 姓名:Jack
PASSED: f(1, "Lucy")
PASSED: f(2, "Jack")

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

②当属性值为dependsOnGroups

执行代码:

若groups属性的书写方式为代码块中的第1行,则属性dependsOnGroups可以按照代码块中的第12行的方式进行书写,使用*进行匹配。

//@Test(groups = {"group1.a"})
@Test(groups = {"group1"})
public void test1() {
     System.out.println("group1-test1");
}
      
@Test(groups = {"group1"})
public void test2() {
     System.out.println("group1-test2");
    //Assert.assertEquals("test02", "test02");
}

//@Test(dependsOnGroups = {"group1.*"})      
@Test(dependsOnGroups = {"group1"})
public void test3() {
     System.out.println("group1-test3");
}

执行结果:

注意:若上方示例代码块中的第10行执行结果为false,则test3()的执行状态为skipped;即如果想要带“dependsOnGroups”属性的方法执行通过,必须相关联的“groups”属性的方法也全部要执行通过。

group1-test1
group1-test2
group1-test3
PASSED: test1
PASSED: test2
PASSED: test3

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

③当属性值为dependsOnMethods,即可设置测试方法依赖于哪些方法去执行

      @Test
      public void test1() {
          System.out.println("group1-test1");
      }
      
      @Test
      public void test2() {
          System.out.println("group1-test2");
      }
      //当依赖多个方法时,可继续在dependsOnMethods={"",""}进行追加,用逗号分隔
      @Test(dependsOnMethods={"test1","test2"})
      public void test3() {
          System.out.println("group1-test3");
      }

④当属性为priority,可设置用例方法执行的优先级

      @Test(priority=3)
      public void test1() {
          System.out.println("group1-test1");
      }
      
      @Test(priority=2)
      public void test2() {
          System.out.println("group1-test2");
      }
      
      @Test(priority=1)
      public void test3() {
          System.out.println("group1-test3");
      }

执行结果

//可以看到测试方法的执行顺序根据priority设置的顺序进行了排序
group1-test3
group1-test2
group1-test1
PASSED: test3
PASSED: test2
PASSED: test1

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

⑤当属性为enabled,可根据属性值“true或者false”来控制测试方法是否执行

      @Test(enabled = true)
      public void test1() {
          System.out.println("group1-test1");
      }
      
      @Test(enabled = false)
      public void test2() {
          System.out.println("group1-test2");
      }
      
      @Test(enabled = true)
      public void test3() {
          System.out.println("group1-test3");
      }

执行结果:

//因为test2方法中的enabled=false,即在输出结果中,test2方法没有执行
group1-test1
group1-test3
PASSED: test1
PASSED: test3

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

⑥当属性为invocationCount、invocationTimeOut、threadPoolSize

invocationCount

该方法被执行的次数

invocationTimeOut

此测试在所有调用计数的累积时间内应花费的最大毫秒数。如果未指定invocationCount,则会忽略此属性。

threadPoolSize

此方法的线程池的大小。该方法将根据invocationCount的指定从多个线程调用。

注意:如果未指定invocationCount,则会忽略此属性

//本段代码执行结果,将使用3个线程完成总共6次的方法调用
@Test(invocationCount=6,invocationTimeOut=100,threadPoolSize=3)
      public void test1() {
        System.out.println("OK");
      }

执行结果:

[ThreadUtil] Starting executor timeOut:0ms workers:6 threadPoolSize:3
OK
OK
OK
OK
OK
OK
PASSED: test1
PASSED: test1
PASSED: test1
PASSED: test1
PASSED: test1
PASSED: test1

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

如需了解更多,请前往TestNG官网进行查阅学习

https://testng.org/doc/documentation-main.html#test-methods

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值