testNG是一个测试框架,其灵感来自JUnit和NUnit的,但引入了一些新的功能,使其功能更强大,使用更方便。

testNG是一个开源自动化测试框架;testNG表示下一代。 testNG是类似于JUnit(特别是JUnit 4),但它不是一个JUnit扩展。它的灵感来源于JUnit。它的目的是优于JUnit的,尤其是当测试集成的类。 testNG的创造者是Cedric Beust(塞德里克·博伊斯特)

testNG消除了大部分的旧框架的限制,使开发人员能够编写更加灵活和强大的测试。 因为它在很大程度上借鉴了Java注解annotation(JDK5.0引入的)来定义的测试,它也可以告诉你如何使用这个新功能在真实的Java语言生产环境中。

testNG的特点:

  • 注解

  • testNG使用Java和面向对象的功能

  • 支持综合类测试(例如,默认情况下,没有必要创建一个新的测试每个测试方法的类的实例)

  • 独立的编译时间测试代码运行时配置/数据信息

  • 灵活的运行时配置

  • 主要介绍“测试组”。当编译测试,只要问testNG运行所有的“前端”的测试,或“快”,“慢”,“数据库”等

  • 支持依赖测试方法,并行测试,负载测试,局部故障

  • 灵活的插件API

  • 支持多线程测试

  testNG.xml文件记录了一些非常简单的术语。xml是一个以XML记录所有测试的文件口这个文件能够很容易地在一个文件中描述所有测试套件和它们的参数,可以将它签人到代码库中,或通过电子邮件发送给其他组员。也可以很容易地提取测试的子集,或分成几种运行时配置。这个文件并不是运行testNG所必须的。

  一个suite(套件)由一个或多个测试组成。

  一个test(测试)由一个或多个类组成。

  一个class(类)由一个或多个方法组成。

testNG相对于junit的一些优点:

  1. testNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试到集成测试这个是testNG设计的出发点,不仅仅是单元测试,而且可以用于集成测试。设计目标的不同,对比junit的只适合用于单元测试,testNG无疑走的更远。可以用于集成测试,这个特性是我选择testNG的最重要的原因。

  2. 测试的过程的三个典型步骤,注意和junit(4.0)相比,多了一个将测试信息添加到testng.xml文件或者build.xml测试信息尤其是测试数据不再写死在测试代码中,好处就是修改测试数据时不需要修改代码/编译了,从而有助于将测试人员引入单元测试/集成测试。

  3. 基本概念,相比junit的TestCase/TestSuite,TestNG有suite/test/test method三个级别,即将test/test method明确区分开了。

基本使用:

  1、异常处理

  testNG可以简单方便的检测异常的发生,通过@ExpectedExceptions标注预期捕获的异常,当确实发生预期的异常,testNG认为测试通过。也可以指定标注多个异常。

@Test (expectedExceptions={Exception.class,Exception2.class})

使用这个来支持异常的测试有两个优点:

  • 使我们的意图变得非常清楚,只要看下@test就知道将会发生什么

  • 消除了try、catch、fail空语句给代码带来的干扰,让代码注重于业务逻辑。

像一次抛出多个异常,我们还是没有办法决定具体是那个异常没有抛出,这样就会想到分开测试单个异常。如:

测试类中的每个方法只关注一个非常具体的任务,这符合软件过程原则,单一职责原则。

2、失败处理
     当testNG运行的case有失败的时候,会在test-output目录下生成一个testng-failed.xml文件,这对于批量执行测试定位问题很有帮助,testng可以单独执行这些失败的测试。

有以下测试文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class testngTest {
 
    @Test
    public void depend(){
 
    }
 
    @Test(dependsOnMethods = "depend")
    public void f(){
        throw new RuntimeException();
    }
 
    @Test
    public void failed(){
        throw new RuntimeException();
    }
}

产生的testng-failed.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite guice-stage="DEVELOPMENT" name="Failed suite [Default suite]">
  <test name="Default test(failed)">
    <classes>
      <class name="com.wt.others.testngTest">
        <methods>
          <include name="failed"/>
          <include name="depend"/>
          <include name="f"/>
        </methods>
      </class<!-- com.wt.others.testngTest -->
    </classes>
  </test<!-- Default test(failed) -->
</suite<!-- Failed suite [Default suite] -->

说明这failed和f方法都失败了,由于f方法依赖了depend的方法,所以depend方法也被列出来。不仅包含失败的方法,也包含它所依赖的方法。

那么修改之后,只需要运行这个文件就能够很容易的调试失败的测试方法。

3、使用参数

  testNG传参数的两种方式(xml文件,@DataProvider)

  • 使用testng.xml设置参数

  参数在xml文件中可以在suite级别定义,也可以在test级别定义;testNG会尝试先在包含当前类的test标签中寻找参数,如果没找到则在上层的suite标签中查找。即在test标签中相同的参数对当前类当前方法的优先级比较高。 testNG支持这种传参方式的类型如下:String、 int/Integer、boolean/Boolean、 byte/Byte、 char/Character、 double/Double、 float/Float、 long/Long、 short/Short。对于非上述类型TestNG无法通过这种方式进行传参,可以通过@DataProvider方式传参

  • DataProvider方式传参

 只提供了一个字符串属性:名称,供测试方法作为传递参数的annotation使用两种DataProvider,一种是返回一个二维数组对象,如上面的例子;另外一种DataProvider是返回一个Iterator,DataProvider可以向测试方法传递任意类型任意数目的参数,利用DataProvider提供不同的参数集合对一个测试方法进行多次调用。

4、Annotation

  快速预览,这些可以在官方的文档上找到更详细的资料。

  @BeforeSuite:        被注释的方法将在所有测试运行前运行
  @AfterSuite:        被注释的方法将在所有测试运行后运行
  @BeforeTest:        被注释的方法将在测试运行前运行
  @AfterTest:        被注释的方法将在测试运行后运行
  @BeforeGroups:        被配置的方法将在列表中的gourp前运行。这个方法保证在第一个属于这些组的测试方法调用前立即执行。
  @AfterGroups:        被配置的方法将在列表中的gourp后运行。这个方法保证在最后一个属于这些组的测试方法调用后立即执行。
  @BeforeClass:        被注释的方法将在当前类的第一个测试方法调用前运行。
  @AfterClass:        被注释的方法将在当前类的所有测试方法调用后运行。
  @BeforeMethod:        被注释的方法将在每一个测试方法调用前运行。
  @AfterMethod:        被注释的方法将在每一个测试方法调用后运行。

5、分组

  testNG的annotation有分组的功能,这些分组的名称和编号完全由我们自己来决定。@Test(groups={"fast","database"})定义了分组之后可以在排除或者运行某个组。testNG容许执行复杂的测试方法分组。不仅可以申明方法属于组,而且可以指定分组包含其他分组。然后TestNG可以被调用,并被要求包含某些分组和排除其他的分组。这将提供怎样划分测试的最大弹性,并且如果想运行两个不同的测试装置不需要重新编译。

6、依赖

  有些时候,需要测试方法按照一个特定的顺序被调用。这非常有用,比如:
     *在运行更多测试方法前确认特定数量的测试方法调用完成并且成功
    *初始化测试并希望这个初始化方法也作为测试方法(被标记为@Before/After的方法将不作为最终报告的一部分)

  为了做到这点,需要使用@Test注解的dependsOnMethods属性或者dependsOnGroups属性。

  这里有两种依赖:
     * 强依赖。在运行你的测试方法前所有依赖方法必须运行并且成功。哪怕有一个依赖方法失败,测试方法都不会被调用,在报告中将被标记为SKIP。
     * 软依赖。测试方法在依赖方法运行后总是会被运行,即使某些依赖方法失败。对于只想确认测试方法是按照特定顺序运行,而测试方法并不真正依赖其他方法是否成功的情况下非常有用。软依赖通过在@Test注解中增加"alwaysRun=true"来实现。

  除了上面基本的使用之外还有,testNG在并发测试、异步测试和多线程测试方面的应用等等。

  关于testng的使用可以参考官方文档:http://testng.org/doc/documentation-main.html

  这是看了《java测试新技术--testng》这本书的一点记录,虽没有全部理解,但是对于很多部分还是了解理解了。知道有这么个东西。

