5.1 - 测试方法

测试方法是被 @Test注解的方法。这些方法的返回值会被忽略,除非在testng.xml中将allow-return-values设置为true。

<suite allow-return-values="true">
or
<test allow-return-values="true">

5.2 - 测试组

使用TestNG可以执行一些复杂的测试组。这意味着你不仅可以声明一些测试方法属于某个组,还可以定义一些组属于另一个组。然后TestNG将会被触发执行,并且执行被包含的组排除被排除的组。这个特点让我们能方便的分割你的测试方法,并且可以在不再次编译的前提下连续执行两个不同的测试组。

组是在testng.xml文件中定义的,它可以被放置在test或者suite标签下。被定义在suite标签下的组将会作用于所有的test。需要注意的是组在这些标签下是累加的,如果你在suite中定义了一个组“a”在test中定义了一个组“b”,那么“a”和“b”都会被包含。

比如,一般一个suite中至少会有两类test:

  • Check-in tests:这些测试需在你每次提交新代码之前执行。它们通常需要快速执行,用来确保软件基本功能未被破坏。
  • Functional tests:这些测试需要覆盖你的软件中的所有功能并且至少要一天执行一次,而在理想情况下应该不间断连续执行。

通常,check-in 测试是functional测试的子集。在TestNG中,使用测试组可以很直观的定义上述需求。例如,你可以将你的整个测试类声明为属于“functest”这个组,另外将一部分测试方法声明为属于“checkintest”组:

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上运行,你的测试类如下所示:

@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用的是正则表达式,而不是wildmats。注意这两者的不同(比如“任意字符”是通过“.*“匹配的,而不是”*“)。

方法组:

你也可以单独的包含或排出一些方法(通过方法名):

<test name="Test1">
<classes>
<class name="example1.Test1">
<methods>
<include name=".*enabledTestMethod.*"/>
<exclude name=".*brokenTestMethod.*"/>
</methods>
</class>
</classes>
</test>

这样你就可以方便的在不再次编译的情况下停用一个测试方法,但是我不建议这样使用。因为如果你开始重构你的java代码,上述方法可能会使你的测试框架被破坏。(在标签中被使用的正则表达式可能不误再匹配你的测试方法)。

5.3 组中组

组中也可以包含其他组。这些组被称为“MetaGroups”。比如,你也许想要定义一个包含“checkintest”组和“functest”组的“all”组。“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>

5.4 排除组

TestNG可以包含组,也可以排除它们。

例如,一次临时更改经常可能导致部分方法执行失败,但你又没有时间立即修复问题。然而,你又想要干净的运行functional 测试,所以你需要停用这些失败方法,但仍保留在那里,因为你以后会再次运行。

解决这个问题的一个简单方式是创建一个“broken”组,将这些失败方法包含在该组中。比如在下面这个例子中,我知道testMethod2()这个方法现在是失败的所以我将它停用:

@Test(groups = {"checkintest", "broken"} )
public void testMethod2() {
}

我需要做的就是在run中排除这个组:

<test name="Simple example">
<groups>
<run>
<include name="checkintest"/>
<exclude name="broken"/>
</run>
</groups> <classes>
<class name="example1.Test1"/>
</classes>
</test>

这样,我将能得到一个干净的测试,同时能够保持对失败的需要以后修复的测试方法的追踪。

注意:你也可以简单的在 @Test和 @Before/After注解的方法上使用“enabled”属性来停用单个测试方法。

5.5 部分组

你可以在类级别定义组,然后在方法级别添加别的组:

@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”。

5.6 参数

测试方法并非必须是非参数的。你可以在每一个测试方法上使用任意数量的参数,TestNG使用 @Parameters注解正确传递参数。

有两种方法来设置参数:用testng.xml文件或者以编程方式。

5.6.1 来自testng.xml的参数

