前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TestNG的代码组织层级

TestNG的代码组织层级

作者头像
dongfanger
发布2022-05-09 16:57:39
4720
发布2022-05-09 16:57:39
举报
文章被收录于专栏:dongfanger

大家好,我是刚哥。

TestNG有3种代码组织层级:测试方法(Test methods)、测试类(Test classes)、测试组(Test groups)。

Test methods、Test classes

使用了@Test注解的方法就是测试方法,包含测试方法的类就是测试类。比如:

代码语言:javascript
复制
package example1;
 
import org.testng.annotations.*;
 
public class SimpleTest {
 
 @BeforeClass
 public void setUp() {
   // code that will be invoked when this test is instantiated
 }
 
 @Test(groups = { "fast" })
 public void aFastTest() {
   System.out.println("Fast test");
 }
 
 @Test(groups = { "slow" })
 public void aSlowTest() {
    System.out.println("Slow test");
 }
 
}

这个很好理解,但是有个特殊点是@Test注解的测试方法,默认是会忽略返回值的,除非在testng.xml配置:

代码语言:javascript
复制
<suite allow-return-values="true">
 
or
 
<test allow-return-values="true">

Test groups

测试分组其实就是给测试方法打标记,比如冒烟测试用例和功能测试用例:

代码语言:javascript
复制
public class Test1 {
  @Test(groups = { "functest", "checkintest" })
  public void testMethod1() {
  }
 
  @Test(groups = {"functest", "checkintest"} )
  public void testMethod2() {
  }
 
  @Test(groups = { "functest" })
  public void testMethod3() {
  }
}

如果只配置functest,就会执行全部测试方法:

代码语言:javascript
复制
<test name="Test1">
  <groups>
    <run>
      <include name="functest"/>
    </run>
  </groups>
  <classes>
    <class name="example1.Test1"/>
  </classes>
</test>

如果只配置checkintest,就会只执行前面2个方法:

代码语言:javascript
复制
<test name="Test1">
  <groups>
    <run>
      <include name="checkintest"/>
    </run>
  </groups>
  <classes>
    <class name="example1.Test1"/>
  </classes>
</test>

除了指定完整name,也可以使用正则表达式:

代码语言:javascript
复制
@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() {
  }
}
代码语言:javascript
复制
<test name="Test1">
  <groups>
    <run>
      <include name="windows.*"/>
    </run>
  </groups>
 
  <classes>
    <class name="example1.Test1"/>
  </classes>
</test>

进一步,测试分组除了include测试方法,还可以exclude:

代码语言:javascript
复制
<test name="Test1">
  <classes>
    <class name="example1.Test1">
      <methods>
        <include name=".*enabledTestMethod.*"/>
        <exclude name=".*brokenTestMethod.*"/>
      </methods>
     </class>
  </classes>
</test>

还有一个办法是使用@Test@Before/Afterenabled属性。

测试分组也能进行嵌套:

代码语言:javascript
复制
<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>

<define></define>定义了父分组,里面<include>的就是子分组。

同样的,嵌套分组也可以对子分组进行exclude:

代码语言:javascript
复制
@Test(groups = {"checkintest", "broken"} )
public void testMethod2() {
}
代码语言:javascript
复制
<test name="Simple example">
  <groups>
    <run>
      <include name="checkintest"/>
      <exclude name="broken"/>
    </run>
  </groups>
  
  <classes>
    <class name="example1.Test1"/>
  </classes>
</test>

最后,对于分组的位置,如果测试类和测试方法都标记了分组,那么测试类的分组会作用到所有方法中,比如:

代码语言:javascript
复制
@Test(groups = { "checkin-test" })
public class All {
 
  @Test(groups = { "func-test" )
  public void method1() { ... }
 
  public void method2() { ... }
}

method2()属于checkin-test分组,method1属于func-test和checkin-test两个分组。

参考资料: https://testng.org/doc/documentation-main.html 5 - Test methods, Test classes and Test groups

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Test methods、Test classes
  • Test groups
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档