testNG小试牛刀的更多相关文章

  1. Java自动化测试框架-01 - TestNG之入门篇 - 大佬的鸡肋,菜鸟的盛宴(详细教程)

    TestNG是什么? TestNG按照官方的定义: TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便. TestNG是一个开源自动化测试框 ...

  2. Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用(后续)

    在[Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用]里面提到了Microsoft 身份认证,其实这也是一大块需要注意的地方,特作为后续补充这些知识点.上章是使用了Microsof ...

  3. TestNG 入门教程

    原文出处:http://www.cnblogs.com/TankXiao/p/3888070.html 阅读目录 TestNG介绍 在Eclipse中在线安装TestNG 在Eclipse中离线安装T ...

  4. JUnit 4 与 TestNG 对比

    原文出处: 付学良的网志 原文出处2: http://www.importnew.com/16270.html -------------------------------------------- ...

  5. JAVA+Maven+TestNG搭建接口测试框架及实例

    1.配置JDK 见另一篇博客:http://www.cnblogs.com/testlurunxiu/p/5933912.html 2.安装Eclipse以及TestNG Eclipse下载地址:ht ...

  6. Idea+TestNg配置test-output输出

    说明:testNG的工程我是使用eclipse创建的,直接导入到idea中,运行test时不会生产test-output,只能在idea的控制台中查看运行结果,然后到处报告,经过不懈的百度终于找到怎么 ...

  7. testng 失败自动截图

    testng执行case failed ,testng Listener会捕获执行失败,如果要实现失败自动截图,需要重写Listener的onTestFailure方法 那么首先新建一个Listene ...

  8. 两种方式testng dataprovider结合csv做测试驱动

    方式一: 第一.读取csv数据源码 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream ...

  9. java分享第十九天(TestNg的IReporter接口的使用)

     IReporter接口是干嘛的?就是让用户自定义报告的,很多人想要自定义报告,于是乎找各种插件,比如什么testng-xslt啊,reportng啊,各种配置,最后出来的结果,还不能定制化,但为什么 ...

随机推荐

  1. Log.i()的用法

    2011-04-16 09:44 17486人阅读 评论(4) 收藏 举报 androidlayoutbuttonstringencodingeclipse 在调试代码的时候我们需要查看调试信息,那我 ...

  2. NGUI3.5系列教程之 UILabel

    此NGUI版本为:3.5.1 NGUI 的UILabel脚本下的文字框可以用BBCode设置:[b]Bold[/b] 粗体 [i]italic[/i] 斜体 [u]underline[/u]下划线 [ ...

  3. 微软职位内部推荐-SDE2 (Windows - Power)

    微软近期Open的职位: SDE2 (Windows - Power) Windows Partner Enablement team in Operating System Group is loo ...

  4. 分布式文件系统 - FastDFS

    分布式文件系统 - FastDFS 别问我在哪里 也许我早已不是我自己,别问我在哪里,我一直在这里. 突然不知道说些什么了... 初识 FastDFS 记得那是我刚毕业后进入的第一家公司,一个技术小白 ...

  5. 使用jquery控制只能输入数字,并且关闭输入法(转)

    控制文本框只能输入数字是一个很常见的需求,比如电话号码的输入.数量的输入等,这时候就需要我们控制文本框只能输入数字.在用js控制之后在英文输入法的状态下去敲击键盘上的非数字键是输不进去的,然而当你转到 ...

  6. JAVA SSH 框架介绍

    SSH 为 struts+spring+hibernate 的一个集成框架,是目前较流行的一种JAVA Web应用程序开源框架. Struts Struts是一个基于Sun J2EE平台的MVC框架, ...

  7. 在ubuntu16.04 下安装haproxy 1.5.11 做tcp负载均衡

    由于haproxy需要FQ下载,所以从csdn下载了较为新版的haproxy1.5.11,安装过程如下: 1. 解压haproxy-1.5.11.tar.gz : tar xzvf haproxy-1 ...

  8. 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  9. JQuery图片延迟加载插件,动态获取图片长宽尺寸

    以前的网站带宽小,没有特别多的大图,现在不同了,各种图片网站如同雨后春笋层出不穷.服务器是抗住了,但是客户端就有意见了,太多的图片必然导致页面加载缓慢,特别是有些table结构的站点更是如此.能否让图 ...

  10. watch your tone

    老板要求邮件注意语气... 木想到混了这么久这种事情还要老板提醒