1 - 介绍

TestNG是一个测试框架,旨在简化广泛的测试需求,从单元测试(测试一个孤立的类)到集成测试(测试包含几个类,几个包甚至几个外部框架,如应用服务器的系统)。

编写测试通常是以下三步过程:

  • 编写测试的业务逻辑,同时在代码中插入TestNG的注释。
  • 在testng.xml文件或者build.xml中加入有关测试的信息(如类名,想要运行的组,等...)。
  • 运行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文件
  • 从ant
  • 从命令行

本节介绍testng.xml格式

下面是一个testng.xml文件例子:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  
<suite name="Suite1" verbose="1" >
  <test name="Nopackage" >
    <classes>
       <class name="NoPackageTest" />
    </classes>
  </test>
 
  <test name="Regression1">
    <classes>
      <class name="test.sample.ParameterSample"/>
      <class name="test.sample.ParameterTest"/>
    </classes>
  </test>
</suite>

你可以用包名替换类名,这样TestNG 会查找test.sample 包中所有的类,并将只保留有TestNG注释的类

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
 
<suite name="Suite1" verbose="1" >
  <test name="Regression1"   >
    <packages>
      <package name="test.sample" />
   </packages>
 </test>
</suite>

你可以指定要包含和排除的组和方法:

<test name="Regression1">
  <groups>
    <run>
      <exclude name="brokenTests"  />
      <include name="checkinTests"  />
    </run>
  </groups>
  
  <classes>
    <class name="test.IndividualMethodsTest">
      <methods>
        <include name="testMethod" />
      </methods>
    </class>
  </classes>
</test>

你也可以在testng.xml中定义新的组并指定属性的详细信息,如是否并行,使用多少线程,是否正在运行JUnit测试,等等。

默认情况下,TestNG将按照XML文件顺序运行测试。如果你不想顺序运行这个文件中列出的类和方法,设置属性preserve-order 为false

<test name="Regression1" preserve-order="false">
  <classes>
 
    <class name="test.Test1">
      <methods>
        <include name="m1" />
        <include name="m2" />
      </methods>
    </class>
 
    <class name="test.Test2" />
 
  </classes>
</test>

有关功能的完整列表,请参阅DTD。(testng.xml文档类型定义(dtd) http://testng.org/testng-1.0.dtd.php)

来源:http://testng.org/doc/documentation-main.html

转载于:https://www.cnblogs.com/lisawu/p/6343573.html

TestNG 入门教程相关推荐

  1. testng入门教程5TestNG套件测试

    TestNG套件测试 测试套件的测试是为了测试软件程序的行为或一系列行为的情况下,是一个集合.在TestNG,我们不能定义一套测试源代码,但它代表的套件是一个XML文件执行特征.这也允许灵活的配置要运 ...

  2. testng入门教程10 TestNG参数化测试

    在TestNG的另一个有趣的功能是参数测试.在大多数情况下,你会遇到这样一个场景,业务逻辑需要一个巨大的不同数量的测试.参数测试,允许开发人员运行同样的测试,一遍又一遍使用不同的值. TestNG让你 ...

  3. TestNG入门教程-6-enabled和priority属性

    说明:由于该系列是好友之邀,优先提供给好友的自媒体账号发布Testng系列文章,所以可能大家会提前看过接下来的这些文章内容. 本篇来继续学习@Test下的注释,这篇学习两个属性的基本使用.第一个是设置 ...

  4. TestNG入门教程-2-写第一个基于TestNG的用例

    说明:由于该系列是好友之邀,优先提供给好友的自媒体账号发布Testng系列文章,所以可能大家会提前看过接下来的这些文章内容. 前面一篇,介绍了TestNG的特点和官网地址,以及在IDEA上的配置过程. ...

  5. python全栈工程师 pdf_python全栈工程师项目开发实例实战入门教程百度云

    python全栈工程师项目开发实例实战入门教程百度云 课程目录: 开学典礼 pycharm的基本使用 Python基本语法 数值类型数据及运算 字符串的基本操作 字符串的常用方法 列表的基本使用 列表 ...

  6. Gradle 简易入门教程

    作者: Yann 来源:原力注入 Gradle 是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是采用一种基于 Groovy(现在也支持 Kotlin)的内部领域特定语言. Gradle特点 ...

  7. Kafka入门教程与详解

    1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件负责处理连接服务.消息的路由和传送.持久 ...

  8. 【CV】Pytorch一小时入门教程-代码详解

    目录 一.关键部分代码分解 1.定义网络 2.损失函数(代价函数) 3.更新权值 二.训练完整的分类器 1.数据处理 2. 训练模型(代码详解) CPU训练 GPU训练 CPU版本与GPU版本代码区别 ...

  9. python tornado教程_Tornado 简单入门教程(零)——准备工作

    前言: 这两天在学着用Python + Tornado +MongoDB来做Web开发(哈哈哈这个词好高端).学的过程中查阅了无数资料,也收获了一些经验,所以希望总结出一份简易入门教程供初学者参考.完 ...

最新文章

  1. 喜讯不断,BCH又迎来两个代币发行方案
  2. django models索引_django-models – Django模型“IndexError:列表索引超出范围”Pydev
  3. c语言怎样获得函数内参数的值_C语言可变参数函数的实现原理
  4. css----实现checkbox图片切换
  5. SQLServer DBA 三十问之我答(第7题)
  6. 【人才引进】博士补贴75万,硕士补贴20万,这个南方城市,高待遇引才150人!...
  7. 【数据结构】图文详解Treap平衡树
  8. 初识STM32F407芯片
  9. 《左耳听风》-ARTS-打卡记录-模板
  10. 清北学堂2018noip集训D1
  11. 老大“秃”伤悲的年轻人,正靠假发维持最后的体面
  12. 大胖子走迷宫 [蓝桥杯 ]
  13. mat1 and mat2 shapes cannot be multiplied (128x432 and 576x64)的解决
  14. Banana Pi BPI-R2 Pro 开源路由器采用瑞芯微Rockchip RK3568芯片方案设计
  15. C#首席设计师Anders Hejlsberg访谈
  16. BZOJ 1455 罗马游戏
  17. 对称加密和非对称加密(to be continued)
  18. Canny边缘检测算法的流程
  19. 信息安全行业入门与各类技术简介
  20. 单片机四个开关控制四个LED灯

热门文章

  1. 【网址收藏】spark on k8s operator github地址
  2. docker数据卷volume详解
  3. Python3 replace()实现字符串替换
  4. JDBC的CRUD操作之PreparedStatement的删除操作
  5. snmp 获取 虚拟机硬盘_服务器出故障了怎么办?SNMP告警七步走
  6. python 多分类情感_文本情感分类(一):传统模型
  7. gossip 区块链_区块链技术创新生态 Gossiptoken黑马横空出世
  8. todo已完成任务_uTools 插件介绍 | 「todo」!打工人必备
  9. hisi mmz内存管理
  10. 计算机应用基础模4答案,2012年自考“计算机应用基础”练习题及答案四