多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

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

更新时间:2021-09-18 01:55:44 作者:admin 浏览:799

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

  在测试用例执行时,有些场景需要关注用例的执行顺序或者依赖条件,TestNG支持测试方法之间显式依赖的声明,可以帮助我们很好地应对这种测试场景。

  TestNG支持显示依赖声明的两种方式:

  在@Test注释中使用属性dependsOnMethods,声明对某个方法的依赖。

  在@Test注释中使用属性dependsOnGroups,声明对某个组的依赖。

  在TestNG中,使用dependOnMethods 或 dependsOnGroups来实现依赖测试。若依赖方法失败,则将跳过被依赖测试方法。

  依赖某个或某几个方法

  通过 dependOnMethods 声明依赖的测试方法,若同时依赖多个测试方法,可以写多个。

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

  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

  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

  ===============================================

  以上是关于接口自动化测试框架(TestNG)—依赖测试的介绍,由多测师亲自撰写。  https://www.aichudan.com/

联系电话

17727591462

返回顶部