TestNG
注意!
该组件是基于Java语言的
提示
相关博客,墙裂推荐:https://www.jianshu.com/p/8b382ea49021
Maven依赖
mvn仓库地址:https://mvnrepository.com/artifact/org.testng/testng
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.9.0</version>
<scope>test</scope>
</dependency>
注意
这个版本的testng要求 jdk11
及以上
Hello TestNG
注意
下述代码应存放在 src/test
下,而不是在 src/main
下
TestNGHelloWorld.java
import org.testng.annotations.*;
public class TestNGHelloWorld {
@BeforeClass
public void setUp(){
System.out.println("setUp!");
}
@Test
public void helloWorld(){
System.out.println("TestNGHelloWorld!");
}
@AfterClass
public void tearDown(){
System.out.println("tearDown!");
}
}
到这里直接右键运行就行
TestNG注解
注解/属性 | 描述 |
---|---|
@BeforeSuite | 带@BeforeSuite注释的方法将在本套件中所有测试运行之前运行。 |
@AfterSuite | 带@AfterSuite注释的方法将在本套件中所有测试运行之后运行。 |
@BeforeTest | @BeforeTest注解的方法将在testNG.xml文件test标签内的所有类方法运行前执行。 |
@AfterTest | @AfterTest注解的方法将在testNG.xml文件test标签内的所有类方法运行后执行。 |
@BeforeGroups | 被@BeforeGroups注解的方法会在组列表中之前被调用。 |
@AfterGroups | 被@AfterGroups注解的方法会在组列表中之后被调用。 |
@BeforeClass | 在调用当前类中的第一个测试方法之前,将运行带@BeforeClass注释的方法。 |
@AfterClass | 在运行当前类中的所有测试方法之后,将运行带@AfterClass注释的方法。 |
@BeforeMethod | @BeforeMethod注释的方法将在每个测试方法之前运行。 |
@AfterMethod | @AfterMethod注释的方法将在每个测试方法之后运行。 |
alwaysRun | 对于在方法之前的调用(BeforeSuite,...除了beforeGroups),若为true,这个配置方法无视其所属的组而运行.对于在方法之后的调用(afterSuite, afterClass, ...),若为true, 这个配置方法会运行,即使其之前一个或者多个被调用的方法失败或者被跳过。 |
dependsOnGroups | 方法依赖的组列表。 |
dependsOnMethods | 方法依赖的方法列表。 |
enabled | 是否执行注解的测试。 |
groups | 类/方法所属的组列表。 |
inheritGroups | 默认是true,则此方法会从属于在类级由@Test注解中所指定的组。举例如下: @Test(groups = "Tomandy") public class TestNGHelloWorld { //如果xml文件配置按Tomandy组执行的话,@BeforeClass注解的方法不会被执行 @BeforeClass(inheritGroups = false) public void setUp(){ System.out.println("setUp!"); } @Test(groups = "Tom") public void helloWorld(){ System.out.println("My first TestNG testCase!"); } } |
onlyForGroups | 只适用于@BeforeMethod和@AfterMethod。如果指定了,那么只有当相应的测试方法属于所列的组之一时,才会调用这个setup/teardown方法。 |
@DataProvider | 将方法标记为测试方法提供数据。带@DataProvider注释的方法必须返回一个对象[][]。想要从这个DataProvider接收数据的@Test方法需要使用dataProvider属性,此属性值必须与@DataProvider注解中的名字相同。 @DataProvider(name = "casesProvider") @Test(dataProvider = "casesProvider") |
name | dataProvider的名称。如果没有提供,默认为@DataProvider标注方法的名称。 |
parallel | 默认为false,如果为true,将并行执行测试,可大大提高用例执行效率。 |
@Factory | 将方法标记为工厂,该工厂返回将被TestNG用作测试类的对象。方法必须返回对象[]。 |
@Listeners | 定义监听器。 |
value | 继承org.testng.ITestNGListener的classe数组。继承IAnnotationTransformer和IAnnotationTransformer2的类不允许使用@Listeners,可通过testNG.xml定义。 |
@Parameters | 给一个@Test方法传参。 |
value | 方法参数的变量列表。 |
@Test | 把一个类或者方法标记为测试的一部分。 |
alwaysRun | 如果为true,则该测试方法依然会被运行即使其所依赖的方法执行失败。为false的话,则该测试方法会被skip如果其所依赖的方法执行失败。 |
dataProvider | 此测试方法的dataProvider的名称。 |
dataProviderClass | 查找dataProvider的类。如果没有指定,则在当前测试方法所在的类或者它的基类中去查。如果指定了该属性,则@DataProvider注解的方法需在指定的类上保持静态(static),举例如下: @DataProvider(name = "casesProvider") public static Object[][] caseProvider(){} -------------------------------------------------------- @Test(dataProvider = "casesProvider", dataProviderClass = CasesDataProvider.class) public void runCases(){} |
dependsOnGroups | 方法依赖的组列表。 |
dependsOnMethods | 方法依赖的方法列表。 |
description | 方法描述。 |
enabled | 是否执行@Test()注解的测试。 |
expectedExceptions | 期望测试方法抛出的异常列表。如果没有异常或在此列表中没有异常,则此测试将被标记为失败。 |
groups | 类/方法所属的组列表。 |
invocationCount | 调用方法的次数。 |
invocationTimeOut | 当前测试中所有调用累计时间的最大毫秒数。如果invocationCount属性没有指定,那么此属性会被忽略。 |
priority | 标注测试方法的优先级。较低的优先级将优先执行。 |
successPercentage | 当前方法执行所期望的成功率。 |
singleThreaded | 如果设置为true,那么这个测试类中的所有方法都保证在同一个线程中运行,即使测试当前使用parallel="methods"运行。这个属性只能在类级别使用,如果在方法级别使用,它将被忽略 |
timeOut | 当前测试需要的最大毫秒数,超过该时间则执行失败。 |
threadPoolSize | 此方法的线程池的大小。该方法将根据invocationCount值,启用多个线程调用。如果没有指定invocationCount,则忽略此属性。 |
Assert断言
源文件是 org.testng.Assert
类
里面用法大概为
// 断言为真
Boolean result = 一个返回布尔值的表达式 (例如某个变量是否为空);
Assert.assertTrue(result);
// 断言相等
String actual = 实际结果;
String expected = 预期结果;
Assert.assertEquals(actual, expected);
// 断言不为空
Assert.assertNotNull("Hello");