• 0
  • 1
分享

1、写在注解的前面

    TestNG利用Java注解完成非常强大的功能,@test\@Beforexx\@Afterxx等都是非常熟悉的注解,到底TestNG有多少种注解呢,本篇整理TestNG的全部注解。

   注解除了本身的关键字外,修饰词也是非常灵活的,本文会全面介绍TestNG的注解和修饰词。除了对官网内容的翻译外,还给出具体的实际需求,说明这些注解使用的典型场景。

2、注解

    如下分三组介绍TestNG全部的注解,以及注解的修饰词。   

(1)Beforexxx和Afterxxx

注解注解方法
@BeforeSuite注解的方法运行在该套件的所有测试之前,仅运行一次。
@AfterSuite注解的方法运行在该套件的所有测试之后,仅运行一次。
@BeforeTest注解的方法运行在属于<test>标签内的所有测试方法之前。
@AfterTest注解的方法运行在属于<test>标签内的所有测试方法之后。
@BeforeGroups注解的方法运行在指定的组列表之前,此方法保证运行在任何属于组列表中的任何一个测试方法之前。
@AfterGroups注解的方法运行在指定的组列表之后,此方法保证运行在任何属于组列表中的任何一个测试方法之后。
@BeforeClass注解的方法运行在当前类第一个测试方法之前,仅运行一次。
@AfterClass注解的方法运行在当前类最后一个测试方法之后,仅运行一次。
@BeforeMethod注解的方法运行在每个测试方法之前。
@AfterMethod注解的方法运行在每个测试方法之后。

   上述10个注解,分为Beforexxx和Afterxxx5对,是很容易理解的,实际使用中也是针对不同的数据准备和清理的需求进行使用。

  在存在父类子类继承关系时,上述注解如果在父类存在,则会被子类继承。这个特性很好的支持了将测试环境准备集中在一个通用父类完成的需求。此时,TestNG会确保@Before方法根据继承的顺序执行,即父类先行,然后沿着继承链,按序向下执行;@After方法逆序向回执行,直到第一个父类。

  上述10个注解支持如下的修饰词:

  (1.1)alwaysRun:对于全部的@Before方法,除@BeforeGroups之外,该属性置为true,则无论该方法属于哪个组,都会运行。对于全部@After方法,如果设置为true,则即使之前的测试方法出现失败或跳过,该@After方法也会执行。

  (1.2)dependsOnGroups:该方法依赖的组列表。

  (1.3)dependsOnMethods:该方法依赖的方法列表。

  (1.4)enabled:该方法或类是否启用。

  (1.5)groups:该方法或类所属组列表。

  (1.6)inheritGroups:设置为true时,该方法会继承所属类的@Test注解指定的组列表。

  (1.7)onlyForGroups:只针对@BeforeMethod和@AfterMethod生效,如果指定,则该@BeforeMethod和@AfterMethod方法,仅会在属于该组列表的测试方法执行的时候,才会被激活。

(2)数据驱动

注解注解方法修饰词
@DataProvider该方法为提供测试数据的方法。方法必须返回二维数组Object[][],其中每一组Object[]为测试方法的一组测试数据。以@Test注解的方法会尝试从该方法中获取指定的同名数据。

name:提供的数据名称,如果没有指定,会自动设定为该方法的名字。

parallel:默认为false,如果设定为true,数据会并行生成。
@Parameters传递给@Test注解的方法的参数。value:传递的参数列表。

    上述两个注解是参数化TestNG必不可少的注解,其中DataProvider适用于参数多、复杂的情况,一般用于对于测试方法的数据驱动;Parameters相对比较简单,适合对整体测试进行一些参数配置的情况,比如整体环境的数据库连接参数、Selenium Driver的主机地址等。

(3)测试

注解注解方法修饰词
@Factory标记该方法为一个工厂方法,返回值作为TestNG的测试类,必须返回Object[]。
@Listeners定测试类的监听器。value:监听器数组,监听器是继承于org.testng.ITestNGListener的类。
@Test标记该类或方法进行测试。

    Factory是出场率不是很高的注解,在快速构建重复同类测试中非常有用。根据需要返回按需求实例化的测试类对象,降低testng.xml的复杂度,提高可维护性。

   Listeners注解提供了我们在脚本中注入监听器的机会,与testng.xml的listeners作用一致,更多的时候我们会选择在配置文件中搞定。

    Test注解是主角,所以“光环”很多,集中说明一下test注解支持的修饰词。

修饰词

作用

alwaysRun

如果设置为true,即使该方法依赖的方法失败了,该方法依然会执行。否则,该方法会跳过。

dataProvider

提供给该方法的测试数据名称。

dataProviderClass

提供测试数据的类,如果没有指定需要测试数据的方法会在当前类,或当前类的父类尝试寻找。如果使用该属性指定测试数据提供类,则提供测试数据的方法需要设定为static,否则无法调用。

dependsOnGroups  

该方法依赖的组列表。

dependsOnMethod 

该方法依赖的方法列表。

description

该方法的描述信息。

enabled

是否启用该方法/类。

expectedExceptions

