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. IOS开发之──应用之间调用(1)

    iphone应用之间调用步骤: 1)在plist文件中,注册对外接口 在xcode group&files 里面,展开 resources选择<app>info.plist 鼠标右 ...

  2. windows2003通过iis配置ftp服务器

    以前习惯于用filezilla作为windows的ftp服务器,但是现在新版本的filezilla已经不支持windows2003了,所以趁机试一下iis配置ftp服务器. 前面都是很常规的配置 参考 ...

  3. define的用法

    define的用法小结 define的用法只是一种纯粹的替换功能,宏定义的替换是预处理器处理的替换. 一:简单的宏定义用法 格式:#define 标识符 替换内容 替换的内容可以是数字,字符,字符串, ...

  4. android开发之socket快传文件以及消息返回

    应用场景: 两台android机器:一台自建wifi热点,另一台搜索到,连接该wifi热点.之后再通过socket传递消息,文件等,当服务器端接收到消息之后会返回对应的应答消息: 注意点:接收到消息之 ...

  5. 谈谈Android系统启动时的那点事儿

    Android系统完整的启动过程,从系统层次角度可分为Linux系统层.Android系统服务层.Zygote进程模型三个阶段:从开机到启动Home Launcher完成具体的任务细节可分为七个步骤, ...

  6. Tern Server Timeout

  7. Unix守护进程

    问题描述:         Unix守护进程 问题解决:     Unix守护进程没有控制终端,终端名设置为问号(?),终端前台进程组ID设置(TPGID)为-1 守护进程编写规则:      (1) ...

  8. fork 函数 和vfork 函数的区别

    问题描述:         fork 函数 和vfork 函数的区别 问题解决: fork函数使用: 注:         以上printf 属于标准IO库带缓冲,如果标准输出链接到终端设备,则它是行 ...

  9. C# IL DASM 使用

    IL DASM反编译工具 使用C#的猿人或多或少都会对微软的IL反编译工具(ildasm.exe)有所认识.我最早接触到这工具是公司同事使用他反编译exe程序,进行研读和修改.感觉他还是很强大. IL ...

  10. C#动态多线程实例

    在C#中用多线程并不难实现.它有一个命名空间:System.Threading,提供了多线程的支持. 要开启一个新线程,须要以下的初始化: ThreadStart startDownload = ne ...