TestNG的简单使用

TestNG(Test Next Generation)是一个测试框架,其灵感来自JUnit和NUnit,但同时引入了一些新的功能,使其功能更强大,使用更方便。

  • TestNG是一个设计用来简化广泛的测试需求的测试框架,涵盖单元测试到集成测试
  • 支持依赖测试方法,并行测试,异常测试、参数化测试、时限测试、分组测试等测试方法
  • 基于Annotation机制,使测试方法更为灵活配置
  • 引入xml配置文件,从而使软件测试不仅仅是硬编码到程序中,做到更为灵活
  • 支持多线程测试

编写TestNG测试基本上包括以下步骤:

  1. 编写测试的业务逻辑代码,并在相应代码中插入TestNG的annotation。
  2. 将测试信息配置到testng.xml文件中。
  3. 运行TestNG,TestNG默认情况下,会生产两种类型的测试报告HTML的和XML的。 测试报告位于 "test-output" 目录下。

TestNG的实现——Annotation

常用Annotation

  1. @BeforeSuite/@AfterSuite 在某个测试套件开始之前/在某个套件所有测试方法执行之后
  2. @BeforeTest/@AfterTest 在某个测试开始之前/在某个测试所有测试方法执行之后
  3. @BeforeClass/@AfterClass 在某个测试类开始之前/在某个类的所有测试方法执行之后
  4. @BeforeMethod/@AfterMethod 在某个测试方法之前/在某个测试方法执行之后
  5. @BeforeGroup/@AfterGroup 在某个组的所有测试方法之前/在某个组的所有测试方法执行之后
  6. @DataProvider 标志一个方法,用来提供测试数据,标注的方法能够返回一个Object[] []或者Iterator对象。
  7. @Listeners 定义一个测试类的监听器。
  8. @Parameters 设置参数,用以传递给测试方法。

Annotation带来的优势

  1. before方法和after方法 带来了足够丰富的测试生命周期控制
  2. dependsOnGroups/dependsOnMethods 提供了依赖检查机制,并可以严格控制执行顺序
  3. DataProvider 使得对同一个方法的测试覆盖变的非常轻松,非常适合进行边界测试,只要给出多种测试数据就可以针对一个测试方法进行覆盖
  4. expectedExceptions 使得异常测试变的非常轻松
  5. invocationCount/threadPoolSize 可以简单地设置并行测试的线程数,并开启多线程测试
  6. timeOut 用来设定测试方法超时时间,从而对程序的效率和运行时间有了更为直观的控制

TestNG的灵魂——testng.xml

说明:

  • 标签 suite 代表一个测试套件。它可以包含一个或多个测试
  • 标签 test 代表一个测试,并可以包含一个或多个TestNG测试类
  • class的标签代表一个TestNG的类是一个Java类,它包含至少一个TestNG的注解,也可以包含一个或多个测试方法
  • package制定测试的包名,自动检索当前包中包含TestNG Annotation的类和方法
  • groups用来表明测试用例的分组,有利于针对一类的测试用例进行专门的测试
  • 一个配置文件中只有一个suite,基本上一个项目写一个配置文件就可以了,当然如果你的项目足够大,可能需要几个配置文件。

suite属性说明:

  • @name: suite的名称,必须参数
  • @junit:是否以Junit模式运行,可选值(true | false),默认"false"
  • @verbose:命令行信息打印等级,不会影响测试报告输出内容;可选值(1|2|3|4|5)
  • @parallel:是否多线程并发运行测试;可选值(false | methods | tests | classes | instances),默认 "false"
  • @thread-count:当为并发执行时的线程池数量,默认为"5"
  • @configfailurepolicy:一旦Before/After Class/Methods这些方法失败后,是继续执行测试还是跳过测试;可选值 (skip | continue),默认"skip"
  • @time-out:为具体执行单元设定一个超时时间,具体参照parallel的执行单元设置;单位为毫秒
  • @skipfailedinvocationcounts:是否跳过失败的调用,可选值(true | false),默认"false"
  • @data-provider-thread-count:并发执行时data-provider的线程池数量,默认为"10"
  • @preserve-order:顺序执行开关,可选值(true | false),默认为"true"

