在编写测试的过程中,我们经常遇到只想执行个别或者某一部分/某一类型的测试用例,这时我们可以使用TestNG的分组测试方法

分组测试在配置时,TestNG执行的原则是:只保留最小集合进行执行

看代码:

  1. /**
  2. *
  3. * <p>
  4. * Title: TestngGroups
  5. * </p>
  6. *
  7. * <p>
  8. * 对应配置文件testng-groups.xml
  9. * Description:使用groups进行分组测试,include和exclude的原则是保留最小集合,
  10. * </p>
  11. *
  12. * <p>
  13. * Company:
  14. * </p>
  15. *
  16. * @author : Dragon
  17. *
  18. * @date : 2014年10月13日
  19. */
  20. public class TestngGroups {
  21. @Test(groups = { "functest", "checkintest" })
  22. public void testMethod1() {
  23. System.err.println("groups = { functest, checkintest }");
  24. }
  25. @Test(groups = { "functest", "checkintest" })
  26. public void testMethod2() {
  27. System.err.println("groups = { functest, checkintest }");
  28. }
  29. @Test(groups = { "functest" })
  30. public void testMethod3() {
  31. System.err.println("groups = { functest }");
  32. }
  33. @Test(groups = { "checkintest" })
  34. public void testMethod4() {
  35. System.err.println("groups = { checkintest }");
  36. }
  37. }

配置文件:testng-groups.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
  3. <suite name="framework_testng">
  4. <test verbose="2" name="TestGroups">
  5. <groups>
  6. <run>
  7. <include name="functest" />
  8. <exclude name="checkintest" />
  9. </run>
  10. </groups>
  11. <classes>
  12. <class name="com.dragon.testng.annotation.TestngGroups" />
  13. </classes>
  14. </test>
  15. </suite>

执行结果:

  1. groups = { functest }
  2. PASSED: testMethod3
  3. ===============================================
  4. TestGroups
  5. Tests run: 1, Failures: 0, Skips: 0
  6. ===============================================
  7. ===============================================
  8. framework_testng
  9. Total tests run: 1, Failures: 0, Skips: 0
  10. ===============================================

当我们的测试用例累积了很多以后,我们可能不需要测试之前的分组,只要测试刚刚写好的分组,这时候testng提供了一种新的配置方式,来实现这一功能,让测试人员只修改配置文件就完成测试

注意:多个group测试时,xml文件dom顺序必须是'<groups>'标签必须在'<test>'标签内, 否则会 有空指针异常

  1. /**
  2. *
  3. * <p>
  4. * Title: TestngGroupsOfGroups
  5. * </p>
  6. *
  7. * <p>
  8. * 参考配置文件:testng-groupsOfGroups.xml
  9. * Description:使用<define>标签将测试方法在组内再次进行分组并以name属性进行区分,
  10. * <run>通过define标签的name进行调用,以后修改测试直接修改run调用的名称即可
  11. *
  12. * 注:<b>多个group测试时,xml文件dom顺序必须是'<groups>'标签必须在'<test>'标签内, 否则会 有空指针异常
  13. * </p>
  14. *
  15. * <p>
  16. * Company:
  17. * </p>
  18. *
  19. * @author : Dragon
  20. *
  21. * @date : 2014年10月13日
  22. */
  23. public class TestngGroupsOfGroups {
  24. @Test(groups = { "windows.xp" })
  25. public void testMethod5() {
  26. System.err.println("(groups = { windows.xp })");
  27. }
  28. @Test(groups = { "windows.7" })
  29. public void testMethod6() {
  30. System.err.println("(groups = { windows.7 })");
  31. }
  32. @Test(groups = { "windows.8" })
  33. public void testMethod7() {
  34. System.err.println("(groups = { windows.8 })");
  35. }
  36. }

配置文件:testng-groupOfGroups.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
  3. <suite name="framework_testng">
  4. <test verbose="2" name="TestGroupsOfGroups">
  5. <groups>
  6. <define name="windows.xp">
  7. <include name="windows.xp" />
  8. </define>
  9. <define name="windows.7">
  10. <include name="windows.7" />
  11. </define>
  12. <define name="all">
  13. <include name="windows.*" />
  14. </define>
  15. <run>
  16. <include name="all" />
  17. <exclude name="windows.7" />
  18. </run>
  19. </groups>
  20. <classes>
  21. <class name="com.dragon.testng.annotation.TestngGroupsOfGroups" />
  22. </classes>
  23. </test>
  24. </suite>

测试结果:(注意:此时 被运行的测试分组将在run标签内进行配置,include和exclude时,是根据Define标签的name来决定)

  1. (groups = { windows.xp })
  2. (groups = { windows.8 })
  3. PASSED: testMethod5
  4. PASSED: testMethod7
  5. ===============================================
  6. TestGroupsOfGroups
  7. Tests run: 2, Failures: 0, Skips: 0
  8. ===============================================

testNG参考资料:http://www.yiibai.com/html/testng/2013/0915300.html

http://www.cnblogs.com/TankXiao/p/3888070.html

