testNG官方文档翻译-5 测试方法,测试类和测试组
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 测试方法,测试类和测试组的更多相关文章
- testNG官方文档翻译-2 注解
这里是一份TestNG中的可用注解及其属性的概述. 一.用于一个TestNG类的信息配置的注解: @BeforeSuite:被BeforeSuite注解的方法将在其所在suite中的所有test运行之 ...
- testNG官方文档翻译-3 testng.xml
你可以通过以下几种不同的方法触发TestNG: 用一个testng.xml文件 使用ant 从命令行触发 这个章节将会介绍testng.xml的格式(你也可以在下面找到关于ant和命令行的内容). 关 ...
- testNG官方文档翻译-1 简介
官方文档链接http://testng.org/doc/documentation-main.html 简介 TestNG是一个被设计用来简化广泛的测试需求的测试框架,它既可应用于单元测试(测试一个独 ...
- testNG官方文档翻译-4 运行TestNG
TestNG可以通过不同的方法触发运行: 命令行 ant Eclipse IntelliJ's IDEA
- 12、testng.xml指定运行测试包、测试类、测试方法
目录如下: TestFixture.java 代码如下: package com.testng.cn; import org.testng.annotations.*; public class Te ...
- TestNG之执行测试类方式
TestNG提供了很多执行方式,下面做简单介绍. 1.XML指明测试类,按照类名执行,其中可以指定包名,也可指定无包名: 带包名,运行ParameterSample类和ParameterTest类 & ...
- python+pytest接口自动化(11)-测试函数、测试类/测试方法的封装
前言 在python+pytest 接口自动化系列中,我们之前的文章基本都没有将代码进行封装,但实际编写自动化测试脚本中,我们都需要将测试代码进行封装,才能被测试框架识别执行. 例如单个接口的请求代码 ...
- spring 测试类test测试方法
实例掩码地址为:孔浩组织结构设计 web.xml配置文件: <!-- Spring 的监听器可以通过这个上下文参数来获取beans.xml的位置 --> <context-param ...
- Spring官方文档翻译(1~6章)
Spring官方文档翻译(1~6章) 转载至 http://blog.csdn.net/tangtong1/article/details/51326887 Spring官方文档.参考中文文档 一.S ...
随机推荐
- Selenium:三种等待方式详解
我们在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间. 我们平常用到的有三种等待方式: 强制等待 隐式等待 显示等待 一. ...
- (转)SQL注入原理
原文地址:http://www.cnblogs.com/rush/archive/2011/12/31/2309203.html SQL Injection:就是通过把SQL命令插入到Web表单递交或 ...
- pytorch与numpy中的通道交换问题
pytorch网络输入图像的格式为(C, H, W),而numpy中的图像的shape为(H,W,C) 所以一般需要变换通道,将numpy中的shape变换为torch中的shape. 方法如下: # ...
- Cocos2d Box2D之静态刚体
| 版权声明:本文为博主原创文章,未经博主允许不得转载. b2_staticBody 在模拟环境下静态物体是不会移动的,就好像有无限大的质量.在Box2D的内部会将质量至反,存储为零.静态物体也可 ...
- 8条关于Web前端性能的优化建议
一般网站优化都是优化后台,如接口的响应时间.SQL优化.后台代码性能优化.服务器优化等.高并发情况下,对前端web优化也是非常重要的. 下面说说几种常见的优化措施. 1.HTML CSS JS位置 一 ...
- Java_2.Java编程规范
Java源程序有一些约定俗成的命名规定,如下: 包名:全小写名词,如java.util.List 类名:首字母大写,通常由多个单词合成一个类名,每个首字母都大写,如StudentServiceImpl ...
- C++大整数类模板
参考 :http://172.21.85.56/oj/resource/reportdetail?report_id=1678 支持 =.abs().pow().+=.-= *=./=.%=.+.-. ...
- Vue-router路由的简单使用
一.安装路由: 如果使用vue-cli脚手架搭建,项目创建过程中会提示你自否选择使用vue-router,选择使用即可, 二.创建组件 1.vue-cli项目自动创建的路由文件是src包下面的rout ...
- HTML 使用CSS 如何去掉文本聚焦框 HTML 使用CSS 如何去掉文本聚焦框 : outline 值设为none 修改input、textarea输入框placeholder样式
HTML 使用CSS 如何去掉文本聚焦框 : outline 值设为none 修改input.textarea输入框placeholder样式 兼容性代码: input::-webkit-input ...
- C常量与变量
/** * C中的常量与变量 * 常量的值在程序中是不可变化的,其在定义时必须给一个初始值 * 常量的定义方式: * 1.#define 定义宏常量 * 2.const 定义const常量 * 对于# ...