test属性说明:

  • @name:test的名字,必选参数;测试报告中会有体现
  • @junit:是否以Junit模式运行,可选值(true | false),默认"false"
  • @verbose:命令行信息打印等级,不会影响测试报告输出内容;可选值(1|2|3|4|...|10)
  • @parallel:是否多线程并发运行测试;可选值(false | methods | tests | classes | instances),默认 "false"
  • @thread-count:当为并发执行时的线程池数量,默认为"5"
  • @time-out:为具体执行单元设定一个超时时间,具体参照parallel的执行单元设置;单位为毫秒
  • @enabled:设置当前test是否生效,可选值(true | false),默认"true"
  • @skipfailedinvocationcounts:是否跳过失败的调用,可选值(true | false),默认"false"
  • @preserve-order:顺序执行开关,可选值(true | false) 默认为"true"
  • @group-by-instances:是否按实例分组,可选值(true | false) 默认为"false"

备注:(By default, dependent methods are grouped by class. For example, if method b() depends on method a(), TestNG will not run b() until all the instances have invoked their a() method. This behavior might not be desirable in certain scenarios, such as for example testing a sign in and sign out of a web browser for various countries.)

  • @allow-return-values:是否允许返回函数值,可选值(true | false),默认"false"

备注:(Test methods are annotated with @Test. Methods annotated with @Test that happen to return a value will be ignored, unless you set allow-return-values to true in your testng.xml。)

常用测试方法

异常测试 忽略测试 时限测试

异常测试

可以检测某一方法检测到某一异常时是否能按预期地抛出

忽略测试

TestNG是通过直接在方法上加标注的方式来进行测试,而这里也可以设置某个测试方法不工作。可以通过如下方式:

时限测试

可以设置一个特定时长的限制(以毫秒ms为单位),一旦测试的内容运行超过了该 时间长度,那么将会终止,同时标记为failed

TestNG特有测试机制

组测试 参数化测试 并行测试 依赖测试

组测试

通过定义分组,来执行特定一组测试方法,从而提高用户测试的灵活性,同时在测试配置文件中也可以通过include和exclude属性的配置,来控制测试用例的执行

参数化测试
Data Provider方法可以返回如下两种类型中的一种:
1.含有多个对象的数组 (Object[][]),其中第一个下标指明了测试方法要调用的次数,第二个下标则完全与测试方法中的参数类型和个数相匹配。
2.另外一个是迭代器 Iterator。二者的区别是迭代器允许你延迟创建自己的测试数据。TestNG会调用迭代器,之后测试方法会一个接一个的调用由迭代器返回的值。在你需要传递很多参数组给测试组的时候,这样你无须提前创建一堆值。

通过@Parameters传递参数

并行测试

TestNG允许我们以并行(多线程)的方式来执行测试。这就意味着基于TestNG测试组件的配置,多个线程可以被同时启动然后分别执行各自的测试方法。
并行(多线程)执行测试可以给用户带来很多好处,主要包括以下两点:
1)减少了执行时间:并行测试也就意味着多个测试可以在同一时间被同时执行,从而减少了整体测试所花费的时间。 2)允许多个线程并行地测试同一个测试组件:有了这个特性,我们就能够写出相应的测试用例来验证应用程序中包含多线程部分的代码的正确性。

依赖测试

Testng提供了两种依赖实现:强制依赖和顺序依赖

  1. 强制依赖:如果被依赖的某一个方法发生了异常,那么之后的方法都不会被执行(默认)
  2. 顺序依赖:无论被依赖的方法是否出现异常,后续的方法都会被执行,通过alwaysRun=“true”来配置

TestNG的应用场景

  1. TestNG参数化批量测试
    例如我们车型库会有很多车型id,车系id等数据,我们可以把对应的数据随机组合到excel或者文本中,然后代码中通过@DataProvider来进行测试

举例随便在excel中构造点数据, 然后输出如下:

2, 多线程测试
我们服务端接口响应速度一般都要求在100ms以内,那么我们怎样能确定我们对服务端的接口能够达到这个要求呢? 我们可以通过testNG的多线程以及指定timeOut来测试。

生成报告

在代码目录下的test-output文件夹,点开index.htm即可查看测试报告:

参考附录

[TestNG教程]:http://www.yiibai.com/testng/

[TestNG testing framework]:https://github.com/cbeust/testng

[TestNG Documentation]:http://testng.org/doc/documentation-main.html

[junit-4-vs-testng-comparison]:http://www.mkyong.com/unittest/junit-4-vs-testng-comparison/

