TestNg注解使用

1.TestNG常用注解

@Test 标记一个类或方法作为测试的一部分

@BeforeMethod 注解的方法将在每个测试方法运行之前运行

@AfterMethod 注解的方法将在每个测试方法运行之后运行

@BeforeClass 注解的方法将只运行一次,在当前类中所有方法运行之前调用

@AfterClass 注解的方法将只运行一次,在当前类中所有方法运行之后调用

@BeforeSuite 标记的方法:在某个测试套件(suite)开始之前运行

@AfterSuite标记的方法:在某个测试套件(suite)所有的测试方法执行之后运行

@BeforeGroups 此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用

@AfterGroups此方法是保证在运行属于任何这些组最后一个测试方法后,该方法被调用

@BeforeTest 是针对xml文件中的test标签进行操作,在xml中的每一个test标签执行前运行

@AfterTest 是针对xml文件中的test标签进行操作,在xml中的每一个test标签执行后运行

1.1代码示例

 1 public class BasicAnnotince {
 2 //    最基本的注解,用来把方法标记为测试的一部分
 3     @Test(groups = "1")
 4     public void testCase1() {
 5         System.out.println("我是测试用例1");
 6     }
 7     @Test(groups = "2")
 8     public void testCase2() {
 9         System.out.println("我是测试用例2");
10     }
11     @BeforeMethod
12     public void beforeMethod1() {
13         System.out.println("beforeMethod-在每一个测试用例执行之前运行");
14     }
15     @AfterMethod
16     public void afterMethod2() {
17         System.out.println("afterMethod-在每一个测试用例执行之后运行");
18     }
19     @BeforeClass
20     public void beforeClass1() {
21         System.out.println("beforeClass1-在当前类中方法运行之前调用");
22     }
23     @AfterClass
24     public void afterClass1() {
25         System.out.println("afterClass1-在当前类中所有方法运行之后调用");
26     }
27     @BeforeSuite
28     public void beforeSuite1() {
29         System.out.println("beforeSuite运行了");
30     }
31     @AfterSuite
32     public void afterSuite1() {
33         System.out.println("afterSuite运行了");
34     }
35     @BeforeTest
36     public void beforeTest1() {
37         System.out.println("beforeTest-在测试方法开始之前运行");
38     }
39     @AfterTest
40     public void afterTest1() {
41         System.out.println("afterTest1-在测试方法结束之后运行");
42     }
43     @BeforeGroups("1")
44     public void beforeGroups() {
45         System.out.println("beforeGroups-111111");
46     }
47     @AfterGroups("1")
48     public void afterGroups() {
49         System.out.println("afterGroups-111111");
50     }
51 }

1.2运行结果

2.套件测试

2.1代码示例

 1 public class SuiteConfig {
 2     @BeforeSuite
 3     public void beforeSuite(){
 4         System.out.println("before suite运行啦");
 5     }
 6
 7     @AfterSuite
 8     public  void aftersuite(){
 9         System.out.println("after suite 运行啦");
10     }
11
12     @BeforeTest
13     public void beforeTest(){
14         System.out.println("beforeTest");
15     }
16
17     @AfterTest
18     public void afterTest(){
19         System.out.println("afterTest");
20     }
21 }

2.2运行结果

3.忽略测试:@Test(enabled = false)

3.1代码示例

 1 public class IgnoreTest {
 2     @Test
 3     public void ignore1() {
 4         System.out.println("ignore1");
 5     }
 6     @Test(enabled = false)
 7     public void ignore2() {
 8         System.out.println("ignore2");
 9     }
10 }

3.2运行结果

4.组测试@Test(groups = "组名"),@BeforeGroups("组名"),@AfterGroups("组名")

4.1代码示例

 1 public class GroupsTest {
 2     @Test(groups = "server")
 3     public void test1() {
 4         System.out.println("这是服务端的测试方法1");
 5     }
 6     @Test(groups = "server")
 7     public void test2() {
 8         System.out.println("这是服务端的测试方法2");
 9     }
10     @Test(groups = "client")
11     public void test3() {
12         System.out.println("这是客户端的测试方法3");
13     }
14     @Test(groups = "client")
15     public void test4() {
16         System.out.println("这是客户端的测试方法4");
17     }
18     @BeforeGroups("server")
19     public void beforeGroupsOnServer() {
20         System.out.println("这是服务端组运行之前执行的方法");
21     }
22     @AfterGroups("server")
23     public void afterGroupsOnServer() {
24         System.out.println("这是服务端组运行之后执行的方法");
25     }
26 }

4.2运行结果

5.类分组测试@Test(groups = "组名"),xml中include标签name属性为组名

5.1代码示例

@Test(groups = "stu")
public class GroupsOnClass1 {
    public void test1() {
        System.out.println("GroupsOnClass1中test1方法");
    }
    public void test2() {
        System.out.println("GroupsOnClass1中test2方法");
    }
}
@Test(groups = "tea")
public class GroupsOnClass2 {
    public void test1() {
        System.out.println("GroupsOnClass2中test1方法");
    }
    public void test2() {
        System.out.println("GroupsOnClass2中test2方法");
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<suite name="test1">
    <test name="onlyRunStu">
        <groups>
            <run>
                <include name="stu"/>
            </run>
        </groups>
        <classes>
            <class name="com.test.testng.GroupsOnClass1"/>
            <class name="com.test.testng.GroupsOnClass2"/>
        </classes>
    </test>
</suite>

5.2运行结果

6.异常测试@Test(expectedExceptions = 异常类名)

6.1代码示例

1 public class ExceptionTest {
2     @Test(expectedExceptions = RuntimeException.class)
3     public void runTimeExceptionSuccess() {
4         System.out.println("这是成功的异常测试");
5         throw new RuntimeException();
6     }
7 }

6.2运行结果

7.依赖测试:@Test(dependsOnMethods = {"XXX方法名"} ) ,当被依赖的方法执行失败,依赖的方法忽略

7.1代码示例

 1 public class DependsTest {
 2     @Test
 3     public void test1() {
 4         System.out.println("test1 run");
 5         throw new RuntimeException();
 6     }
 7     @Test(dependsOnMethods = {"test1"})
 8     public void test2() {
 9         System.out.println("test2 run");
10     }
11 }

7.2运行结果

8.参数化测试——xml文件参数化

8.1代码示例

1 public class ParameterTest {
2     @Test
3     @Parameters({"name","age"})
4     public void paraTest(String name,int age) {
5         System.out.println("name="+name+",age="+age);
6     }
7 }
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <suite name="test2">
 3     <test name="para">
 4         <classes>
 5         <!--注意   parameter中的name要跟@Parameters中的对应-->
 6             <parameter name="name" value="张三"></parameter>
 7             <parameter name="age" value="23"></parameter>
 8             <class name="com.test.testng.ParameterTest"/>
 9         </classes>
10     </test>
11 </suite>

9.参数化测试——DataProvider参数化

9.1代码示例

 1 public class DataProviderTest {
 2 //    dataProvider要跟@DataProvider的name属性值一致
 3     @Test(dataProvider = "data")
 4     public void paraTest(String name,int age) {
 5         System.out.println("name="+name+",age="+age);
 6     }
 7     @DataProvider(name = "data")
 8     public Object[][] dataProvider(){
 9         Object[][] o = new Object[][] {
10             {"张三",23},
11             {"李四",24},
12             {"王五",25}
13         };
14         return o;
15     }
16 }

9.2运行结果

9.3根据方法名传值

9.3.1代码示例

 1 public class DataProviderTest {
 2 //    dataProvider要跟@DataProvider的name属性值一致
 3     @Test(dataProvider = "methodData")
 4     public void Test1(String name,int age) {
 5         System.out.println("Test111方法中name="+name+",age="+age);
 6     }
 7     @Test(dataProvider = "methodData")
 8     public void Test2(String name,int age) {
 9         System.out.println("Test222方法中name="+name+",age="+age);
10     }
11     @DataProvider(name = "methodData")
12     public Object[][] dataProvider(Method method){
13         Object[][] o = null;
14         if (method.getName().equals("Test1")) {
15             o= new Object[][] {
16                 {"张三",23},
17             };
18         }else if (method.getName().equals("Test2")) {
19             o= new Object[][] {
20                 {"李四",24},
21             };
22         }else {
23             o= new Object[][] {
24                 {"王五",25}
25             };
26         }
27
28         return o;
29     }
30 }

9.3.2运行结果

10.多线程测试——注解方式实现

10.1代码示例

 1 public class MultiThreadOnAnnotice {
 2     /*
 3      * nvocationCount----表示执行的次数
 4         threadPoolSize-----表示线程池的内线程的个数
 5      * */
 6     @Test(invocationCount = 10,threadPoolSize = 3)
 7     public void test1() {
 8         System.out.println("MultiThreadOnAnnotice_test1_Thread Id :"+Thread.currentThread().getId());
 9     }
10 }

10.2运行结果

11.多线程测试——xml文件实现

11.1parallel:methods级别

11.1.1代码示例

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <suite name="multi" parallel="methods" thread-count="3">
 3     <!--
 4     tests级别:不同的test tag下的用例可以在不同的线程下执行
 5             相同的test tag下的用例只能在同一个线程中去执行
 6     classs级别:相同的class tag 下的用例在同一个线程中执行
 7                 不同的class tag 下的用例可以在不同的线程中执行
 8     methods级别:所有用例都可以在不同的线程下去执行
 9
10     thread-count:代表了最大并发线程数
11
12     xml文件配置这种方式不能指定线程池,只有方法上才可以指定线程池
13     -->
14     <test name="test1">
15         <classes>
16             <class name="com.test.testng.MutliThreadOnXml"/>
17         </classes>
18     </test>
19 </suite>

11.1.2运行结果

11.2parallel:tests级别-不同test tag时

11.2.1代码示例

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <suite name="multi" parallel="tests" thread-count="3">
 3     <test name="test1">
 4         <classes>
 5             <class name="com.test.testng.MutliThreadOnXml"/>
 6         </classes>
 7     </test>
 8     <test name="test2">
 9         <classes>
10             <class name="com.test.testng.MutliThreadOnXml"/>
11         </classes>
12     </test>
13 </suite>

11.2.2运行结果

11.3parallel:tests级别-相同test tag时

11.3.1代码示例

1 <?xml version="1.0" encoding="UTF-8"?>
2 <suite name="multi" parallel="tests" thread-count="3">
3     <test name="test1">
4         <classes>
5             <class name="com.test.testng.MutliThreadOnXml"/>
6         </classes>
7     </test>
8 </suite>

11.3.2运行结果

11.4parallel:classes级别

11.4.1代码示例

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <suite name="multi" parallel="classes" thread-count="3">
 3     <test name="test1">
 4         <classes >
 5             <class name="com.test.testng.MutliThreadOnXml"/>
 6             <class name="com.test.testng.ExceptionTest"/>
 7         </classes>
 8     </test>
 9     <test name="test2">
10         <classes >
11             <class name="com.test.testng.MutliThreadOnXml"/>
12         </classes>
13     </test>
14 </suite>

11.4.2运行结果

12超时测试——@Test(timeOut = 毫秒值)

12.1代码示例

1 public class TimeOutTest {
2     @Test(timeOut = 3000)
3     public void timeOutfail() throws InterruptedException {
4         Thread.sleep(4000);
5     }
6
7 }

12.2运行结果

原文地址:https://www.cnblogs.com/heyuling/p/12066989.html

时间: 2024-08-05 10:15:24

TestNg注解使用的相关文章

testNG注解的使用和执行顺序

testNG注解 本文主要包含testNG注解的使用方法和执行顺序两部分. 一.使用方法 testNG的注解的使用,主要用于方法上 @符号标示,@Test.@afterMethod.@BeforeClass.@BeforeMethod 二.执行顺序 单个类: 根据以下代码执行的结果,我们可以看出来,testNG的执行顺序是 @BeforeSuite->@BeforeTest->@BeforeClass->{@BeforeMethod->@Test->@AfterMethod}

TestNG系列(二)TestNG注解

前言 TetsNG提供了很多注解,允许测试人员灵活地组织测试用例 一.@Test @Tets是TestNG的核心注解,被注解的方法,表示为一个测试方法. description属性 @Test(description = "yuhao") public void case1(){ System.out.println("case1方法"); } 在测试报告中体现出来 enabled属性 设置为false时,被注解的方法将不会执行 groups属性 对测试方法进行分组

Spring单元测试利器 -- testng

TESTNG使Java单元测试轻而易举 深入了解testng,请访问:http://www.yiibai.com/html/testng/2013/0914295.html 在每个软件包的构造阶段,测试阶段都扮演扮演者中心角色.过去那种先编译再测试的日子已经一去不去不返,现在大多数开发人员现在认识到需要采用编码和测试彼此交织.同步推进的软件方法论,以便尽早发现bug,在开发过程开始的时候就识别出风险. TESTNG快速进阶 1.TestNG概述 TestNG是一种基于注解的测试框架,通过添加诸如

TestNG单元测试

1 . 简介 1.1 TestNG是什么? 1) TestNG是一个测试框架,其灵感来自JUnit和NUnit的,但引入了一些新的功能,使其功能更强大,使用更方便. 2) TestNG是一个开源自动化测试框架;TestNG表示下一代. TestNG是类似于JUnit(特别是JUnit 4),但它不是一个JUnit扩展.它的灵感来源于JUnit.它的目的是优于JUnit的,尤其是当测试集成的类. 3) TestNG的创造者是Cedric Beust(塞德里克·博伊斯特) 4) TestNG消除了大

