1 - 介绍
TestNG是一个测试框架,旨在简化广泛的测试需求,从单元测试(测试一个孤立的类)到集成测试(测试包含几个类,几个包甚至几个外部框架,如应用服务器的系统)。
编写测试通常是以下三步过程:
一个简单的例子
package
example1;
import org.testng.annotations.*;
public class SimpleTest {
@BeforeClass
public void setUp() {
// code that will be invoked when this test is instantiated
}
@Test
(groups= { "fast" })
public void aFastTest() {
System.out.println( "Fast test" );
}
@Test (groups = { "slow" })
public void aSlowTest() {
System.out.println( "Slow test" );
}
}
|
|
本文档中使用的概念如下:
- suite由一个XML文件表示. 它可以包含一个或多个测试,由<suite>标记定义。
- test由 <test>表示,可以包含一个或多个TestNG的类。
- TestNG类是包含至少一个TestNG注解的Java类。它是由标签表示,并且可以包含一个或多个测试方法。
- 测试方法是一个Java方法,通过注解@Test表示。
一个TestNG的测试可以通过配置@BeforeXXX和@AfterXXX注解,实现在一些点之前或之后执行一些Java的逻辑,这些点可以是上面列出的任意一个点。
本教程的其余部分将解释以下内容:
- 所有注释的列表及简介。
- testng.xml文件描述及语法。
- 各种功能的详细列表,以及如何结合注释和testng.xml使用。
2 - 注释
下面是TestNG中提供的注释及其属性的概览。
@BeforeSuite @AfterSuite @BeforeTest @AfterTest @BeforeGroups @AfterGroups @BeforeClass @AfterClass @BeforeMethod @AfterMethod |
:TestNG类的配置信息 @BeforeSuite:在这个suite中的所有test运行之前,运行被注释的方法。 @AfterSuite:在这个suite的所有test运行之后,运行被注释的方法。 @BeforeTest:在标签类中的任何test方法运行之前,运行被注释的方法。 @AfterTest:在标签类中的所有test方法运行之后,运行被注释的方法。 @BeforeGroups:该配置方法将之前运行组的列表。此方法保证在调用属于这些组中的任何组的第一个测试方法之前不久运行。 @AfterGroups:该配置方法将后运行组的列表。此方法保证在调用属于这些组中的任何组的最后一个测试方法后不久运行。 @BeforeClass:被调用当前类的第一个测试方法之前被注释的方法将被运行。 @AfterClass:后在当前类中的所有测试方法已运行被注释的方法将被运行。 @BeforeMethod:被注释的方法将每个测试方法之前运行。 @AfterMethod:被注释的方法将每个测试方法之后运行。 |
|
alwaysRun |
对于before方法(beforeSuite,beforeTest,beforeTestClass和beforeTestMethod,但不是beforeGroups):如果设置为true,此配置方法将运行,而不管它属于什么组。 对于after方法(afterSuite,afterClass,...):如果设置为true,即使先前调用的一个或多个方法失败或被跳过,此配置方法也将运行。 |
|
dependsOnGroups |
此方法所依赖的组列表。 |
|
dependsOnMethods |
此方法依赖的方法列表。 |
|
启用 |
是否启用此类/方法的方法。 |
|
组 |
此类/方法所属的组列表。 |
|
inheritGroups |
如果为true,此方法将属于在类级别的@Test注释中指定的组。 |
|
@DataProvider |
将方法标记为为测试方法提供数据。注释的方法必须返回一个Object [] [],其中每个Object []可以分配测试方法的参数列表。想要从此DataProvider接收数据的@Test方法需要使用等于此注释名称的dataProvider名称。 |
|
名称 |
此数据提供者的名称。如果未提供,则此数据提供程序的名称将自动设置为方法的名称。 |
|
平行 |
如果设置为true,则使用此数据提供程序生成的测试并行运行。默认值为false。 |
|
@厂 |
将方法标记为工厂,返回将由TestNG用作Test类的对象。该方法必须返回Object []。 |
|
@听众 |
定义测试类上的侦听器。 |
|
值 |
的扩展类数组org.testng.ITestNGListener。 |
|
@Parameters |
描述如何将参数传递到@Test方法。 |
|
值 |
用于填充此方法的参数的变量列表。 |
|
@测试 |
将类或方法标记为测试的一部分。 |
|
alwaysRun |
如果设置为true,则此测试方法将始终运行,即使它依赖于失败的方法。 |
|
dataProvider |
此测试方法的数据提供者的名称。 |
|
dataProviderClass |
类在哪里寻找数据提供者。如果未指定,数据提供程序将查看当前测试方法的类或其基类之一。如果指定此属性,则数据提供程序方法需要在指定类上为静态。 |
|
dependsOnGroups |
此方法所依赖的组列表。 |
|
dependsOnMethods |
此方法依赖的方法列表。 |
|
描述 |
此方法的说明。 |
|
启用 |
是否启用此类/方法的方法。 |
|
expectedExceptions |
预期抛出测试方法的异常列表。如果没有异常或不同于此列表上的异常,此测试将被标记为失败。 |
|
组 |
此类/方法所属的组列表。 |
|
invocationCount |
应调用此方法的次数。 |
|
invocationTimeOut |
该测试对所有调用计数的累积时间应采用的最大毫秒数。如果未指定invocationCount,将忽略此属性。 |
|
优先 |
此测试方法的优先级。将首先安排较低的优先级。 |
|
successPercentage |
预期从此方法成功的百分比 |
|
单线程 |
如果设置为true,则此测试类上的所有方法都保证在同一线程中运行,即使测试当前正在使用parallel =“methods”运行。此属性只能在类级别使用,如果在方法级别使用,将被忽略。注意:使用被称为这个属性的顺序(废弃)。 |
|
时间到 |
此测试应采用的最大毫秒数。 |
|
threadPoolSize |
此方法的线程池大小。该方法将从invocationCount指定的多个线程中调用。 注意:如果未指定invocationCount,将忽略此属性 |
3 - testng.xml
您可以通过几种不同的方式调用TestNG:
本节介绍testng.xml格式
下面是一个testng.xml文件例子:
< suite name = "Suite1" verbose = "1" > |
< class name = "NoPackageTest" /> |
< test name = "Regression1" > |
< class name = "test.sample.ParameterSample" /> |
< class name = "test.sample.ParameterTest" /> |
你可以用包名替换类名,这样TestNG 会查找test.sample 包中所有的类,并将只保留有TestNG注释的类
< suite name = "Suite1" verbose = "1" > |
< test name = "Regression1" > |
< package name = "test.sample" /> |
你可以指定要包含和排除的组和方法:
< test name = "Regression1" > |
< exclude name = "brokenTests" /> |
< include name = "checkinTests" /> |
< class name = "test.IndividualMethodsTest" > |
< include name = "testMethod" /> |
你也可以在testng.xml中定义新的组并指定属性的详细信息,如是否并行,使用多少线程,是否正在运行JUnit测试,等等。
默认情况下,TestNG将按照XML文件顺序运行测试。如果你不想顺序运行这个文件中列出的类和方法,设置属性preserve-order 为false
< test name = "Regression1" preserve-order = "false" > |
< class name = "test.Test1" > |
< class name = "test.Test2" /> |
有关功能的完整列表,请参阅DTD。(testng.xml文档类型定义(dtd) http://testng.org/testng-1.0.dtd.php)
来源:http://testng.org/doc/documentation-main.html