testng 4 测试方法 测试组

说明:本文部分内容来源于网络,侵删

1. 测试方法method

测试方法就是被@Test修饰的方法,测试方法的返回值默认是被忽略的,除非在testng.xml做以下配置:

<suite allow-return-values="true">
 
or
 
<test allow-return-values="true">

2. 测试组group简介

testng允许用户自定义复杂的测试分组。你不仅可以定义一个组里包含哪些测试方法,也可以制定一个组里包含其他组。
然后TestNG可以被调用,并被要求包含某些分组和排除其他的分组。
这给了用户划分测试分组的最大灵活度,并且如果想连续运行两个不同的测试组不需要重新编译。

Group在testng.xml文件的和中使用,并且在中制定的组也会在中继承。groups的配置是累计的,如果在中指定要执行group-a,在中指定要执行group-b,那么实际执行时,group-a和group-b都会被执行。

举个例子:

我们测试中经常会用到以下两种测试场景:

  1. Check-in tests. 在开发提交代码之前,需要先进行准入测试。这种测试需要的是快速,并且只进行基础功能正常的测试。
  2. Functional tests. 功能测试需要覆盖测试软件的大部分或所有功能,并且至少一天执行一次。

通常,Check-in tests是Functional tests的子集,TestNG允许您通过测试组以非常直观的方式指定这一点。例如,您可以说您的整个测试类属于“functest”组,另外还有几个方法属于“checkintest”组来构造测试:

public class Test1 {
  @Test(groups = { "functest", "checkintest" })
  public void testMethod1() {
  }
 
  @Test(groups = {"functest", "checkintest"} )
  public void testMethod2() {
  }
 
  @Test(groups = { "functest" })
  public void testMethod3() {
  }
}

用下面这种testng.xml的配置,会执行Test1类中所有测试方法。

<test name="Test1">
  <groups>
    <run>
      <include name="functest"/>
    </run>
  </groups>
  <classes>
    <class name="example1.Test1"/>
  </classes>
</test>

而用下面这种testng.xml的配置,会执行Test1类中的testMethod1()和testMethod2(),testMethod3()不会被执行。

<test name="Test1">
  <groups>
    <run>
      <include name="checkintest"/>
    </run>
  </groups>
  <classes>
    <class name="example1.Test1"/>
  </classes>
</test>
下面是另外一个例子,使用正则表达式配置。
@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() {
  }
}

假设您的某些测试方法不应在Linux上运行,您的测试将如下所示:Note: TestNG uses regular expressions, and not wildmats. Be aware of the difference (for example, “anything” is matched by “." – dot star – and not "”).

<test name="Test1">
  <groups>
    <run>
      <include name="windows.*"/>
    </run>
  </groups>
 
  <classes>
    <class name="example1.Test1"/>
  </classes>
</test>

注意⚠️:上述“windows.*”是正则表达式,而不是通配符,注意两者的区别。(比如,点星表示所有,而不是星)。

正则表达式也可以用在下面的场景:

<test name="Test1">
  <classes>
    <class name="example1.Test1">
      <methods>
        <include name=".*enabledTestMethod.*"/>
        <exclude name=".*brokenTestMethod.*"/>
      </methods>
     </class>
  </classes>
</test>

这对于停用单个方法而不必重新编译任何内容非常方便,但不建议过多地使用此技术,因为如果您开始重构Java代码,它会使您的测试框架很可能崩溃(标记中使用的正则表达式可能不再与您的方法匹配)。

3. 测试组-重组

测试组也可以包含其他的测试组, 比如,你想定义一个组“all”,这个组包含组"checkintest" 和 “functest”。而"functest"组本身包含"windows"组 and “linux” 组。 下面是需要配置的内容:

<test name="Regression1">
  <groups>
    <define name="functest">
      <include name="windows"/>
      <include name="linux"/>
    </define>
  
    <define name="all">
      <include name="functest"/>
      <include name="checkintest"/>
    </define>
  
    <run>
      <include name="all"/>
    </run>
  </groups>
  
  <classes>
    <class name="test.sample.Test1"/>
  </classes>
</test>

4. 测试组-排除

Testng允许你包含某些组,也允许排除某些组。
例如,通常会有一些测试方法/测试类由于最近的变化而暂时失败,而你还没有时间修复。但是,却希望功能测试的运行正常,因此需要停用这些有问题的测试方法或类。
一个简单的解决这个问题的办法,就是创建一个组,比如叫做“broken”,然后把这些有问题的测试方法放进去。

例如,在上面的示例中,我知道testMethod2()现在已损坏,所以我想禁用它。在testMethod2()的注解里加上group分组

@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>

提示:也可以使用@Test/@Before/@After的属性enabled=false来禁用某个测试方法。

5. 部分组

你可以给类分组,也可以给方法分组,当给类分组时,类里面所有的方法,都会分到这个组里。

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

method1()即是"checkin-test" 组成员,也是"func-test"组的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值