简介

  其实这篇文章的group宏哥在上一篇中就提到过,但是就是举例一笔带过的,因此今天专门有一篇文章来讲解Group的相关知识。希望大家茅塞顿开 ,有着更进一步认识和了解测试组。

一、Test Group(测试组)

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

  组(Group)在testng.xml文件中指定,可以在<test>或<suite>标记下找到。<suite>标记中指定的组适用于下面的所有<test>标记。请注意,组在这些标记中是累积的:如果在<suite>中指定组“a”,在<test>中指定“b” ,则将包括“a”和“b”。

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

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

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

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

TestNG允许您以非常直观的方式使用测试组指定。例如,您可以通过说明您的整个测试类属于“functest”组来构建测试,另外还有一些方法属于“checkintest”组:

  1. package hongge;
  2.  
  3. import org.testng.annotations.Test;
  4. import static org.testng.Assert.assertEquals;
  5. import hongge.TestSum;
  6.  
  7. /**
  8. * @author 北京-宏哥
  9. *
  10. * java自动化测试交流群:694280102
  11. *
  12. * Java自动化测试框架-03 - TestNG之Test Group篇
  13. *
  14. * 2019年10月22日
  15. */
  16. public class Test1 {
  17. @Test(groups = { "functest", "checkintest" })
  18. public void testMethod1() {
  19. }
  20. @Test(groups = {"functest", "checkintest"} )
  21. public void testMethod2() {
  22. }
  23. @Test(groups = { "functest" })
  24. public void testMethod3() {
  25. }
  26. }