testNG官方文档翻译-5 测试方法,测试类和测试组的更多相关文章

  1. testNG官方文档翻译-2 注解

    这里是一份TestNG中的可用注解及其属性的概述. 一.用于一个TestNG类的信息配置的注解: @BeforeSuite:被BeforeSuite注解的方法将在其所在suite中的所有test运行之 ...

  2. testNG官方文档翻译-3 testng.xml

    你可以通过以下几种不同的方法触发TestNG: 用一个testng.xml文件 使用ant 从命令行触发 这个章节将会介绍testng.xml的格式(你也可以在下面找到关于ant和命令行的内容). 关 ...

  3. testNG官方文档翻译-1 简介

    官方文档链接http://testng.org/doc/documentation-main.html 简介 TestNG是一个被设计用来简化广泛的测试需求的测试框架,它既可应用于单元测试(测试一个独 ...

  4. testNG官方文档翻译-4 运行TestNG

    TestNG可以通过不同的方法触发运行: 命令行 ant Eclipse IntelliJ's IDEA

  5. 12、testng.xml指定运行测试包、测试类、测试方法

    目录如下: TestFixture.java 代码如下: package com.testng.cn; import org.testng.annotations.*; public class Te ...

  6. TestNG之执行测试类方式

    TestNG提供了很多执行方式,下面做简单介绍. 1.XML指明测试类,按照类名执行,其中可以指定包名,也可指定无包名: 带包名,运行ParameterSample类和ParameterTest类 & ...

  7. python+pytest接口自动化(11)-测试函数、测试类/测试方法的封装

    前言 在python+pytest 接口自动化系列中,我们之前的文章基本都没有将代码进行封装,但实际编写自动化测试脚本中,我们都需要将测试代码进行封装,才能被测试框架识别执行. 例如单个接口的请求代码 ...

  8. spring 测试类test测试方法

    实例掩码地址为:孔浩组织结构设计 web.xml配置文件: <!-- Spring 的监听器可以通过这个上下文参数来获取beans.xml的位置 --> <context-param ...

  9. Spring官方文档翻译(1~6章)

    Spring官方文档翻译(1~6章) 转载至 http://blog.csdn.net/tangtong1/article/details/51326887 Spring官方文档.参考中文文档 一.S ...

随机推荐

  1. QTP中类的使用(转)

    Call Test Class Tester Dim mvarTesterName,mvarAge,mvarGender                        Sub Class_Initia ...

  2. HDU3951_Coin Game

    Coin Game Problem Description 一堆n个硬币围成一圈,两个人轮流拿走连续k个硬币,拿走最后一堆的人获胜 问你第一个人获胜还是第二个 思路: 这是NIM游戏改编版本 但是道理 ...

  3. Embedding和Word2Vec实战

    在之前的文章中谈到了文本向量化的一些基本原理和概念,本文将介绍Word2Vec的代码实现 https://www.cnblogs.com/dogecheng/p/11470196.html#Word2 ...

  4. window.location.search 为何在url 带# 号时获取不到 ?

    我们在获取url参数时,会常常用到截取参数 getUrlParam(name) { const reg = new RegExp('(^|&)' + name + '=([^&]*)( ...

  5. 第一节 初识RabbitMQ

    原文:第一节 初识RabbitMQ 版权声明:未经本人同意,不得转载该文章,谢谢 https://blog.csdn.net/phocus1/article/details/87280120 1.什么 ...

  6. .Net Core应用RabbitMQ,及简单封装

    首先,还是万分感谢大家能够抽空来阅读我的文章,万分感谢.今天我带来的是.Net Core中应用RabbitMQ,和简单封装.因为昨天的文章里说了今天要写,所以今天一定要写出来.小编翻阅了很多资料,想要 ...

  7. C#解惑:HashSet<T>类

    原贴: https://blog.csdn.net/X_X_OO/article/details/52529548 https://www.cnblogs.com/refuge/p/9465466.h ...

  8. Vue-基础(一)

    一.Vue中的常用指令 什么是指令? 指令就是vue中提供的一些对于页面和数据更为方便的操作, 指令就是以数据去驱动DOM行为的,简化DOM的操作 常用指令 v-text / v-html :用于为标 ...

  9. SQL数据库—<9>数据库安全

    --创建登陆用户 --create login login_name from windows with default_database = database | default_language ...

  10. python实现发送文本邮件

    简单实现了python发送文本邮件 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/4/25 17:09 # @Author ...