zoukankan      html  css  js  c++  java
  • TestNG的代码组织层级

    大家好,我是刚哥。

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

    Test methods、Test classes

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

    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配置:

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

    Test groups

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

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

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

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

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

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

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

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

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

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

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

    测试分组也能进行嵌套:

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

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


    所有文章公众号【测试开发刚哥】首发!

    版权申明:本文为博主原创文章,转载请保留原文链接及作者。
  • 相关阅读:
    LeetCode 842. Split Array into Fibonacci Sequence
    LeetCode 1087. Brace Expansion
    LeetCode 1219. Path with Maximum Gold
    LeetCode 1079. Letter Tile Possibilities
    LeetCode 1049. Last Stone Weight II
    LeetCode 1046. Last Stone Weight
    LeetCode 1139. Largest 1-Bordered Square
    LeetCode 764. Largest Plus Sign
    LeetCode 1105. Filling Bookcase Shelves
    LeetCode 1027. Longest Arithmetic Sequence
  • 原文地址:https://www.cnblogs.com/df888/p/15774670.html
Copyright © 2011-2022 走看看