通过下面的内容调用TestNG

  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环境下,你的测试会看起来像:

  1. package hongge;
  2.  
  3. import org.testng.annotations.Test;
  4. import static org.testng.Assert.assertEquals;
  5. import hongge.TestSum;
  6.  
  7. /**
  8. * @author 北京-宏哥
  9. *
  10. * java自动化测试交流群:694280102
  11. *
  12. * Java自动化测试框架-03 - TestNG之Test Group篇
  13. *
  14. * 2019年10月22日
  15. */
  16. @Test
  17. public class Test1 {
  18. @Test(groups = {"windows.checkintest"})
  19. public void testWindowsOnly() {
  20. }
  21. @Test(groups = {"linux.checkintest"})
  22. public void testLinuxOnly() {
  23. }
  24. @Test(groups = {"windows.functest"})
  25. public void testWindowsToo() {
  26. }
  27. }

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

  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(组中组

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

  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()会中断,所以我希望使其失效:

  1. package hongge;
  2.  
  3. import org.testng.annotations.Test;
  4. import static org.testng.Assert.assertEquals;
  5. import hongge.TestSum;
  6.  
  7. /**
  8. * @author 北京-宏哥
  9. *
  10. * java自动化测试交流群:694280102
  11. *
  12. * Java自动化测试框架-03 - TestNG之Test Group篇
  13. *
  14. * 2019年10月22日
  15. */
  16. @Test(groups = {"checkintest", "broken"} )
  17. public void testMethod2() {}

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

  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。

四、局部组

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

  1. package hongge;
  2.  
  3. import org.testng.annotations.Test;
  4. import static org.testng.Assert.assertEquals;
  5. import hongge.TestSum;
  6.  
  7. /**
  8. * @author 北京-宏哥
  9. *
  10. * java自动化测试交流群:694280102
  11. *
  12. * Java自动化测试框架-03 - TestNG之Test Group篇
  13. *
  14. * 2019年10月22日
  15. */
  16. @Test(groups = { "checkin-test" })
  17. public class All {
  18. @Test(groups = { "func-test" )
  19. public void method1() { ... }
  20. public void method2() { ... }
  21. }

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

五、方法组

你可以排除或者包含单个方法

  1. <test name="Test1">
  2.  
  3. <classes>
  4.  
  5. <class name="example1.Test1">
  6.  
  7. <methods>
  8.  
  9. <include name=".*enabledTestMethod.*"/>
  10.  
  11. <exclude name=".*brokenTestMethod.*"/>
  12.  
  13. </methods>
  14.  
  15. </class>
  16.  
  17. </classes>
  18.  
  19. </test>

这可以派上用来停用单个方法而不必重新编译任何东西,但我不建议过多地使用这种技术,因为如果你开始重构Java代码(正则表达式中使用的正则表达式),它会使你的测试框架崩溃。标签可能不再符合您的方法)。

小结

  嘿嘿!今天就分享到这里。下一篇计划是测试方法(Test Method),希望小伙伴们和童鞋们喜欢和继续关注宏哥!

有问题加入java自动化测试交流群:694280102

个人公众号                                                             微信群 (微信群已满100,可以加宏哥的微信拉你进群,请备注:进群)          

                                                                 

您的肯定就是我进步的动力。如果你感觉还不错,就请鼓励一下吧!记得点波 推荐 哦!!!(点击右边的小球即可!(^__^) 嘻嘻……)

Java自动化测试框架-03 - TestNG之Test Group篇 - 我们一起组团打怪升级(详细教程)的更多相关文章

  1. Java自动化测试框架-04 - TestNG之Test Method篇 - 道法自然,法力无边(详细教程)

    简介 按照上一篇的计划,这一篇给小伙伴们分享一下测试方法. 一.设置参数 测试方法是可以带有参数的.每个测试方法都可以带有任意数量的参数,并且可以通过使用TestNG的@Parameters向方法传递 ...

  2. Java自动化测试框架-09 - TestNG之依赖注入篇 (详细教程)

    1.-依赖注入 TestNG支持两种不同类型的依赖项注入:本机(由TestNG本身执行)和外部(由诸如Guice的依赖项注入框架执行). 1.1-本机依赖项注入 TestNG允许您在方法中声明其他参数 ...

  3. Java自动化测试框架-10 - TestNG之测试结果篇

    1.-测试结果 1.1-成功,失败和断言 测试被认为是成功的,如果它不引发任何异常完成,还是它扔的预期异常(请参阅文档expectedExceptions属性上找到的@Test注释). 您的测试方法通 ...

  4. Java自动化测试框架-02 - TestNG之理论实践 - 纸上得来终觉浅,绝知此事要躬行(详细教程)

    理论 TestNG,即Testing, NextGeneration,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用 ...

  5. Java自动化测试框架-08 - TestNG之并行性和超时篇 (详细教程)

    一.并行性和超时 您可以指示TestNG以各种方式在单独的线程中运行测试. 可以通过在suite标签中使用 parallel 属性来让测试方法运行在不同的线程中.这个属性可以带有如下这样的值: 二.并 ...

  6. Java自动化测试框架-02 - TestNG之理论到实践

    TestNG,即Testing, NextGeneration,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用来做集 ...

  7. Java自动化测试框架-01 - TestNG之入门篇 - 大佬的鸡肋,菜鸟的盛宴(详细教程)

    TestNG是什么? TestNG按照官方的定义: TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便. TestNG是一个开源自动化测试框 ...

  8. Java自动化测试框架-07 - TestNG之Factory篇 - 欢快畅游梦幻工厂(详细教程)

    简介 最近忙着装修博客园,没时间更新文章,今天终于抽出时间把上次写的一半的文章给写完了,新的博客园风格,希望大家喜欢.今天继续介绍testng的相关知识--工厂. 工厂允许你动态的创建测试.例如,假设 ...

  9. Java自动化测试框架-11 - TestNG之annotation与并发测试篇 (详细教程)

    1.简介 TestNG中用到的annotation的快速预览及其属性. 2.TestNG基本注解(注释) 注解 描述 @BeforeSuite 注解的方法只运行一次,在当前suite所有测试执行之前执 ...

随机推荐

  1. 基础知识:Mysql基本操作命令

    启动mysql :  mysql -hlocalhost -uroot -p 创建数据库:create database 数据库名字; 指定要操作的数据库:use 数据库名字; 查看数据表建表语句:s ...

  2. 未能加载文件或程序集“Renci.SshNet, Version=2016.1.0.0, Culture=neutral, PublicKeyToken=……”

    emmmm~ 这是一个让人烦躁有悲伤的问题~ 背景 我也不知道什么原因,用着用着,正好好的,就突然报了这种问题~ 未能加载文件或程序集“Renci.SshNet, Version=2016.1.0.0 ...

  3. Hadoop学习笔记—20.网站日志分析项目案例

    1.1 项目来源 本次要实践的数据日志来源于国内某技术学习论坛,该论坛由某培训机构主办,汇聚了众多技术学习者,每天都有人发帖.回帖,如图1所示. 图1 项目来源网站-技术学习论坛 本次实践的目的就在于 ...

  4. Escape (BFS + 模拟)

    Problem Description The students of the HEU are maneuvering for their military training. The red arm ...

  5. JavaScript之JSON&AJAX

    今天为大家讲解JavaScript中非常流行的数据传输形式JSON和异步技术AJAX技术. 一 JSON JSON的全称是JavaScript Object Notation(js对象表示法),它是一 ...

  6. Linux Centos7部署环境安装-CentOS

    Linux Centos7部署环境安装-CentOS Centos7部署环境安装及Linux常用命令 centos系统下各文件夹的作用 centos7修改系统默认语言 centos7安装rz/sz命令 ...

  7. [vue] vue服务端渲染nuxt.js

    初始化 使用脚手架工具 create-nuxt-app 快速创建 npx create-nuxt-app <项目名> npx create-nuxt-app 执行一些选择 在集成的服务器端 ...

  8. C# 时间戳的相关操作

    一般的 时间戳 格式分为两种 即 10位(秒)时间戳 与 13位(毫秒)时间戳 时间戳 类型也分为两种 即 本地时间戳 与 世界统一(UTC)时间戳 废话不多说,直接上代码: 一.时间戳获取方法 // ...

  9. Hadoop点滴-外围概念

    有句话说的好“大数据胜于好算法” 硬盘存储容量在不断提升的同时,访问速度(硬盘数据读取速度)却没有同步增长:1990年,访问全盘需要5分钟,20年后,需要2.5小时 不同的业务大数据,存储在一套HDF ...

  10. dede tag标签静态化

    看回那2个文件夹即可,txt说明书我已经修改过. 下面说一下tag标签静态化之后在内容页.列表页中如何使用. 内容页中沿用之前的方法即可: {dede:tag sort='new' getall='0 ...