TestNG的组测试和组中组测试的更多相关文章

  1. 【C语言】输入一组整数,求出这组数字子序列和中最大值

    //输入一组整数.求出这组数字子序列和中最大值 #include <stdio.h> int MAxSum(int arr[],int len) { int maxsum = 0; int ...

  2. Linux中组 与 用户的管理

    在linux中建立组的指令是 groupadd 组名 相应的,删除组的指令: groupdel 组名 查看自己用户的组: groups 一个用户可以在多个组里面,用这个命令可以将用户添加到组: add ...

  3. 获取AD域中SYSVOL和组策略首选项中的密码

    这种方法是最简单的,因为不需要特殊的“黑客”工具.所有的攻击必须做的是打开Windows资源管理器,并搜索域名为SYSVOL DFS共享的XML文件.在大多数情况下,以下XML文件将包含凭据:grou ...

  4. 【终端命令】组管理 和 Ubuntu中的"sudo"命令

    一.超级用户root 1.超级用户和标准用户 Linux系统中的root账户通常 用于系统的维护和管理,对操作系统的 所有资源 具有所有访问权限. 在大多数版本的Linux系统中,都 不推荐 直接使用 ...

  5. 性能测试工具JMeter 基础(六)—— 测试元件: 线程组

    线程组的定义: 线程组是测试计划执行的入口,所有的逻辑控制器和取样器都必须在线程组下,其他的元件根据位置的不同作用域是不同的. 线程组是每个线程都是独立运行测试脚本,一个线程组就等于一个用户,通过多个 ...

  6. windows组策略实验-本地组策略和域控组策略

    windows组策略实验-本地组策略和域控组策略 本地组策略只对本地计算机有效,域策略是计算机加入域环境后对加入域的一组计算机.用户定义的策略,便于管理 本地组策略: 一.实验环境 Windows 7 ...

  7. java 多线程 线程组ThreadGroup;多线程的异常处理。interrupt批量停止组内线程;线程组异常处理

    1,线程组定义: 线程组存在的意义,首要原因是安全.java默认创建的线程都是属于系统线程组,而同一个线程组的线程是可以相互修改对方的数据的.但如果在不同的线程组中,那么就不能"跨线程组&q ...

  8. Linux实际用户(组)ID,有效用户(组)ID,设置用户(组)ID

    实际用户(组)ID: 标识用户是谁,这两个字段在登录时取自口令文件中的登录项. 有效用户(组)ID: 决定了对文件的访问权限,通常有效用户(组)ID等于实际用户(组)ID,谁运行有效ID就等于谁的实际 ...

  9. Codevs 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组

    1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 今年是国 ...

随机推荐

  1. 3.Smarty的基本语法

    一.注释的方法是 {* 这里填注释 *} 二.在Smarty的输出赋值进来的变量 1.变量是字符串的时候 1)关联数组 $arr = array('a'=>'cai','b'=>'muqi ...

  2. 普通RAID磁盘数据格式规范

    普通RAID磁盘数据格式规范 1.介绍 在当今的IT环境中,系统管理员希望改变他们正在使用的内部RAID方案,原因可能有以下几个:许多服务器都是附带RAID解决方案的,这些RAID解决方案是通过母板磁 ...

  3. MVC通过递归+部分视图实现评论

    前一个项目里有一个关于评论系统的需求.感觉这个评论的实现还是蛮好玩的,所以记录下这个系统的实现相关内容. 功能需求: 1.用户可以再视屏下方留言. 2.用户可以再别的用户留言下方回复. 3.用户可以删 ...

  4. Kubernetes服务之“运行单实例的有状态服务”

    目标 在你的环境中创建一个PV 创建一个MySQl的Deployment 在集群中以DNS名称的方式,将MySQL暴露给其他的pod 开始之前 你需要一个Kubernetes集群,一个可以连接到集群的 ...

  5. 华为CloudIDE免费公测,带你出坑带你飞

    你的代码仓库上线了吗?是不是有时候遇到这样的问题? 只想浏览一下代码,却发现线上浏览效果不佳,高亮显示什么的都没有.而在桌面端浏览要需要先同步代码,再用桌面端的IDE打开.尤其是使用git的时候,先要 ...

  6. 浅谈游戏中BOSS设计的思路

    对于大多数游戏来说,BOSS在其设计上都有着不可替代的作用,也是玩家印象最为深刻的一部分.近期自己也有在做BOSS的设计工作,有一些心得想要分享一下: 1.明确BOSS的设计目的 在设计之初,我们一定 ...

  7. Openfire3.9.1+jdk1.7导入到eclipse中

    Openfire3.9.1+jdk1.7导入到eclipse中 写这篇文章,也是记录一下自己几晚上的辛苦,因为作为新手在网上看了很多的资料,但是按照他们的我总是出不来,跟他们描述的不一致,可能是环境问 ...

  8. 如何制作一个完美的全屏视频H5

    写在前面的话: 最近一波H5广告火爆整个互联网圈,身为圈内人,我们怎能     不! 知!道! :( 嘘!真不知道的也继续看下去,有收获 ↓ ) So,搞懂这个并不难. 这篇文章将带你从头到尾了解H5 ...

  9. LuaFramework热更新过程(及可更新的loading界面实现)

          1.名词解释: 资源包:点击 LuaFramework  |  Build XXX(平台名) Resource,框架会自动将自定义指定的资源打包到StreamingAssets文件夹,这个 ...

  10. MQ通道搭建以及连通性检查

    场景:项目开发中使用的mq中间件一直不太熟悉,遇到问题就需要问人,公司的同事也不怎么爱搭理,弄的好受伤!不熟悉的时候只是感觉好难,逼的没办法,好好研究下,发现里面的过程也没想象中的难, 经过一番研究, ...