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

简介

  其实这篇文章的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”组:

package hongge;

import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import hongge.TestSum;

/**
 * @author 北京-宏哥
 *
 * java自动化测试交流群:694280102
 *
 * Java自动化测试框架-03 - TestNG之Test Group篇
 *
 * 2019年10月22日
 */
public class Test1 {
    @Test(groups = { "functest", "checkintest" })
      public void testMethod1() {
      }
      @Test(groups = {"functest", "checkintest"} )
      public void testMethod2() {
      }
      @Test(groups = { "functest" })
      public void testMethod3() {
      }
}

通过下面的内容调用TestNG

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

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

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

package hongge;

import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import hongge.TestSum;

/**
 * @author 北京-宏哥
 *
 * java自动化测试交流群:694280102
 *
 * Java自动化测试框架-03 - TestNG之Test Group篇
 *
 * 2019年10月22日
 */
@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() {
     }
}

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

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

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

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

二、MetaGroups(组中组

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

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

三、排除组

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

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

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

package hongge;

import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import hongge.TestSum;

/**
 * @author 北京-宏哥
 *
 * java自动化测试交流群:694280102
 *
 * Java自动化测试框架-03 - TestNG之Test Group篇
 *
 * 2019年10月22日
 */
@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>  

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

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

四、局部组

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

package hongge;

import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import hongge.TestSum;

/**
 * @author 北京-宏哥
 *
 * java自动化测试交流群:694280102
 *
 * Java自动化测试框架-03 - TestNG之Test Group篇
 *
 * 2019年10月22日
 */
@Test(groups = { "checkin-test" })
public class All {
@Test(groups = { "func-test" )
public void method1() { ... }
public void method2() { ... }
}  

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

五、方法组

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

<test name="Test1">

  <classes>

    <class name="example1.Test1">

      <methods>

        <include name=".*enabledTestMethod.*"/>

        <exclude name=".*brokenTestMethod.*"/>

      </methods>

     </class>

  </classes>

</test>

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

小结

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

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

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

                                                                 

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

原文地址:https://www.cnblogs.com/du-hong/p/11696589.html

时间: 2024-10-07 06:55:38

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

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

1.-依赖注入 TestNG支持两种不同类型的依赖项注入:本机(由TestNG本身执行)和外部(由诸如Guice的依赖项注入框架执行). 1.1-本机依赖项注入 TestNG允许您在方法中声明其他参数.发生这种情况时,TestNG将自动用正确的值填充这些参数.依赖注入可以在以下地方使用: 任何@Before方法或@Test方法都可以声明ITestContext类型的参数.任何@AfterMethod方法都可以声明ITestResult类型的参数,该参数将反映刚刚运行的测试方法的结果.任何@Bef

jdk源码阅读笔记之java集合框架(一)(基础篇)

结合<jdk源码>与<thinking in java>,对java集合框架做一些简要分析(本着实用主义,精简主义,遂只会挑出个人认为是高潮的部分). 先上一张java集合框架的简图: 会从以下几个方面来进行分析: java 数组; ArrayList,LinkedList与Vector; HashMap; HashSet 关于数组array: 数组的解释是:存储固定大小的同类型元素.由于是"固定大小",所以对于未知数目的元素存储就显得力不从心,遂有了集合.

java集合框架03

Collections工具类的使用 public class News implements Comparable { private int id; //新闻编号 private String title; //新闻标题 @Override public String toString() { return "新闻 [编号=" + id + ", 标题=" + title + "]"; } public News() { //无参构造 supe

Java+Maven+selenium+testing+reportNG自动化测试框架

最近公司新出了一个产品,需要搭建自动化测试框架,这是一个学以至用的好机会,跟上级申请后,决定搭建一个java自动化测试框架. Java自动化测试对我来讲可以说不难不易,因为java是我大学在校四年学的主要开发语言,但是毕业这么多年没写了难免生疏. weiUI自动化测试需要掌握以下几点:一是获取元素,java获取元素对象与python差不多,用的是findElement方法,不过我在搭建框架过程中为了实现PO模式,从万能的百度中获知还有个一更好的类FindBy,FindBy+PageFactory

Selenium+java - 手把手一起搭建一个最简单自动化测试框架

写在前面 我们刚开始做自动化测试,可能写的代码都是基于原生写的代码,看起来特别不美观,而且感觉特别生硬. 来看下面一段代码,如下图所示: 从上面图片代码来看,具体特征如下: driver对象在测试类中显示 定位元素的value值在测试类中显示 定位元素的方式(By对象)在测试类中显示 代码一报错,还要去测试类里面找是哪段代码报错,要是代码行数几百行时呢,就不好定位问题了 这样的测试脚本组装批量执行,批量报错后,怒号排查,定位问题,很吃力 看看自己有几条命中呢,其他现象就不一一列举了. 1.为什么

解决TestNG 自动化测试框架如何安装到eclipse中

TestNG 自动化测试框架如何安装到eclipse中 ??? 解释:  TestNG 其实就是一个插件(个人理解为eclipse 中的插件 ) 开门见山---写步骤 : 1.下载testng 安装包 : 2.将安装包解压好后放到eclipse目录下 :eclipse -- > dropins 3.检查下eclipse中是否安装成功 :如图!

自动化测试框架比较

3.Ant+Selenium+Testng+Jenkins 这是我现在正在研究并使用的框架.(ps:jenkins这...还没用到.原来听说了hudson的强大,这个升级版估计会更有使用价值,未来研究)我这里说的selenium没有区分RC还是webdriver,两者各有千秋又互相补充,兼而用之即可.还是先说优点:第一:它开源不要钱!很多时候这是最关键的一点..当你在研究或推行一套框架的时候,价格是不得不考虑的因素.第二:灵活性,比RFT更加灵活,因为更加入了xpath(当然大型项目的脚本里xp

避免重复造轮子的UI自动化测试框架开发

一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览器的基本上底层都是selenium,驱动无线app和浏览器基本是appium.monkey之类的,底层都是基于官方支持的自动化测试框架开发而来,然后上层又做了各种封装 首先在开始计划开发自动化时,第一步是了解目前已有的自动化开发技术,上面说了,最底层的就那几种,根据实际要去测试的业务需求选择合适的自

接口自动化测试框架 (一) :APIAutoTest框架

前言 随着测试技术的发展,接口自动化测试逐渐成为各大公司投入产出比最高的测试技术.介入时间早,执行效率高,稳定性高的优点,让越来越多的公司引入接口自动化测试. 框架简介 APIAutoTest是处理API接口的轻量级自动化测试框架,Java语言实现,基于TestNG测试框架,支持持续集成,自动构建与测试. 框架介绍 1.    数据驱动设计,使用TestNG中的@DataProvider读取Excel中存储的自动化测试用例. 2.    基于TestNG测试框架 3.    使用HttpClie