有时,您需要按特定顺序调用测试方法。这里有一些例子:

  • 在运行更多的测试方法之前,确保一定数量的测试方法已经完成并成功。
  • 初始化您的测试,同时希望此初始化方法也成为测试方法(带有@Before/After标记的方法不会成为最终报告的一部分)。

TestNG 允许您使用注释或在 XML 中指定依赖项。

带注解的依赖

可以使用@Test注释上的属性dependsOnMethods或dependsOnGroups指定依赖 。
有两种依赖:

  • 硬依赖。您所依赖的所有方法都必须已运行并成功才能运行。如果您的依赖项中至少发生一次故障,您将不会被调用并在报告中标记为 SKIP。
  • 软依赖。您将始终在您依赖的方法之后运行,即使其中一些方法失败了。当您只想确保您的测试方法以特定顺序运行但它们的成功并不真正取决于其他人的成功时,这很有用。通过在@Test注释 中添加“alwaysRun=true”来获得软依赖

硬依赖的例子:

  1. @Test
  2. public void serverStartedOk() {}
  3. @Test(dependsOnMethods = { "serverStartedOk" })
  4. public void method1() {}

在这个例子中,method1()被声明为依赖于方法 serverStartedOk(),这保证 serverStartedOk() 总是首先被调用。

  1. @Test(groups = { "init" })
  2. public void serverStartedOk() {}
  3. @Test(groups = { "init" })
  4. public void initEnvironment() {}
  5. @Test(dependsOnGroups = { "init.*" })
  6. public void method1() {}

注意:如前所述,属于同一组的方法的调用顺序不能保证在测试运行中相同。

如果依赖的方法失败并且您对它有硬依赖(alwaysRun=false,这是默认值),则依赖它的方法不会 标记为FAIL而是标记为SKIP。跳过的方法将在最终报告中报告(在 HTML 中以既不是红色也不是绿色的颜色),这很重要,因为跳过的方法不一定是失败的。
dependsOnGroups和dependsOnMethods都接受正则表达式作为参数。对于dependsOnMethods,如果您依赖的方法恰好有多个重载版本,则将调用所有重载方法。如果您只想调用其中一种重载方法,则应使用dependsOnGroups。

在执行时,假设b方法依赖a,如果有多个这样的方法类实例,所有实例调用方法a之前,不会执行b。导致执行顺序为aabb。
在有些场景则不合适,可以在标签使用group-by-instances,保证实例内部的顺序,此属性在 上均有效。

  1. <suite name="Factory" group-by-instances="true">
  2. or
  3. <test name="Factory" group-by-instances="true">

XML 中的依赖关系

可以在testng.xml文件中指定您的组依赖项。您使用标记来实现此目的:

  1. <test name="My suite">
  2. <groups>
  3. <dependencies>
  4. <group name="c" depends-on="a b" />
  5. <group name="z" depends-on="c" />
  6. </dependencies>
  7. </groups>
  8. </test>

所述属性包含以空格分隔的列表。