一.TestNG 是什么 ?

  • 脱胎于业界标杆的Junit,并超于Junit,主要原因是由于当时的JUnit3版本不支持annotation,使用不够灵活。
  • TestNG不再需要test前缀的命名方式、支持数据驱动、用例分组等一系列特性完全碾压Junit。
  • JUnit也在不断的吸纳TestNG和其他的思想和技术,目前主要的功能已经基本都能支持。
  • Annotation:
     注解种类
    Beforexxxx系列,在Test之前执行的动作。
    Afterxxxx系列,在Test之后执行的动作。
    DataProvider,数据驱动类。
    Test,测试执行的主体。
    Parameters,接收配置文件中同名参数到代码中使用。
    注解使用
    直接在任意方法上加@注解名,对方法名字、参数类型没有要求。
    需要@Test方法作用域为public。

二.搭建TestNG环境

  • 新建Maven项目, 在pom文件中写入依赖。 就完成了环境的配置,就这么简单。

  • PS:Intellij自带了TestNG插件,如使用的是Eclipse,需手动安装TestNG插件。

三.使用@Test做一次最简单的测试任务

  • 直接上代码,只需要在需要执行的测试代码上加上@Test注释即可

  • 执行时,只需在这个java文件上右键,选择Run Task3 即可。

  • 执行完成后,会出现下图执行结果:

四.加入断言,进行数据正确性校验

执行结果:

五.加入@BeforeTest和@AfterTest动作

执行结果:

六.再试试多种@BeforeXXX和@AfterXXX

执行结果:

七.参数化一组数据

  • 以Object[][]的形式,让TestNG对一组数据进行测试,并校验。

  • 执行结果会是这样:

  • 或者是这样:

八.再用一种方式参数化一组数据

  • 这次我们把数据存储在了Excel中:

执行结果:

  • 这样就实现了数据与脚本分离。

九.使用数据库的数据作为一组参数

  • 使用的SQL是:SELECT * FROM ServiceAPI_InfoRecords;

  • 由于执行的数据是由SQL语句进行的筛选,所以另我们的测试数据又变得更加灵活。
  • 比如使用下面这句SQL语句: SELECT * FROM ServiceAPI_InfoRecords WHERE isTest=1。
  • 执行结果和想象的一样,只会执行1和3

十.编写测试配置文件

  • Testng.xml是一个以xml记录所有测试的文件。这个文件能够很容易地再一个文件中描述所有测试套件和它们的参数,可以将它签入到代码库中,或者通过电子邮件发送给同事。也可以很容易地提取测试的子集,或分成几种运行时配置。
  • 如上面这个例子,它所做的就是执行Task10

十一.配置文件中使用参数传递

  • 在配置文件中,使用parameter标签来完成参数传递动作

  • 执行结果为test1,2,3,1,3

十二.做好测试方法的依赖关系

  • 如下代码:doTest3依赖doTest2,doTest2又依赖doTest1。

  • 所以当doTest2执行错误后,由于doTest3依赖doTest2,所以doTest3被忽略了。

十三.测试分组

  • 使用注释的方式,标记好每个测试的分组

  • 很好的根据自己的需要,执行对应的分组测试

十四.生成报告

  • TestNG本身就自带了报告,一个是很丑,另一个是使用了一些墙外的东西(你懂的),墙内打开报告页面至少得一分钟。
  • 然后我选择使用的ReportNG。在一开始的PPT中,我们已经把ReportNG的依赖添加完成了,所以这里只需要在*.xml 文件里增加报告的侦听就行了。

  • 在代码中,很显然使用System.out.println();是无法将信息打印至报告中的。所以,需要TestNG的log打印方式:Reporter.log("XXXXXXXX")。
  • 执行测试后,生成的报告是这样的:

十五:场景

当我们有了这把利器之后,我们可以用在很多场景上。比如:

  • 开发进行单元测试
  • 测试进行各种自动化测试
  • WEB UI自动化测试(如 Selenium WebDriver)
  • APP UI 自动化测试(如 Appium)
  • 接口自动化测试

十六.测试用例结果有错误后。。。

  • 肯定是需要定位出错的原因。
  • 是真的出错了,还是当时环境的不稳定之类的意外情况引起的?
  • 所以我们最常的做法是:把错误的用例再执行一遍,会自动生成testng-failed.xml,里面记录的就是执行失败的用例,可直接执行。

十七.其它

  • 完成上述任务并能活用的话,在日常的测试工作中,使用用TestNG便没有什么太大的问题了。
  • 当然,TestNG还有诸如“并发”、“扩展”等任务,待学习研究

TestNG的更多相关文章

  1. TestNG 入门教程

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

  2. JUnit 4 与 TestNG 对比

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

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

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

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

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

  5. testng 失败自动截图

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

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

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

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

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

  8. java分享第十八天-02( java结合testng,利用XML做数据源的数据驱动)

    testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以XML为例:备注:@DataProvider的返回值类 ...

  9. java分享第十四天(TestNG Assert详解)

     TestNG Assert 详解org.testng.Assert 用来校验接口测试的结果,那么它提供哪些方法呢? 中心为Assert测试类,一级节点为方法例如assertEquals,二级结点为参 ...

  10. TestNG Assert 详解

    org.testng.Assert 用来校验接口测试的结果,那么它提供哪些方法呢? 中心为Assert测试类,一级节点为方法例如assertEquals,二级结点为参数类型及参数个数,double 3 ...

随机推荐

  1. Android开发之---Activity生命周期

    Android开发中,有四大组件:Activity.Service.Content Provider.Broadcast Receiver,可以说,activity的使用是最频繁的了,这里来梳理一下与 ...

  2. C#回顾 - 8.利用反射动态创建对象

    拿微信消息返回的示例数据实验 var data = "<xml><ToUserName><![CDATA[toUser]]></ToUserName ...

  3. 基于AgileEAS.NET SOA 平台SAAS架构技术的开源分销ERP系统-SmartERP.NET下载配置说明

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  4. EpochConverter

    地址:http://www.epochconverter.com/ How to get the current epoch time in ... PHP time() more ... Pytho ...

  5. Linux 第04天

    Linux 第04天 1.系统设置工具(网络和打印机)和硬件检测 1.1 setup工具 1.1.1 用户身份验证设置 1.1.2 网络配置 1.1.3 防火墙设置 1.1.4 键盘形式设置 1.1. ...

  6. 08 Servlet

    Servlet技术          * Servlet开发动态的Web资源的技术.                       * Servlet技术               * 在javax. ...

  7. Python for Infomatics 第12章 网络编程五(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.8 用urllib读取二进 ...

  8. Leetcode Anagrams

    Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...

  9. Unity3d与Android交互

    先看下效果 你一定会说,然并卵! 没错,这里只是一个最简单的例子,unity与android activity 互相传参数. 玩过手游的都知道,在你要为你心爱的游戏角色准备花钱买钻石,点击购买的时候, ...

  10. Java知识结构