测试方法期望抛出的异常列表,如果该方法没有抛出任何异常,或者抛出的异常不属于配置列表中的,则该方法会置为测试失败。

groups

该方法/类所属的组列表。

invocationCount

方法被调用的次数。

invocationTimeOut

测试执行的超时时间,invocationCount次数的累积时间,以毫秒计数。如果invocationCount未指定,则该值无效。

priority

测试方法的优先级,数字越小级别越高,高级的会先执行。

successPercentage

测试方法期望的执行成功百分比。

singleThreaded

如果设置为true,TestNG会确保该测试类的全部测试方法运行在一个线程中,即使该测试设定的并行级别为parallel="methods"。该属性只能应用在class上,TestNG忽略在method上的该修饰。注意:该修饰当需要串行执行时使用,目前不推荐使用(deprecated)。

timeOut

测试方法执行超时时间,以毫秒计数。

threadPoolSize

该方法的线程池大小。当设定方法的invocationCount属性后,方法会议多线程的方式运行。注意:如果invocationCount属性没有设定,则该属性会被TestNG忽略。

敬请期待下一章节:testng.xml。

有表述错误的地方欢迎评论指正。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   RequestsLibrary大家都不陌生,作为robotframework接口请求常用关键字被频繁使用。但是,笔者最近在写自动化接口用例时,发现RequestsLibrary库和N年前的老版本相比,还是有了不少改(优)变(化),在用法上来说还是有一点区别。那么,今天就让我们老生常谈,再聊聊这个RequestsLibrary库吧~  一、版本对比  RequestsLibrary最新版本为2021.4.22号发布的0.91版本,适配python2.x和python3.x,只需一句pip install robotframework-requests命令即可在线安装。  与历史<0.8...
            15 15 1053
            分享
          •   美国国家公路交通安全管理局 (NHTSA) 关闭了针对特斯拉车辆的又一项调查,上周该机构刚刚结束了对特斯拉 Autopilot 系统的调查。  本周,NHTSA 宣布关闭一项始于 2020 年 11 月的调查,该调查旨在查明导致汽车倒车时后视摄像头图像显示丢失的触屏故障原因。  该机构于 5 月 2 日正式关闭调查,此前调查范围涵盖了 158,716 辆特斯拉汽车。NHTSA 在 2020 年的文件中描述了最初的问题:“触屏故障会导致倒车时后视摄像头图像显示丢失,从而降低倒车时的后方视野。触屏故障还会影响空调系统 (除雾) 功能以及与 ADAS、Autopilot 系统和转向灯相关的警示音...
            0 0 631
            分享
          • 前言例如:测试工程师面试题目1、软件的生命周期有哪些阶段?① 需求阶段分析和学习阶段,团队去查看这个需求是不是可测的。② 计划阶段辨别出哪些活动和资源和测试的目标时匹配的,辨别并追踪这些测试的指标、计划。③ 分析阶段通过需求文档等条件辨别测试条件,追溯到需求。④ 设计阶段概述测试条件;获取测试数据;搭建环境;跟踪测试指标。⑤ 编码阶段创建详细的测试用例,进行编码。⑥ 运行和维护阶段⑦ 总结阶段检验完成度和用户满意度。2、测试的整个流程有哪些① 需求评审阅读需求,理解需求,查看是否有不符合逻辑的需求,明确测试周期。② 测试计划根据项目计划和开发人员的时候指定测试计划,包含测试内容、测试规划、测试...
            1 1 3075
            分享
          •   我们在开发测试过程中是不是常常会因为查询效率低下而感到苦恼?  把数据都存在数据库中,通过建立索引可以提高数据查询效率,但是如果我们查找的数据索引无法生效,数据库一条一条的判断效率又得不到提升。  这里我们给大家介绍一种能够在大数据量下提高查询效率的方法ES(elasticsearch)搜索引擎,接下来我们从什么是搜索、普通搜索面临的问题和ES如何解决这些问题这几个方面,让大家快速理解ES搜索引擎。  什么是搜索  简单的说搜索就是我们在搜索框输入关键词,查找哪些网页包含对应的关键词的过程。  例如:用户在搜索框输入一个词,客户端软件发送一个请求到后台,后台通过sql语句从数据库中找出相关...
            0 0 1242
            分享
          • 刚入行或准备入行软件测试时大都停留在对测试的初步印象,测试就是对一个产品根据已有的用例执行找Bug的过程。当工作过一段的时间后,则对软件测试有了基本的认识,找Bug仅仅是作为一个测试人员最基本的技能。测试还包括根据需求和设计文档进行用例的设计;测试报告的编写和总结、测试报告及时交付;与研发沟通推动Bug及时解决;编写部分自动化测试脚本提高测试效率;测试环境的搭建;测试工具的使用等。同时认识到测试不仅包括基本的功能测试,还有压力测试、稳定性测试、性能测试、安全测试等各种测试方法和技术。随着工作年限和经验的增加,参与过更多的项目,也独立负责过几个模块后,对软件测试有了更高的认识,软件测试除了上面列...
            1 3 2157
            分享
      • 51testing软件测试圈微信