TestNG的简单使用的更多相关文章

  1. 四、testNG.xml 简单介绍

    TestNG定义了一套非常具体的术语描述测试. testng.xml testng.xml是一个以XML记录所有测试的文件.可以利用这个文件,跑同一个类或者多个不同类里面的测试用例. testng.x ...

  2. java + selenium + testng实现简单的UI自动化

    新建Maven项目,添加需要的依赖 1.新建一个Maven项目 2.在pom.xml中添加需要的依赖,这里只要selenium和testng就行 <!-- https://mvnreposito ...

  3. TestNG简单的学习-TestNG运行

    转载:http://topmanopensource.iteye.com/blog/1983735 TestNG简单的学习-TestNG运行 文档来自官方地址: http://testng.org/d ...

  4. TestNG 入门教程

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

  5. TestNG官方文档中文版(4)-运行TestNG

    4 - 运行TestNG TestNG可以以不同的方式调用: * Command line     * ant     * Eclipse     * IntelliJ's IDEA 1) 命令行 假 ...

  6. testNG小试牛刀

    testNG是一个测试框架,其灵感来自JUnit和NUnit的,但引入了一些新的功能,使其功能更强大,使用更方便. testNG是一个开源自动化测试框架:testNG表示下一代. testNG是类似于 ...

  7. TestNG官方文档中文版(2)-annotation(转)

    1. 介绍    TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试(隔离测试一个类)到集成测试(测试由有多个类多个包甚至多个外部框架组成的整个系统,例如运用服务器). 编写一个测试的 ...

  8. testng的使用

    TestNG教程 TestNG是一个测试框架,其灵感来自JUnit和NUnit,但同时引入了一些新的功能,使其功能更强大,使用更方便. TestNG设计涵盖所有类型的测试:单元,功能,端到端,集成等, ...

  9. TestNG 自动化测试入门教程--典型示例

    TestNG介绍 TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit,   功能都差不多, 只是功能更加强大,使用也更方便 Java中已经有一个JUnit的测试框架了.  Tes ...

随机推荐

  1. Thinkpad USB 经典键盘使用体验

    先上图,这就是一个键盘,不是笔记本电脑. 优点: 1. 键盘完胜各类巧克力式键盘. 2. 小红点和老thinkpad 上的小红点一样好用. 3. ESC 和Delete 放大后,盲摸很方便. 缺点: ...

  2. Hibernate 一对一中的一些问题

    1.对于想查询一对一种一方为空的时候使用 例如一个用户对应一个人,则要从人查找没有用户的人员的话, 使用hql语句是查询不到的 我今天也碰到了这个问题,研究了下,可以用以下语句查出来:from Per ...

  3. slf4j-logback 日志以json格式导入ELK

    同事整理的,在此分享.logback,log4j2 等slf4j的日志实现都可以以json格式输出日志, 这里采用的是logback.当然也可以以文本行的格式输出,然后在logstash里通过grok ...

  4. Web/app端自动化测试对比

    Web/app端自动化测试 做了一段时间的Android自动化测试,对比个人之前做的web端自动化测试,有一些感想.(由于个人接触的时间也不是太久,很多东西理解也并不深刻,先写下菜鸟时期的感想.) 区 ...

  5. 叼叼叼,HTML5日期(Date)类型和文本(Text)类型互相转换

    <input placeholder="From" class="form-control" type="text" onfocus= ...

  6. 网站入住各大搜索引擎的seo优化技巧

    最近在公司上班的时候做了一个工业物联网的项目,上层主管提出要求,让这个网站入住各大搜索引擎,也就是说在各大搜索引擎中输入与网站相关的关键字就能搜索到我们自己的网站.刚开始自己一脸懵逼,因为之前自己并没 ...

  7. python 小练习之删除文件夹下的所有文件,包括子文件夹中的文件

    先屡一下思路 一步步怎么实现 1  要求是要删除所有文件(只是删除文件 而不是文件夹),所以 我们肯定要遍历这个文件目录 (for  in遍历) 2 每遍历一个元素时(文件),我们要判断该元素的属性是 ...

  8. Android线上Bug热修复分析

    针对app线上修复技术,目前有好几种解决方案,开源界往往一个方案会有好几种实现.重复的实现会有造轮子之嫌,但分析解决方案在技术上的探索和衍变,这轮子还是值得去推动的 关于Hot Fix技术 Hot F ...

  9. CIF、DCIF、D1分辨率是多少?

    CIF简介: QCIF全称Quarter common intermediate format.QCIF是常用的标准化图像格式.在H.323协议簇中,规定了视频采集设备的标准采集分辨率.QCIF = ...

  10. dm642的视频口输出

    void VP1_EDMA(int displayMode,unsigned int w,unsigned int h) {      unsigned int i=0,k=0;  EDMA_Hand ...