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),我们将立即处理