Testng 介绍 (二)

本贴最后更新于 787 天前,其中的信息可能已经时异事殊

6、testng.xml

6.1、带包和不带包
<suite name="Suite1" verbose="1" >
  <test name="Nopackage" >
    <classes>
       <class name="NoPackageTest" />
    </classes>
  </test>
 
  <test name="Regression1">
    <classes>
      <class name="test.sample.ParameterSample"/>
      <class name="test.sample.ParameterTest"/>
    </classes>
  </test>
</suite>
6.2、指定包不指定类
<suite name="Suite1" verbose="1" >
  <test name="Regression1"   >
    <packages>
      <package name="test.sample" />
   </packages>
 </test>
</suite>

在上述案例中,TestNG将查看包test.sample中的所有类,并将仅执行具有TestNG批注的类。

6.2、指定要包括和排除的组和方法
<test name="Regression1">
  <groups>
    <run>
      <exclude name="brokenTests"  />
      <include name="checkinTests"  />
    </run>
  </groups>
  
  <classes>
    <class name="test.IndividualMethodsTest">
      <methods>
        <include name="testMethod" />
      </methods>
    </class>
  </classes>
</test>

在上述案例中,在@Test中配置了groups="checkinTests",则会执行,没有配置或配置groups="brokenTests"则不会执行。在IndividualMethodsTest类中只有testMethod才会执行。

6.2、打乱执行顺序
<test name="Regression1" preserve-order="false">
  <classes>
    <class name="test.Test1">
      <methods>
        <include name="m1" />
        <include name="m2" />
      </methods>
    </class>
    <class name="test.Test2" />
  </classes>
</test>

默认情况下,TestNG将按照在XML文件中找到的顺序运行测试。 如果要以不可预测的顺序运行此文件中列出的类和方法,请将preserve-order属性设置为false

7、测试类、测试方法、测试组

7.1、执行带返回值的方法
<suite allow-return-values="true">

默认情况下,使用@Test的方法如果有返回值,则会直接忽略,使用allow-return-values="true"之后则可以执行。

7.2、Test groups

TestNG允许您对测试方法进行复杂的分组。 不仅可以声明方法属于组,还可以指定包含其他组的组。 然后可以调用TestNG并要求它包括一组特定的组(或正则表达式),而排除另一组。
如果要连续运行两组不同的测试,这将为您提供最大的灵活性来划分测试方式,并且不需要重新编译任何内容。

7.3、组合用法
public class Test1 {
  @Test(groups = { "functest", "checkintest" })
  public void testMethod1() {
  }
 
  @Test(groups = {"functest", "checkintest"} )
  public void testMethod2() {
  }
 
  @Test(groups = { "functest" })
  public void testMethod3() {
  }
}
<test name="Test1">
  <groups>
    <run>
      <include name="functest"/>
    </run>
  </groups>
  <classes>
    <class name="example1.Test1"/>
  </classes>
</test>

上述案例中,testMethod1testMethod2testMethod3都会执行,当<include name="functest"/>``<include name="checkintest"/>则只有testMethod1testMethod2会执行。

7.4、正则表达式用法
@Test
public class Test1 {
  @Test(groups = { "windows.checkintest" })
  public void testWindowsOnly() {
  }
 
  @Test(groups = {"linux.checkintest"} )
  public void testLinuxOnly() {
  }
 
  @Test(groups = { "windows.functest" )
  public void testWindowsToo() {
  }
}
<test name="Test1">
  <groups>
    <run>
      <include name="windows.*"/>
    </run>
  </groups>
 
  <classes>
    <class name="example1.Test1"/>
  </classes>
</test>

上述案例,只有groups=windows开头的方法才会执行。

7.5、方法包含和排除
<test name="Test1">
  <classes>
    <class name="example1.Test1">
      <methods>
        <include name=".*enabledTestMethod.*"/>
        <exclude name=".*brokenTestMethod.*"/>
      </methods>
     </class>
  </classes>
</test>

上述案例中,如果是单独匹配方法名,如果方法名中包含enabledTestMethod那么方法就会执行,如果方法中包含brokenTestMethod则不会执行。不推荐使用这种方式,因为这样会改造你的方法名。

7.6、组的嵌套定义
<test name="Regression1">
  <groups>
  
    <define name="all">
      <include name="functest"/>
      <include name="checkintest"/>
    </define>
  
    <define name="functest">
      <include name="windows"/>
      <include name="linux"/>
    </define>
  
    <run>
      <include name="all"/>
    </run>
  </groups>
  
  <classes>
    <class name="test.sample.Test1"/>
  </classes>
</test>

上述案例中,all包含checkintestfunctionfunction包含windowlinux,最终运行all。只要方法上使用all或者all包含的组都会执行。

7.7、同时拥有includeexclude
@Test(groups = {"checkintest", "broken"} )
public void testMethod2() {
}
<test name="Simple example">
  <groups>
    <run>
      <include name="checkintest"/>
      <exclude name="broken"/>
    </run>
  </groups>
  
  <classes>
    <class name="example1.Test1"/>
  </classes>
</test>

上述案例中,testMethod2方法上既有includecheckintest又有excludebroken,那么这个方法将不会执行,使用这种方式可以让我们非常方便的暂时停用某些方法,而不会影响原来的配置,当你想继续使用这些方式时,只需要去掉broken即可。

7.8、在类上使用分组
@Test(groups = { "checkin-test" })
public class All {
 
  @Test(groups = { "func-test" )
  public void method1() { ... }
 
  public void method2() { ... }
}

上述案例中,method1method2方法都属于checkin-test组,method1同时也属于func-test组。当运行

checkin-test组时method1method2都会运行,当允许func-test组时只会运行method1

1 操作
luojie 在 2020-08-06 17:39:15 更新了该帖
回帖
请输入回帖内容 ...