testNG注解的使用和执行顺序

testNG注解

本文主要包含testNG注解的使用方法和执行顺序两部分。

一、使用方法

testNG的注解的使用,主要用于方法上 @符号标示,@Test、@afterMethod、@BeforeClass、@BeforeMethod

二、执行顺序

单个类:

根据以下代码执行的结果,我们可以看出来,testNG的执行顺序是

@BeforeSuite->@BeforeTest->@BeforeClass->{@BeforeMethod->@Test->@AfterMethod}->@AfterClass->@AfterTest->@AfterSuite

其中{}内的与多少个@Test,就循环执行多少次。比如下面代码中有两个方法被@Test标识。如果存在继承关系 ,则先执行父类 ,再执行子类。

 1 package com.course.testng;
 2
 3 import org.testng.annotations.*;
 4
 5 public class BasicAnnotation {
 6     @Test
 7     public void testCase1() {
 8         System.out.println("@Test这是测试用例1");
 9     }
10
11     @BeforeMethod
12     public void beforeMethod() {
13         System.out.println("beforeMethod这是在测试方法之前运行的");
14     }
15
16     @AfterMethod
17     public void afterMethod() {
18         System.out.println("AfterMethod这是在测试方法之后运行");
19     }
20
21     @Test
22     public void testCase2() {
23         System.out.println("@Test这是测试用例2");
24     }
25
26     @BeforeClass
27     public void beforClass() {
28         System.out.println("BeforeClass这是类运行之前的方法");
29
30     }
31
32     @AfterClass
33     public void afterClass() {
34         System.out.println("afterClass类运行之后的方法");
35     }
36
37     @BeforeSuite
38     public void beforeSuite() {
39         System.out.println("BeforeSuitec测试套件");
40     }
41
42     @AfterSuite
43     public void afterSuite() {
44         System.out.println("AfterSuite测试套件");
45     }
46
47     @BeforeTest
48     public void beforeTest() {
49         System.out.println("BeforeTest这是在每个Test之前运行");
50     }
51
52     @AfterTest
53     public void afterTest() {
54         System.out.println("AfterTest这是在每个Test之后运行");
55     }
56 }

以下是运行结果

 1 E:\Software\Software\java1.8\java1.8\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:E:\Software\Software\ruanjianyingyongbao\ideaIU-2019.3.4.win\lib\idea_rt.jar=4021:E:\Software\Software\ruanjianyingyongbao\ideaIU-2019.3.4.win\bin -Dfile.encoding=UTF-8 -classpath "E:\Software\Software\ruanjianyingyongbao\ideaIU-2019.3.4.win\lib\idea_rt.jar;E:\Software\Software\ruanjianyingyongbao\ideaIU-2019.3.4.win\plugins\testng\lib\testng-rt.jar;E:\Software\Software\java1.8\java1.8\jre\lib\charsets.jar;E:\Software\Software\java1.8\java1.8\jre\lib\deploy.jar;E:\Software\Software\java1.8\java1.8\jre\lib\ext\access-bridge-64.jar;E:\Software\Software\java1.8\java1.8\jre\lib\ext\cldrdata.jar;E:\Software\Software\java1.8\java1.8\jre\lib\ext\dnsns.jar;E:\Software\Software\java1.8\java1.8\jre\lib\ext\jaccess.jar;E:\Software\Software\java1.8\java1.8\jre\lib\ext\jfxrt.jar;E:\Software\Software\java1.8\java1.8\jre\lib\ext\localedata.jar;E:\Software\Software\java1.8\java1.8\jre\lib\ext\nashorn.jar;E:\Software\Software\java1.8\java1.8\jre\lib\ext\sunec.jar;E:\Software\Software\java1.8\java1.8\jre\lib\ext\sunjce_provider.jar;E:\Software\Software\java1.8\java1.8\jre\lib\ext\sunmscapi.jar;E:\Software\Software\java1.8\java1.8\jre\lib\ext\sunpkcs11.jar;E:\Software\Software\java1.8\java1.8\jre\lib\ext\zipfs.jar;E:\Software\Software\java1.8\java1.8\jre\lib\javaws.jar;E:\Software\Software\java1.8\java1.8\jre\lib\jce.jar;E:\Software\Software\java1.8\java1.8\jre\lib\jfr.jar;E:\Software\Software\java1.8\java1.8\jre\lib\jfxswt.jar;E:\Software\Software\java1.8\java1.8\jre\lib\jsse.jar;E:\Software\Software\java1.8\java1.8\jre\lib\management-agent.jar;E:\Software\Software\java1.8\java1.8\jre\lib\plugin.jar;E:\Software\Software\java1.8\java1.8\jre\lib\resources.jar;E:\Software\Software\java1.8\java1.8\jre\lib\rt.jar;E:\Program Files\workspace\muke\AotoTest\chapter5\target\classes;E:\Maven-Repository\org\testng\testng\6.10\testng-6.10.jar;E:\Maven-Repository\com\beust\jcommander\1.48\jcommander-1.48.jar;E:\Software\Software\ruanjianyingyongbao\ideaIU-2019.3.4.win\plugins\testng\lib\jcommander-1.27.jar" com.intellij.rt.testng.RemoteTestNGStarter -usedefaultlisteners false -socket4020 @[email protected]:\Users\Administrator\AppData\Local\Temp\idea_working_dirs_testng.tmp -temp C:\Users\Administrator\AppData\Local\Temp\idea_testng.tmp
 2 [TestNG] Running:
 3   C:\Users\Administrator\.IntelliJIdea2019.3\system\temp-testng-customsuite.xml
 4
 5 BeforeSuitec测试套件
 6
 7 BeforeTest这是在每个Test之前运行
 8
 9 BeforeClass这是类运行之前的方法
