Testng 介绍 (二)

发布于 更新于
本文目录
  1. 6、testng.xml
  2. 6.1、带包和不带包
  3. 6.2、指定包不指定类
  4. 6.2、指定要包括和排除的组和方法
  5. 6.2、打乱执行顺序
  6. 7、测试类、测试方法、测试组
  7. 7.1、执行带返回值的方法
  8. 7.2、Test groups
  9. 7.3、组合用法
  10. 7.4、正则表达式用法
  11. 7.5、方法包含和排除
  12. 7.6、组的嵌套定义
  13. 7.7、同时拥有include和exclude
  14. 7.8、在类上使用分组

技术文章接口测试

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

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>

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

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包含checkintest、function,function包含window、linux,最终运行all。只要方法上使用all或者all包含的组都会执行。

7.7、同时拥有include和exclude

@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方法上既有include的checkintest又有exclude的broken,那么这个方法将不会执行,使用这种方式可以让我们非常方便的暂时停用某些方法,而不会影响原来的配置,当你想继续使用这些方式时,只需要去掉broken即可。

7.8、在类上使用分组

@Test(groups = { "checkin-test" })
public class All {

  @Test(groups = { "func-test" )
  public void method1() { ... }

  public void method2() { ... }
}

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

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

来源:testingpai

继续阅读