TestNG中用到的 annotation的快速预览及其属性。

 
@BeforeSuite: 被注释的方法将在所有测试运行前运行
@AfterSuite:  被注释的方法将在所有测试运行后运行
@BeforeTest:  被注释的方法将在测试运行前运行
@AfterTest:   被注释的方法将在测试运行后运行
 
@BeforeGroups: 被配置的方法将在列表中的gourp前运行。这个方法保证在第一个属于这些组的测试方法调用前立即执行。
@AfterGroups:  被配置的方法将在列表中的 gourp后运行。这个方法保证在最后一个属于这些组的测试方法调用后立即执行。
@BeforeClass:  被注释的方法将在当前类的第一个测试方法调用前运行。
@AfterClass:   被注释的方法将在当前类的所有测试方法调用后运行。
 
@BeforeMethod: 被注释的方法将在每一个测试方法调用前运行。
@AfterMethod:  被注释的方法将在每一个测试方法调用后运行。
 
 
属性:
alwaysRun 
1.对于每个before方法(beforeSuite, beforeTest,beforeTestClass和beforeTestMethod, 但是不包括 beforeGroups):如果设置为 true,被配置的方法将总是运行而不管它属于哪个组。
2.对于after方法(afterSuite, afterClass, ...): 如果设置为 true,被配置的方法甚至在一个或多个先调用的方法失败或被忽略时也将运行。
 
dependsOnGroups       这个方法依赖的组列表
dependsOnMethods   这个方法依赖的方法列表
enabled           这个类的方法是否激活
groups           这个类或方法所属的分组列表
inheritGroups   如果设置为 true,这个方法被属于在类级别被@Test annotation 指定的组
DataProvider   标记一个方法用于为测试方法提供数据。
被注释的方法必须返回 Object[][], 其中每个Object[]可以指派为这个测试方法的参数列表。
这个DataProvider接收数据@Test方法需要使用一个和当前注释相同名称的 dataProvider名称
name 这个 DataProvider的名称
 
@Factory  标记方法作为一个返回对象的工厂,这些对象将被TestNG用于作为测试类。这个方法必须返回 Object[]
@Parameters   描述如何传递参数给
 
@Test 方法
alwaysRun    如果设置为 true,这个测试方法将总是运行,甚至当它依赖的方法失败时。
dataProvider    这个测试方法的 data provider的名称
dataProviderClass  用于查找 data provider的类。如果不指定,将在当前测试方法所在的类或者它的基类上查找 data provider。如果这个属性被指定, 则 data provider方法需要是指定类的 static方法。
value   用于填充这个方法的参数的变量列表
 
dependsOnGroups    当前方法依赖的组列表
dependsOnMethods    当前方法依赖的方法列表
escription    当前方法的描述
enabled    当前类的方法/方法是否被激活
expectedExceptions    测试方法期望抛出的异常列表。如果没有异常或者抛出的不是列表中的任何一个,当前方法都将标记为失败.
invocationCount    当前方法被调用的次数
successPercentage    当前方法期望的成功率
sequential  如果设置为 true,当前测试类上的所有方法保证按照顺序运行。甚至测试们在parallel="true"的情况下.这个属性只能用于类级别,如果用于方法级别将被忽略。
timeOut    当前方法容许花费的最大时间,单位毫秒。
threadPoolSize    当前方法的线程池大小。方法将被多线程调用,次数由 invocationCount参数指定
注意:如果 invocationCount没有指定则这个属性将被忽略
 
上面是 TestNG中用到的 annotation列表,从中我们可以看到 TestNG提供的一些特性
1. before 方法和after 方法   带来了足够丰富的测试生命周期控制
2. dependsOnGroups/dependsOnMethods 提供了依赖检查机制,并可以严格控制执行顺序
3. DataProvider 使得对同一个方法的测试覆盖变的非常轻松,非常适合进行边界测试,只要给出多种测试数据就可以针对一个测试方法进行覆盖
4. expectedExceptions 使得异常测试变的非常轻松
5. invocationCount/threadPoolSize 终于可以简单的直接进行多线程测试了,这个绝对是 junit的超级弱项,回想 junit中那个万恶的
System.exist(0)...
6. timeOut 终于不用死等然后手工强行关闭测试,TestNG 想的太周到了
 
groups    当前类/方法所属的组列表