1、写在注解的前面
TestNG利用Java注解完成非常强大的功能,@test\@Beforexx\@Afterxx等都是非常熟悉的注解,到底TestNG有多少种注解呢,本篇整理TestNG的全部注解。
注解除了本身的关键字外,修饰词也是非常灵活的,本文会全面介绍TestNG的注解和修饰词。除了对官网内容的翻译外,还给出具体的实际需求,说明这些注解使用的典型场景。
2、注解
如下分三组介绍TestNG全部的注解,以及注解的修饰词。
注解 | 注解方法 |
@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方法,仅会在属于该组列表的测试方法执行的时候,才会被激活。
注解 | 注解方法 | 修饰词 |
@DataProvider | 该方法为提供测试数据的方法。方法必须返回二维数组Object[][],其中每一组Object[]为测试方法的一组测试数据。以@Test注解的方法会尝试从该方法中获取指定的同名数据。 | name:提供的数据名称,如果没有指定,会自动设定为该方法的名字。 parallel:默认为false,如果设定为true,数据会并行生成。 |
@Parameters | 传递给@Test注解的方法的参数。 | value:传递的参数列表。 |
上述两个注解是参数化TestNG必不可少的注解,其中DataProvider适用于参数多、复杂的情况,一般用于对于测试方法的数据驱动;Parameters相对比较简单,适合对整体测试进行一些参数配置的情况,比如整体环境的数据库连接参数、Selenium Driver的主机地址等。
注解 | 注解方法 | 修饰词 |
@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。
有表述错误的地方欢迎评论指正。