zoukankan      html  css  js  c++  java
  • TestNG 二、测试组

    一、测试

    TestNG 允许你将测试方法归类为不同的组。不仅仅是可以声明某个方法属于某个组,而且还可以让组包含其他的组。这样TestNG可以调用或者请求包含一组特定的组 (或者正则表达式)而排除其他不需要组的集合。这样,如果你打算将测试分成两份的时候,就无需重新编译。这个特点,会给你在划分组的时候带来很大的灵活性。

    例如,通常将测试划分为两种类别是再常见不过的了:

    检查性测试(Check-in test):这些测试在你提交新代码之前就会运行。它们一般都是很快进行的,并且保证没有哪个基本的功能是不好使的。

    功能性测试(Functional test):这些测试涵盖你的软件中所有的功能,并且至少每天运行一次,不过你也可能希望他们持续的运行。

    典型的来说,检测性测试通常是功能性测试的一个子集。TestNG允许你根据个人感觉来进行组划分。例如,你可能希望把你所有的测试类都划归为"functest"组,并且额外的有几个方法输入"checkintest"组。

     

    [java] view plain copy
     
    1. public class Test1 {  
    2.   @Test(groups = { "functest", "checkintest" })  
    3.   public void testMethod1() {  
    4.   }  
    5.   @Test(groups = {"functest", "checkintest"} )  
    6.   public void testMethod2() {  
    7.   }  
    8.   @Test(groups = { "functest" })  
    9.   public void testMethod3() {  
    10.   }  
    11. }  

    通过下面的内容调用TestNG

     

    [html] view plain copy
     
    1. <test name="Test1">  
    2.   <groups>  
    3.     <run>  
    4.       <include name="functest"/>  
    5.     </run>  
    6.   </groups>  
    7.   <classes>  
    8.     <class name="example1.Test1"/>  
    9.   </classes>  
    10. </test>  

    以上会运行上面那个类中所有的测试,当要使用checkintest进行调用的时候,就仅仅运行testMethod1()和testMethod2()。

    下面是另外一个例子。这次使用正则表达式。假定有些测试方法不应该运行在Linux环境下,你的测试会看起来像:

    [java] view plain copy
     
    1. @Test  
    2. public class Test1 {  
    3.   @Test(groups = { "windows.checkintest" })   
    4.   public void testWindowsOnly() {  
    5.   }  
    6.   @Test(groups = {"linux.checkintest"} )  
    7.   public void testLinuxOnly() {  
    8.   }  
    9.   @Test(groups = { "windows.functest" )  
    10.   public void testWindowsToo() {  
    11.   }  
    12. }  

    然后你就可以使用下面这个 testng.xml 来只运行在Windows下的方法:

    [html] view plain copy
     
    1. <test name="Test1">  
    2.   <groups>  
    3.     <run>  
    4.       <include name="windows.*"/>  
    5.     </run>  
    6.   </groups>  
    7.   <classes>  
    8.     <class name="example1.Test1"/>  
    9.   </classes>  
    10. </test>  

    注意:TestNG使用的是正则表达式,而不是通配符。注意这二者的区别

    例如,"anything" 是匹配于 ".*" -- 点和星号 -- 而不是星号 "*".

     

    二、组中组

    测试组也可以包含其他组。这样的组叫做“元组”(MetaGroups)。例如,你可能要定义一个组all来包含其他的组,chekcintest 和functest。"functest"本身只包含了组windows和linux,而"checkintest"仅仅包含windows。你就可以在属性文件中这样定义:

    [html] view plain copy
     
    1. <test name="Regression1">  
    2.   <groups>  
    3.     <define name="functest">  
    4.       <include name="windows"/>  
    5.       <include name="linux"/>  
    6.     </define>  
    7.     <define name="all">  
    8.       <include name="functest"/>  
    9.       <include name="checkintest"/>  
    10.     </define>  
    11.     <run>  
    12.       <include name="all"/>  
    13.     </run>  
    14.   </groups>  
    15.   <classes>  
    16.     <class name="test.sample.Test1"/>  
    17.   </classes>  
    18. </test>  

    三、排除组

       TestNG 允许你包含组,当然也可以排除之。

    譬如说,因为最近的改动,导致当前的测试中断并且,你还没有时间修复这些问题都是司空见惯的。但是,你还需要自己的功能测试可以正确运行,所以,制药简单的让这些不需要的测试失效就可以了。但是别忘记在以后需要的时候,要重新让其生效。

        一个简单的办法来解决这个问题就是创建一个叫做"broken"组,然后使得这些测试方法从属于那个组。例如上面的例子,假设我知道testMethod2()会中断,所以我希望使其失效:

    [java] view plain copy
     
    1. @Test(groups = {"checkintest", "broken"} )  
    2. public void testMethod2() {}  

    而我所需要做的一切就是从运行中排除这个组:

    [html] view plain copy
     
    1. <test name="Simple example">  
    2.   <groups>  
    3.     <run>  
    4.       <include name="checkintest"/>  
    5.       <exclude name="broken"/>  
    6.     </run>  
    7.   </groups>  
    8.   <classes>  
    9.     <class name="example1.Test1"/>  
    10.   </classes>  
    11. </test>  

    通过这种办法,我们既可以得到整洁的测试运行,同时也能够跟踪那些需要稍后修正的中断的测试。

    注意:你可以可以通过使用"enabled"属性来完成,这个属性适用于@Test 和 @Before/After annotation。

    四、局部组

    可以在类级别定义组,之后还可以在方法级定义组:

    [java] view plain copy
     
    1. @Test(groups = { "checkin-test" })  
    2. public class All {  
    3.     @Test(groups = { "func-test" )  
    4.     public void method1() { ... }  
    5.     public void method2() { ... }  
    6. }  

    在这个类中,method2() 类级组"checkin-test"的一部分,而method1()即属于"checkin-test"也属于"func-test"组。

    ---------------------------------------------------------------------------

     

    本文转载自http://blog.sina.com.cn/bestfeiyong 

  • 相关阅读:
    IE8下提示'console'未定义错误
    左右添加和删除
    箭头函数
    事件冒泡
    选中状态改变,并且实现左边选中便便添加
    appcan里面模板的使用
    白面机器学习笔记(一)
    常见的模型加速方法
    相机的参数
    深度学习和机器学习的区别
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/6439913.html
Copyright © 2011-2022 走看看