10
11 beforeMethod这是在测试方法之前运行的
12
13 @Test这是测试用例1
14
15 AfterMethod这是在测试方法之后运行
16
17 beforeMethod这是在测试方法之前运行的
18
19 @Test这是测试用例2
20
21 AfterMethod这是在测试方法之后运行
22
23 afterClass类运行之后的方法
24
25 AfterTest这是在每个Test之后运行
26
27 AfterSuite测试套件
28
29 ===============================================
30 Default Suite
31 Total tests run: 2, Failures: 0, Skips: 0
32 ===============================================
33
34 Process finished with exit code 0

多个类:

@BeforeSuite(按类顺序执行)->@BeforeTest(按类顺序执行)->@BeforeClass->{@BeforeMethod->@Test->@AfterMethod}->@AfterClass ->@AfterTest->@AfterSuite

黑色部分 按XML中配置的顺序执行,即执行你一个类中的@BeforeSuite 第二个类中的@BeforeSuite ,第一个类中的@BeforeTest,第二个类中的@BeforeTest

红色部分 则需要一个类中的所有test(@BeforeClass->{@BeforeMethod->@Test->@AfterMethod}->@AfterClass)执行完毕之后,再执行第二个类中的test 。

第一个类中的代码

1 package com.course.testng;
 2
 3 import org.testng.annotations.*;
 4
 5 public class BasicAnnotation {
 6     @Test
 7     public void testCase1() {
 8         System.out.println("@Test这是测试用例1");
 9     }
10
11     @BeforeMethod
12     public void beforeMethod() {
13         System.out.println("beforeMethod这是在测试方法之前运行的");
14     }
15
16     @AfterMethod
17     public void afterMethod() {
18         System.out.println("AfterMethod这是在测试方法之后运行");
19     }
20
21     @Test
22     public void testCase2() {
23         System.out.println("@Test这是测试用例2");
24     }
25
26     @BeforeClass
27     public void beforClass() {
28         System.out.println("BeforeClass这是类运行之前的方法");
29
30     }
31
32     @AfterClass
33     public void afterClass() {
34         System.out.println("afterClass类运行之后的方法");
35     }
36
37     @BeforeSuite
38     public void beforeSuite() {
39         System.out.println("BeforeSuitec测试套件");
40     }
41
42     @AfterSuite
43     public void afterSuite() {
44         System.out.println("AfterSuite测试套件");
45     }
46
47     @BeforeTest
48     public void beforeTest() {
49         System.out.println("BeforeTest这是在每个Test之前运行");
50     }
51
52     @AfterTest
53     public void afterTest() {
54         System.out.println("AfterTest这是在每个Test之后运行");
55     }
56 }

第二个类中的代码

 1 package com.course.testng;
 2
 3 import org.testng.annotations.*;
 4
 5 public class CpBasicAnnotation {
 6     @Test
 7     public void testCase1() {
 8         System.out.println("@Test这是测试用例1__________CpBasicAnnotation");
 9     }
10
11     @BeforeMethod
12     public void beforeMethod() {
13         System.out.println("beforeMethod这是在测试方法之前运行的__________CpBasicAnnotation");
14     }
15
16     @AfterMethod
17     public void afterMethod() {
18         System.out.println("AfterMethod这是在测试方法之后运行__________CpBasicAnnotation");
19     }
20
21     @Test
22     public void testCase2() {
23         System.out.println("@Test这是测试用例__________CpBasicAnnotation2");
24     }
25
26     @BeforeClass
27     public void beforClass() {
28         System.out.println("BeforeClass这是类运行之前的方法__________CpBasicAnnotation");
29
30     }
31
32     @AfterClass
33     public void afterClass() {
34         System.out.println("afterClass类运行之后的方法__________CpBasicAnnotation");
35     }
36
37     @BeforeSuite
38     public void beforeSuite() {
39         System.out.println("BeforeSuitec测试套件__________CpBasicAnnotation");
40     }
41
42     @AfterSuite
43     public void afterSuite() {
44         System.out.println("AfterSuite测试套件__________CpBasicAnnotation");
45     }
46
47     @BeforeTest
48     public void beforeTest() {
49         System.out.println("BeforeTest这是在每个Test之前运行__________CpBasicAnnotation");
50     }
51
52     @AfterTest
53     public void afterTest() {
54         System.out.println("AfterTest这是在每个Test之后运行__________CpBasicAnnotation");
55     }
56
57 }

xml配置文件

1 <?xml version="1.0" encoding="UTF-8" ?>
2 <suite name="suitname">
3 <test name="runAll">
4     <classes>
5         <class name="com.course.testng.BasicAnnotation"/>
6         <class name="com.course.testng.CpBasicAnnotation"/>
7     </classes>
8 </test>
9 </suite>

运行结果如下

 1 BeforeSuitec测试套件
 2 BeforeSuitec测试套件__________CpBasicAnnotation
 3 BeforeTest这是在每个Test之前运行
 4 BeforeTest这是在每个Test之前运行__________CpBasicAnnotation
 5
 6 BeforeClass这是类运行之前的方法
 7 beforeMethod这是在测试方法之前运行的
 8 @Test这是测试用例1
 9 AfterMethod这是在测试方法之后运行
10 beforeMethod这是在测试方法之前运行的
11 @Test这是测试用例2
12 AfterMethod这是在测试方法之后运行
13 afterClass类运行之后的方法
14
15
16 BeforeClass这是类运行之前的方法__________CpBasicAnnotation
17 beforeMethod这是在测试方法之前运行的__________CpBasicAnnotation
18 @Test这是测试用例1__________CpBasicAnnotation
19 AfterMethod这是在测试方法之后运行__________CpBasicAnnotation
20 beforeMethod这是在测试方法之前运行的__________CpBasicAnnotation
21 @Test这是测试用例__________CpBasicAnnotation2
22 AfterMethod这是在测试方法之后运行__________CpBasicAnnotation
23 afterClass类运行之后的方法__________CpBasicAnnotation
24
25
26 AfterTest这是在每个Test之后运行
27 AfterTest这是在每个Test之后运行__________CpBasicAnnotation
28 AfterSuite测试套件
29 AfterSuite测试套件__________CpBasicAnnotation
30
31 ===============================================
32 suitname
33 Total tests run: 4, Failures: 0, Skips: 0
34 ===============================================
35 Process finished with exit code 0

原文地址:https://www.cnblogs.com/linxinmeng/p/12590337.html

时间: 2024-10-15 09:12:13

testNG注解的使用和执行顺序的相关文章

TestNG+Factory,自定义方法的执行顺序

最近使用TestNG有一个需求,希望在配合使用factory执行测试时,factory生成测试数据的执行顺序与生成时保持一致. 在未做任何定制时,执行顺序是随机的,如果想要一致的顺序,就得额外配置拦截器:IMethodInterceptor 具体实现方法, 如下: 工厂类: @Listeners(ExampleInterceptor.class) // 通过拦截器重新给方法排序, 否则是乱序的 public class FactoryTest_Order { @Factory public Ob

TestNG学习-002-annotaton 注解概述及其执行顺序

此文主要讲述用 TestNG 基础的 annotation (注解)知识,及其执行的顺序,并通过一个 TestNG 简单的实例演示 annotation 的执行顺序. 希望能对初学 TestNG 测试框架的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激! 言归正传,以下为 TestNG 常用的 annotation 及其释义,敬请参阅. @BeforeSuite:被此注解的方法将在所有测试运行之前运行该方法. @AfterSuite: 被此注解的方法将在所有测试运行之后运行该方法. @Bef

TestNG基础教程 - TestNG.xml中的测试级别和常用注解执行顺序

根据testng.xml 文件配置, 测试级别为suite -> test -> class -> methods. test 对应testng.xml 中的test 标签, 而不是测试类里的@Test. 测试类里的@Test 对应 testng.xml中的methods. 创建TestCase 如TC3 运行效果 所以在使用@BeforeSuite,@BeforeTest,@BeforeClass,@BeforeMethod 等标签时, 它们的实际执行顺序也是suite -> t

spring bean中构造函数,afterPropertiesSet和init-method的执行顺序

http://blog.csdn.net/super_ccc/article/details/50728529 1.xml文件 [html] view plain copy print? <bean id="aaa" class="com.dingwang.Test.Aaa" init-method="init"> <constructor-arg name="name" value="ddd&qu

python unittest控制用例的执行顺序

为什么要进行顺序控制呢?使用过testng的同学就知道,它相对于junit来说有更强大的功能,其中的一个功能就是依赖测试.什么是依赖测试呢?简单的说一下就是,A方法运行时,其中有个变量的取值是B方法的动态产出值.这样就必须先执行B方法.testng的test方法有dependson属性来制定方法的依赖.但是向python的unittet框架,他类似于junit,没有依赖测试的功能.unittest的main()方法执行用例的顺序是按照测试类.测试方法的名字的ASCII顺序来执行测试方法.如果想要

Junit指定测试执行顺序

原文链接: Test execution order原文日期: 2012年12月06日翻译日期: 2014年7月2日翻译人员: 铁锚 说明: Junit4.11版本及以后才支持,建议升级到最新版本. 按照设计原则,JUnit是不指定测试方法调用执行顺序的.目前为止,这些方法只是简单地按照反射(reflection) API返回的顺序执行.但是,使用JVM默认提供的排序是很不明智的,因为Java平台没有指定任何有规律的顺序,而事实上JDK 7可能会返回一个随机的顺序.当然,精心编写的测试代码之间并

JMeter学习-005-JMeter 主要组件概要介绍及执行顺序

本文将对 JMeter 主要组件(主要涉及 Threads(Users).Test Fragment.逻辑控制器.配置元件.定时器.前置处理器.Sampler.后置处理器.断言.监听器 十大组件)进行概要介绍,详细使用方法会在后续文章中陆续介绍,敬请惠顾参阅.组件如下所示: 零.测试计划 测试计划是测试的起点,同时也是其他所有组件的容器. 一.Threads(Users)-线程组 每个测试需求的必备组件,是用来模拟用户并发的组件.JMeter 的每个任务都是用线程来处理的.线程组界面如下所示:

TestNg线程池配置、执行次数配置、超时配置

使用注解的方式对TestNg线程池配置.执行次数配置.超时配置 注:使用注解来控制测试方法运行的次数和超时时间,timeOut在单线程或者多线程模式下都可用,threadPoolSize设置了线程池的个数 * ,在观察结果时,发现很多值是重复的,但是可能不等于我们配置的线程池个数,因为线程的个数还取决于硬件CPU的支持, invocationCount----表示执行的次数 threadPoolSize-----表示线程池的内线程的个数 timeOut-------超时时间-毫秒 Javacod

解说asp.net core MVC 过滤器的执行顺序

asp.net core MVC 过滤器会在请求管道的各个阶段触发.同一阶段又可以注册多个范围的过滤器,例如Global范围,controller范围等.以ActionFilter为例,我们来看看过滤器的触发顺序. 过滤器可注册范围 全局:将作用于所有请求的action controller:将作用于这个controller下的所有action action:作用于单个action 定义过滤器 全局 public class GlobalActionFilter : IAsyncActionFi