Java自动化测试框架(TestNG)——依赖测试

发表于:2020-8-27 09:57

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:今日头条

  在测试用例执行时,有些场景需要关注用例的执行顺序或者依赖条件,TestNG支持测试方法之间显式依赖的声明,可以帮助我们很好地应对这种测试场景。
  TestNG支持显示依赖声明的两种方式:
  ·在@Test注释中使用属性dependsOnMethods,声明对某个方法的依赖。
  ·在@Test注释中使用属性dependsOnGroups,声明对某个组的依赖。
  在TestNG中,使用dependOnMethods 或 dependsOnGroups来实现依赖测试。若依赖方法失败,则将跳过被依赖测试方法。
  依赖某个或某几个方法
  通过 dependOnMethods 声明依赖的测试方法,若同时依赖多个测试方法,可以写多个。
  import org.testng.Assert;
  import org.testng.annotations.AfterGroups;
  import org.testng.annotations.BeforeGroups;
  import org.testng.annotations.Test;
  public class TestDemo {
          @Test
          public void setupDB1() {
              System.out.println("Run init database");
          }
          @Test
          public void setupDB2() {
              System.out.println("Run clean database");
          }
          @Test(groups = "databaseTest",dependsOnMethods = { "setupDB1","setupDB2" })
          public void testOracle() {
              System.out.println("Run testOracle");
          }
  }
  运行结果如下:
  Run init database
  Run clean database
  Run testOracle
  ===============================================
  Default Suite
  Total tests run: 3, Failures: 0, Skips: 0
  ===============================================
  当依赖的方法运行失败时,则跳过被依赖方法,代码示例如下:
  import org.testng.Assert;
  import org.testng.annotations.Test;
  public class TestDemo {
      @Test
      public void setupDB1() {
          System.out.println("Run init database 1");
          Assert.assertEquals(1,2);
      }
      @Test        
      public void setupDB2() {
          System.out.println("Run init database 2");
      }
      @Test(groups = "databaseTest",dependsOnMethods = { "setupDB1","setupDB2" })
      public void testOracle() {
           System.out.println("Run testOracle");
      }
  }
  运行上述代码,当setupDB1 运行失败时,跳过了被依赖方法testOracle。如下:
  Run init database 1
  java.lang.AssertionError: expected [2] but found [1]
  Expected :2
  Actual   :1
   <Click to see difference>
  at org.testng.Assert.fail(Assert.java:94)
  at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
  Run init database 2
  Test ignored.
  ===============================================
  Default Suite
  Total tests run: 3, Failures: 1, Skips: 1
  ===============================================
  依赖某个或某几个分组
  通过 dependsOnGroups 声明依赖的测试分组,若同时依赖多个测试分组时,可以写多个。代码示例如下:
  import org.testng.annotations.AfterGroups;
  import org.testng.annotations.BeforeGroups;
  import org.testng.annotations.Test;
  public class TestDemo {
          @Test(groups = "apiTest")
          public void runApi1() {
              System.out.println("Run runApi1");
          }
          @Test(groups = "apiTest")
          public void runApi2() {
              System.out.println("Run runApi2");
          }
          @Test(groups = "databaseTest")
          public void testOracle() {
              System.out.println("Run testOracle");
          }
          @Test(groups = "databaseTest")
          public void testMySql() {
              System.out.println("Run testMySql");
          }
          @Test(dependsOnGroups = { "databaseTest", "apiTest" })
          public void runFinal() {
              System.out.println("runFinal");
          }
  }
  上述代码示例中,runFinal 方法依赖databaseTest组、apiTest组方法,需要在这两个组的方法执行完成后,才可以执行runFinal方法,我们通过 @Test(dependsOnGroups = { "databaseTest", "apiTest" }) 注解的方式来实现,运行代码,执行结果如下:
  Run runApi1
  Run runApi2
  Run testMySql
  Run testOracle
  runFinal
  ===============================================
  Default Suite
  Total tests run: 5, Failures: 0, Skips: 0
  ===============================================
  如果当依赖的测试组里在运行过程中存在失败的用例,则runFinal方法将被跳过,示例代码如下:
  import org.testng.Assert;
  import org.testng.annotations.AfterGroups;
  import org.testng.annotations.BeforeGroups;
  import org.testng.annotations.Test;
  public class TestDemo {
          @Test(groups = "apiTest")
          public void runApi1() {
              System.out.println("Run runApi1");
            // 运行失败
              Assert.assertEquals(1,2);
          }
          @Test(groups = "apiTest")
          public void runApi2() {
              System.out.println("Run runApi2");
          }
          @Test(groups = "databaseTest")
          public void testOracle() {
              System.out.println("Run testOracle");
          }
          @Test(groups = "databaseTest")
          public void testMySql() {
              System.out.println("Run testMySql");
          }
          @Test(dependsOnGroups = { "databaseTest", "apiTest" })
          public void runFinal() {
              System.out.println("runFinal");
          }
  }
  如上,示例代码中apiTest分组中的runApi1测试用例将断言失败,此时运行测试用例,执行结果如下,我们会看到runFinal方法被没有被执行,而是跳过。
  Run runApi1
  java.lang.AssertionError: expected [2] but found [1]
  Expected :2
  Actual   :1
  at org.testng.Assert.fail(Assert.java:94)
  at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
  Run runApi2
  Run testMySql
  Run testOracle
  Test ignored.
  ===============================================
  Default Suite
  Total tests run: 5, Failures: 1, Skips: 1
  ===============================================

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号