测试组概念

  • TestNG 允许您执行复杂的测试方法分组。不仅可以声明方法属于组,还可以指定包含其他组的组。可以调用 TestNG 并要求它包含一组特定的组(或正则表达式),同时排除另一组。
  • 组在testng.xml文件中指定,可以在标签下使用。
  • 标记中指定的组适用于下面的所有标记。

注意组的累计的,在中指定组A、在指定组B,最终A、B都包含在内。
组常用于主流程准入测试和功能测试,一般主流程测试的用例是功能测试的子集,这时可以把主流程测试用例划分属于一个组。

正则表达式描述

在testng.xml中,可以通过正则表达式描述一些匹配的组,示例:

  1. <test name="Test1">
  2. <groups>
  3. <run>
  4. <include name="windows.*"/>
  5. </run>
  6. </groups>
  7. <classes>
  8. <class name="example1.Test1"/>
  9. </classes>
  10. </test>

方法组

还可以使用方法组排除或包含单个方法

  1. <test name="Test1">
  2. <classes>
  3. <class name="example1.Test1">
  4. <methods>
  5. <include name=".*enabledTestMethod.*"/>
  6. <exclude name=".*brokenTestMethod.*"/>
  7. </methods>
  8. </class>
  9. </classes>
  10. </test>

这可以方便地停用单个方法而无需重新编译任何东西,但我不建议过多使用这种技术,因为如果您开始重构 Java 代码(标签中的内容可能不再与您的方法名称匹配)。

组中组

组还可以包括其他组。这些组称为“元组”。

  1. <test name="Regression1">
  2. <groups>
  3. <define name="functest">
  4. <include name="windows"/>
  5. <include name="linux"/>
  6. </define>
  7. <define name="all">
  8. <include name="functest"/>
  9. <include name="checkintest"/>
  10. </define>
  11. <run>
  12. <include name="all"/>
  13. </run>
  14. </groups>
  15. <classes>
  16. <class name="test.sample.Test1"/>
  17. </classes>
  18. </test>

排除组

由于最近的更改而导致测试暂时中断是很常见的,而您还没有时间修复中断。但是,您确实希望干净运行您的功能测试,因此您需要停用这些测试,但请记住它们之后需要重新被激活。
解决这个问题的一个简单方法是创建一个名为“broken”的组,并让这些测试方法属于它。

  1. <test name="Simple example">
  2. <groups>
  3. <run>
  4. <include name="checkintest"/>
  5. <exclude name="broken"/>
  6. </run>
  7. </groups>
  8. <classes>
  9. <class name="example1.Test1"/>
  10. </classes>
  11. </test>

注意:您还可以使用 @Test 和 @Before/After 注释上可用的“enabled”属性来单独禁用测试。

部分组

可以在类级别定义组,然后在方法级别添加组

  1. @Test(groups = { "checkin-test" })
  2. public class All {
  3. @Test(groups = { "func-test" )
  4. public void method1() { ... }
  5. public void method2() { ... }
  6. }

在这个类中,method2() 是在类级别定义的组“checkin-test”的一部分,而 method1() 属于“checkin-test”和“func-test”