同一个组里的方法类,如果分别属于两个不同的测试用例(<test>)内,那么它们其实可以算两个组,它们会在每个测试用例分别运行,而不会合在一起运行;
示例:
package com.ggf.testng.groups; import org.testng.annotations.AfterGroups; import org.testng.annotations.BeforeGroups; import org.testng.annotations.Test; import javax.sound.midi.Soundbank; /** * @Description: 对测试用例方法进行分组,可以对一组中的数据进行初始化 * @Author: ggf * @Date: 2019/12/29 */ public class GroupsOnMethod { @BeforeGroups(groups = "server") public void beforeGroupsOnServer() { System.out.println("服务端组运行前执行的方法。。。"); } @BeforeGroups(groups = "client") public void beforeGroupsOnClient() { System.out.println("客户端组运行前执行的方法。。。"); } @Test(groups = "server") public void test1() { System.out.println("server test1 run ...."); } @Test(groups = "server") public void test2() { System.out.println("server test2 run ...."); } @Test(groups = "client") public void test3() { System.out.println("client test3 run ...."); } @Test(groups = "client") public void test4() { System.out.println("client test4 run ...."); } @AfterGroups(groups = "server") public void afterGroupsOnServer() { System.out.println("服务端组运行之后执行的方法。。。"); } @AfterGroups(groups = "client") public void afterGroupsOnClient() { System.out.println("客户端组运行之后执行的方法。。。"); } }运行结果:
[TestNG] Running: C:\Users\Administrator\.IntelliJIdea2019.2\system\temp-testng-customsuite.xml 服务端组运行前执行的方法。。。 server test1 run .... server test2 run .... 服务端组运行之后执行的方法。。。 客户端组运行前执行的方法。。。 client test3 run .... client test4 run .... 客户端组运行之后执行的方法。。。 =============================================== Default Suite Total tests run: 4, Failures: 0, Skips: 0 =============================================== 5、超时属性timeOut@Test(timeOut = 3000) 设置超时时间,单位为毫秒。
示例:
package com.course.testng; import org.testng.annotations.Test; public class TimeOutTest { /** * 单位为毫秒值,3秒内没有响应,就证明失败了,反之成功 * @throws InterruptedException */ @Test(timeOut = 3000) public void testSuccess() throws InterruptedException { Thread.sleep(2000); } @Test(timeOut = 2000) public void testFailed() throws InterruptedException { Thread.sleep(3000); } }运行结果:
[TestNG] Running: C:\Users\Administrator\.IntelliJIdea2019.2\system\temp-testng-customsuite.xml org.testng.internal.thread.ThreadTimeoutException: Method com.course.testng.TimeOutTest.testFailed() didn't finish within the time-out 2000 =============================================== Default Suite Total tests run: 2, Failures: 1, Skips: 0 =============================================== 6、属性总结 属性名 描述alwaysRun 设置为 true 时,无论什么情况都会运行
dataProvider 数据提供者的名称
dataProviderClass 如果未指定,将在当前测试方法的类或其父类之一上查找数据提供者。 如果指定了此属性,则数据提供者方法在指定的类上必须是静态的。
dependsOnGroups 依赖的组列表
dependsOnMethods 依赖的方法列表
description 说明
enabled 默认为true,设置为 false 时失效
expectedExceptions 预期测试方法将引发的异常列表。 如果未引发任何异常或与该列表中的异常不同,则此测试将标记为失败。
groups 所属组
invocationCount 调用次数
invocationTimeOut 所有 invocationCount 的累积超时时间。 注意:如果未指定 nvocationCount,则将忽略此属性。
priority 此测试方法的优先级
successPercentage 该方法预期成功的百分比
singleThreaded 如果设置为 rue,则即使当前正在使用 parallel =“ methods” 运行测试,也保证该测试类上的所有方法都可以在同一线程中运行。 此属性只能在类级别使用,如果在方法级别使用,则将被忽略。
timeOut 超时时间
threadPoolSize 此方法的线程池的大小。 该方法将从 invocationCount 指定的多个线程中调用。 注意:如果未指定 invocationCount,则忽略此属性
三、testng常用注解 注解 描述
@BeforeSuite 在该套件的所有测试都运行在注释的方法之前,仅运行一次(套件测试是一起运行的多个测试类)。
@AfterSuite 在该套件的所有测试都运行在注释方法之后,仅运行一次。
@BeforeClass 在调用当前类的第一个测试方法之前运行,注释方法仅运行一次。
@AfterClass 在调用当前类的第一个测试方法之后运行,注释方法仅运行一次。
@BeforeTest 注释的方法将在属于<test>标签内的类的所有测试方法运行之前运行。
@AfterTest 注释的方法将在属于<test>标签内的类的所有测试方法运行之后运行。
@BeforeGroups 配置方法将在之前运行组列表。 此方法保证在调用属于这些组中的任何一个的第一个测试方法之前不久运行。
@AfterGroups 此配置方法将在之后运行组列表。该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行。
@BeforeMethod 注释方法将在每个测试方法之前运行。
@AfterMethod 注释方法将在每个测试方法之后运行。
@Parameters 描述如何将参数传递给@Test方法。
@DataProvider 标记一种方法来提供测试方法的数据。 注释方法必须返回一个Object [] [],其中每个Object []可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称。
@Factory 将一个方法标记为工厂,返回TestNG将被用作测试类的对象。 该方法必须返回Object []。
@Listeners 定义测试类上的侦听器。
@Test 将类或方法标记为测试的一部分。
示例: