走进Java接口测试大门之测试框架TestNG

 一、简介

TestNG 是一个受 JUnit 和 NUnit 启发的测试框架,旨在简化广泛的测试需求,从单元测试到接口测试。 但引入了一些新功能,使其更强大,更易于使用,例如:

  • 注释。
  • 在线程池中运行测试,并提供各种可用策略(单线程,多线程等等)
  • 测试的代码是多线程安全的
  • 灵活的测试配置
  • 支持数据驱动的测试(使用 @DataProvider)
  • 支持参数化
  • 强大的执行模型(不再是 TestSuite)
  • 由各种工具和插件(Eclipse,IDEA,Maven 等)支持。
  • 嵌入 BeanShell 脚本以获得更大的灵活性
  • 用于运行时和日志记录的缺省 JDK 函数(无依赖项)
  • 应用服务器测试的依赖方法
  • TestNG旨在涵盖所有类别的测试:单元,接口,端到端,集成等......

二、快速 Demo

编写测试通常需要三个步骤:

  • 编写测试代码插入TestNG注释。
  • 在 testng.xml 中添加有关测试的信息(例如:类名,要运行的组等)。
  • 运行TestNG。

一个快速示例

package example1;

import org.testng.annotations.*;

public class SimpleTest {
 
 @BeforeClass
 public void setUp() {
   // 实例化时调用此代码
 }
 
 @Test(groups = { "fast" })
 public void aFastTest() {
   System.out.println("Fast test");
 }
 
 @Test(groups = { "slow" })
 public void aSlowTest() {
    System.out.println("Slow test");
 }
}
复制代码

在构建测试类之后和运行任何测试方法之前,将调用 方法 setUp()。在这个例子中,我们将快速运行组,所以 aFastTest() 将被调用,而 aSlowTest() 将被跳过。

注意事项:

  • 无需扩展类或实现接口。
  • 尽管上面的示例使用了JUnit 约定,但我们的方法可以被称为任何名称,它是告诉 TestNG 它们是什么的注释。
  • 测试方法可以属于一个或多个组。
  • 将测试类编译到构建目录后,可以使用命令行,ant 任务(如下所示)或 XML 文件调用测试

 
 
   
   
 

 
          
 
   
     
   
 
 

复制代码

使用用 ant 调用它

c:> ant
Buildfile: build.xml
 
test:
[testng] Fast test
[testng] ===============================================
[testng] Suite for Command line test
[testng] Total tests run: 1, Failures: 0, Skips: 0
[testng] ===============================================
 
 
BUILD SUCCESSFUL
Total time: 4 seconds
复制代码

然后,可以浏览测试结果:

start test-output\index.html (on Windows)
复制代码

本文档中使用的概念如下:

  • 测试套件由一个 XML 文件表示。它可以包含一个或多个测试,并由 < suite > 标记定义。
  • 测试由 < test > 表示,可以包含一个或多个 TestNG 类。
  • TestNG 类是一个包含至少一个 TestNG 注释的 Java 类。它由 < class > 标记表示,可以包含一个或多个测试方法。
  • 测试方法是由源中的 @Test 注释的 Java 方法。

可以通过 @BeforeXXX 和 @AfterXXX 注释来配置 TestNG 测试,该注释允许在某个点之前和之后执行某些 Java 逻辑,这些点是上面列出的项目之一。

三、基本注释

以下是 TestNG 中可用注释及其属性的概述表。

注解 描述
@BeforeSuite 在该套件的所有测试都运行在注释的方法之前,仅运行一次。
@AfterSuite 在该套件的所有测试都运行在注释方法之后,仅运行一次。
@BeforeClass 在调用当前类的第一个测试方法之前运行,注释方法仅运行一次。
@AfterClass 在调用当前类的第一个测试方法之后运行,注释方法仅运行一次
@BeforeTest 注释的方法将在属于 < test > 标签内的类的所有测试方法运行之前运行。
@AfterTest 注释的方法将在属于< test >标签内的类的所有测试方法运行之后运行。
@BeforeGroups 配置方法将在之前运行组列表。 此方法保证在调用属于这些组中的任何一个的第一个测试方法之前不久运行。
@AfterGroups 此配置方法将在之后运行组列表。该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行。
@BeforeMethod 注释方法将在每个测试方法之前运行。
@AfterMethod 注释方法将在每个测试方法之后运行。
alwaysRun 对于 before 方法(beforeSuite,beforeTest,beforeTestClass和beforeTestMethod,但不是beforeGroups):如果设置为true,则无论它属于哪个组,都将运行此配置方法。 对于after方法(afterSuite,afterClass,...):如果设置为true,即使先前调用的一个或多个方法失败或被跳过,也将运行此配置方法。
dependsOnGroups 此方法所依赖的组列表。
dependsOnMethods 此方法所依赖的方法列表。
enabled 是否启用此类 / 方法上的方法。
groups 此类/方法所属的组列表。
inheritGroups 如果为true,则此方法将属于类级别的@Test注释中指定的组。
onlyForGroups 仅适用于 @BeforeMethod 和 @AfterMethod。如果指定,则仅当相应的测试方法属于列出的组之一时,才会调用此 setup / teardown 方法。
当放置在 TestNG 类的超类上时,上述注释也将被继承。例如,这对于在公共超类中集中多个测试类的测试设置非常有用。

在这种情况下,TestNG保证“@Before”方法以继承顺序执行(首先是最高超类,然后是继承),而“@After”方法则按相反的顺序执行(向上继承链)。

@dataProvider: 将方法标记为为测试方法提供数据。 记一种方法来提供测试方法的数据。 注释方法必须返回一个Object [] [],其中每个Object [] 可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的 @Test 方法需要使用与此注释名称相等的dataProvider名称。

属性 描述
name 此数据提供者的名称。如果未提供,则此数据提供程序的名称将自动设置为方法的名称。
parallel 如果设置为 true,则使用此数据提供程序生成的测试将并行运行。默认值为 false。

@Factory: 将方法标记为工厂,返回将由 TestNG 用作 Test 类的对象。该方法必须返回 Object []。

@Listeners :在测试类上定义侦听器。

属性 描述
value 扩展org.testng.ITestNGListener的类数组。

@Parameters: 描述如何将参数传递给 @Test 方法。

属性 描述
value 用于填充此方法参数的变量列表。

@Test : 将类或方法标记为测试的一部分。

属性 描述
alwaysRun 如果设置为 true,则即

你可能感兴趣的:(程序员,软件测试,java,maven,开发语言,测试工具,postman)