51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2509|回复: 0
打印 上一主题 下一主题

TestNG 组(Group)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-25 15:43:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TestNG不仅允许我们把很多个方法归属到一个组下,还允许我们把组包含到另一个组内,我们可以灵活的决定说在我们的测试中使用哪些组的方法来测试。在第一篇文章中,我们也简单的介绍过TestNG组。我对TestNG组的理解,其实就是给方法或组贴标签,具有相同标签的就是一个组的,标签可以有多个,所以一个方法会或组可能同时属于多个组。

在代码内我们可以这样声明一个方法属于某个组:
  1. @Test(groups = { "group1" })
  2.   public void testMethod() {
  3.   }
复制代码
在xml文件中,则有更加丰富的机制。在xml文件中我们用组<groups>来标签来声明要运行的组,这个声明既可以直接放在套件Suite下,也可以放在用例Test内。但是要注意的是,在suite声明的groups对suite下的全部Test都会起作用,在Test内声明的groups则仅作用在这个Test内。

下面是一个例子,我们可以观察下直接声明在suite的groups和声明在了test内的groups的运行情况。

  1. import org.testng.annotations.Test;

  2. public class TestGroupsScope {
  3.         //将会在suite内声明,因此所有Test都会运行这个组
  4.         @Test(groups = {"group1"})
  5.         public void methodGroup1(){        }
  6.        
  7.         //将会在Test1内声明,因此仅Test1运行了这个组
  8.         @Test(groups = {"group2"})
  9.         public void methodGroup2(){        }
  10.        
  11.         //将会在Test2内声明,因此仅Test2运行了这个组
  12.         @Test(groups = {"group3"})
  13.         public void methodGroup3(){        }
  14.        
  15.         //由于没有被列入需要被运行的组而不会运行
  16.         @Test(groups = {"group4"})
  17.         public void methodGroup4(){        }
  18. }
复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  3. <suite name="testSuite">
  4.         <groups>
  5.             <run>
  6.               <include name="group1"/>
  7.             </run>
  8.         </groups>
  9.        
  10.         <test name="test1">
  11.           <groups>
  12.             <run>
  13.               <include name="group2"/>
  14.             </run>
  15.           </groups>
  16.           <classes>
  17.             <class name="com.testng.TestGroupsScope"/>
  18.           </classes>
  19.         </test>
  20.        
  21.         <test name="test2">
  22.           <groups>
  23.             <run>
  24.               <include name="group3"/>
  25.             </run>
  26.           </groups>
  27.           <classes>
  28.             <class name="com.testng.TestGroupsScope"/>
  29.           </classes>
  30.         </test>
  31. </suite>
复制代码


从运行的结果可以看到,由于我在suite内说明需要运行group1因此在Test1和Test2内都运行了group1的Method,group2和group3的Method则只在各种声明的Test内运行,由于group4没有任何地方说需要运行它,因此它并没有运行。(组的exclude和include就像取补,include就是取某个集合,不管是exclude还是include,最后运行的内容都是全集和exclude include后的交集。)

注:如果我们仅是希望说暂时不跑某个方法,也不用这么麻烦来指定组然后exclude,而是可以直接在方法上将其enabled属性置为false。

最后提一下,组是可以包含其他组的,具体的语法如下:

下面的组all包含了functest组和checkintest组

  1. <test name="Regression1">
  2.   <groups>
  3.     <define name="all">
  4.       <include name="functest"/>
  5.       <include name="checkintest"/>
  6.     </define>
  7.   
  8.     <run>
  9.       <include name="all"/>
  10.     </run>
  11.   </groups>
  12.   
  13.   <classes>
  14.     <class name="test.sample.Test1"/>
  15.   </classes>
  16. </test>
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-13 03:39 , Processed in 0.064803 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表