TestNG详解(单元测试框架)

一.TestNG的优点 1.1 漂亮的HTML格式测试报告 1.2 支持并发测试 1.3 参数化测试更简单 1.4 支持输出日志 1.5 支持更多功能的注解 二.编写TestNG测试用例的步骤 2.1 使用 Eclipse生成TestNG的测试程序框架 2.2 在生成的程序框架中编写测试代码逻辑 2.3 根据测试代码逻辑,插入TestNG注解标签 2.4 配置Testng.xml文件,设定测试类.测试方法.测试分组的执行信息 2.5 执行TestNG的测试程序 三.如何安装TestNG? 启动E

用代码触发testng实现并发测试

有时候希望测试用例能用代码触发,发现testng支持这种操作,于是记录一下: 首先添加testng依赖: <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.9.10</version> </dependency> 然后实现要被调用的测试用例: /** * testng 注解实现并发测试 */

TestNG测试框架入门到实战

第1章 课程介绍TestNG的介绍以及基础环境的搭建,包括Java的下载和安装,Java环境的设置 ,以及Eclipse的下载安装. 第2章 TestNG环境搭建TestNG环境如何搭建?装什么以及如何装插?,导什么jar包? 第3章 TestNG注解和断言用代码来详细讲解testNG各种注解的用法,注解包括@Test,@BeforeMethod,@AfterMethod,@BeforeClass,@AfterClass,@BeforeTest,@AfterTest, @BeforeSuite,

章节十六、2-TestNG注解和断言

一.TestNG注解的testcease不是自上而下运行的,而是按照方法名的字母排序或数字的大小顺序运行的. 二.断言:判断返回的结果与我们的预期结果是否一致. 1.Assert.assertTrue(); 2.Assert.assertFalse(); 注意: Assert true语句如果实际输出时false,测试不通过,并停止执行测试. Assert.assertFalse()与Assert.assertTure()正好相反,也就是说,如果您希望某个元素在页面上不存在是测试继续执行,就可以

Java + Selenium 3.x 实现Web自动化 - 1.自动化准备

(一)自动化准备 说明:本文主要记录了基于公司现有项目(一个电子商务平台),从0开始实现UI自动化的历程.从准备阶段,部分内容直接省略了基础知识,一切以最终做成自动化项目为目标,难免会有晦涩之处.文章主要用于记录过程,翻阅回顾.如有记录出错,描述晦涩之处,望读者能及时指出,一起进行讨论交流,以免误导他人. 1 所使用工具的简单介绍 1.java + selenium WebDriver:用于脚本的编写: 2.TestNG:测试框架,用于结构化用例,生成测试报告: 3.log4j2:用于生成日志: