码迷,mamicode.com
首页 > 其他好文 > 详细

testNG注解的使用和执行顺序

时间:2020-03-29 01:16:26      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:测试   maven   多个   process   运行   manage   run   技术   default   

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 @w@C:\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

 

testNG注解的使用和执行顺序

标签:测试   maven   多个   process   运行   manage   run   技术   default   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!