testng简介

简介

在设计接口测试框架或者UI自动化框架的时候,大概率都会用到testng这个框架,本篇主要介绍testng这个框架的使用。
官方文档:http://testng.org/doc/index.html

testng的特点

  • 注解功能
  • TestNG使用Java和面向对象的功能
  • 支持综合类测试(例如,默认情况下,没有必要创建一个新的测试每个测试方法的类的实例)
  • 独立的编译时间测试代码运行时配置/数据信息
  • 灵活的运行时配置
  • 主要介绍“测试组”。当编译测试,只要问TestNG运行所有的“前端”的测试,或“快”,“慢”,“数据库”等
  • 支持依赖测试方法,并行测试,负载测试,局部故障
  • 灵活的插件API
  • 支持多线程测试

testng环境配置

  • 验证Java安装在你的机器上
  • 设置JAVA环境
  • 通过maven下载TestNG
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.14.3</version>
    <scope>test</scope>
</dependency>

使用步骤

  • 编写测试业务逻辑,在代码中插入TestNG annotations
  • 在配置文件testng.xml或build.xml中配置测试信息
  • 运行TestNG

注解的优点

  • TestNG的标识的方法关心寻找注解。因此,方法名并不限于任何模式或格式
  • 我们可以通过额外的参数注解
  • 注释是强类型的,所以编译器将标记任何错误
  • 测试类不再需要任何东西(如测试案例,在JUnit3)扩展

注解的运行顺序

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

TestNG一个方法的生命周期

  • @BeforeSuite(执行一次)
  • @BeforeClass(执行一次)
  • @BeforeMethod(N个Test 方法执行N次)
  • @Test Test方法(此注解可能在类上表示多个,在方法表示一个)
  • @AfterMethod(N个Test 方法执行N次)
  • @AfterClass(执行一次)
  • @AfterSuite(执行一次)

@Test注解里的参数

  • dependsOnMethods、dependsOnGroups:依赖测试,一个test依赖于另一个test的执行结果
  • groups:组测试,一个test属于哪一个组,可以跑一个特定组的所有test
  • expectedExceptions:异常测试
  • dataProvider:参数化测试,将参数传入该test
  • enabled:忽略测试,不执行该test
  • timeOut、threadPoolSize、invocationCount、successPercentage:并发测试,设置并发测试的各种参数
  • alwaysRun: 如果为true的话,不管怎样都会运行

依赖测试

有时候需要在特定的顺序下调用测试案例,或分享一些数据和方法之间的状态,就可以使用dependsOnMethods或dependsOnGroups申明。被注解的方法只有在被依赖的方法执行成功后执行。
在这里插入图片描述在这里插入图片描述
以上两段代码,分别是这两个参数的运用,只有被依赖的方法执行成功,依赖的方法才会执行。

组测试

在TestNG中组测试是一个新的创新功能,它不存在于JUnit框架,它允许调度到适当的部分方法和瓶坯复杂的测试方法分组。你不仅可以声明属于群体的那些方法,但你也可以指定一组包含其他组。然后,TestNG可调用和要求包括一组特定的群体(或正则表达式),而排除另一个集合。这给了你最大的灵活性,如何分区测试,如果想运行两套不同的测试背靠背,不要求重新编译任何东西。
在这里插入图片描述
在这里插入图片描述
以上分别是定义的test方法和对应的testng.xml中的分组设定。
运行方法分别为

  • 命令行
java org.testng.TestNG -groups checkintest -excludegroups functest com.testng.example.GroupTestExample
  • Ant
<testng groups="checkintest" excludegroups="functest">
  <classfileset>
    <include name=“com/testng/example/GroupTestExample” />
  </classfileset>
</testng>
  • 利用java API
TestNG tng = new TestNG();
tng.setGroups("checkintest");
tng.setExcludeGroups(“functest")
  • 运行配置的TestNG.xml

异常测试

TestNG跟踪异常处理代码提供了一个选项。可以测试是否需要代码抛出异常或不抛出。 @Test注释expectedExceptions 参数一起使用。
在这里插入图片描述

参数化测试

在TestNG的另一个有趣的功能是参数测试。在大多数情况下,你会遇到这样一个场景,业务逻辑需要一个巨大的不同数量的测试。参数测试,允许开发人员运行同样的测试,一遍又一遍使用不同的值。TestNG让你直接传递参数测试方法两种不同的方式:使用testng.xml、数据提供程序。
1、@Parameter
在这里插入图片描述
在这里插入图片描述
TestNG支持@Parameter传参方式的类型如下

  • String
  • int/Integer
  • boolean/Boolean
  • byte/Byte
  • char/Character
  • double/Double
  • float/Float
  • long/Long
  • short/Short
    2、@DataProvider
  • 只提供了一个字符串属性:名称,供测试方法作为传递参数的annotation使用
  • 两种DataProvider,一种是返回一个二维数组对象,如上面的例子;另外一种DataProvider是返回一个Iterator
  • DataProvider可以向测试方法传递任意类型任意数目的参数
  • 利用DataProvider提供不同的参数集合对一个测试方法进行多次调用
    在这里插入图片描述

忽略测试

有时,我们的代码是没有准备好,如果测试用例写入到测试方法代码将无法运行,在这种情况下,@Test(enabled = false)有助于禁用此测试案例。 测试方法是标注了@Test(enabled = false),那么并不是已经准备好测试的测试用例是绕过的。
在这里插入图片描述

并发测试

TestNG可以以多线程的模式运行所有的test,这样可以获得最大的运行速度,最大限度的节约执行时间。当然,并发运行也是有代价的,就是需要我们的代码是线程安全的
在这里插入图片描述

tesng.xml介绍

Testng.xml是以xml记录所有测试的文件。它描述了测试套件的运行时定义,也是testng中运行测试的最大工作单元。虽然没有testng.xml文件,测试也很容易被执行。但是随着测试代码的增长,testng.xml提供了方便用来存放所有运行时的配置,如设置有关类,测试,方法,参数,分组的包含与排除等。
Testng.xml的主要结构:根标签是,标签包含一个或多个标签,标签包含一个或多个标签,标签包含一个或多个标签

  • Suite:由一个XML文件表示,可以包含一个或者多个Test,suite可以通过标签来运行其他testng的xml文件
  • Test:表示一个测试,可以包含一个或者多个TestNG类
  • TestNG类:就是一个简单的Java类,至少包含一个TestNG annotation
  • Method:一个普通的Java方法,其前由@Test标记
  • Groups:TestNG可以将不同的Method分类到不同的Groups中,也可以将Class分类到不同的Groups中
发布了49 篇原创文章 · 获赞 15 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_43164644/article/details/88765494