zoukankan      html  css  js  c++  java
  • 章节十六、3-TestNG方法和类注解

    一、Test Suite(测试套件)

    我们通常认为一个testcase就是一个测试方法,但是会有很多的testcase,所以我们不可能把所有的testcase放到同一个测试类中,假如需要测试的页面有10个,我们需要创建不同的类来测试这10个页面的具体功能,测试具体功能的测试用例会放到具体的测试类中,把这些所有的测试类组合起来就成了Test Suite。可以根据我们的测试目的,选择一些类来组成Test Suite。可以选择一些基本功能的测试类,组成冒烟测试的测试类,冒烟测试可以快速的检验软件的基本功能,也可以选择一些测试类组成回归测试的test suite。

    二、Test Suite案例演示----》如何一次运行多个测试类

    1、首先新建两个testcase

     1 package testclasses;
     2 
     3 import org.testng.annotations.Test;
     4 import org.testng.annotations.BeforeMethod;
     5 import org.testng.annotations.AfterClass;
     6 import org.testng.annotations.AfterMethod;
     7 import org.testng.annotations.BeforeClass;
     8 
     9 public class TestNG_TestClass1 {
    10 
    11     @BeforeClass
    12     public void beforeClass() {
    13         System.out.println("
    Class1-->beforeMethod在类里所有的方法运行前跑");
    14     }
    15 
    16     @AfterClass
    17     public void afterClass() {
    18         System.out.println("
    Class1-->afterClass在类里所有的方法运行后跑
    ");
    19     }
    20 
    21     @BeforeMethod
    22     public void beforeMethod() {
    23         System.out.println("
    Class1-->BeforeMethod每个测试方法运行前跑");
    24     }
    25 
    26     @AfterMethod
    27     public void afterMethod() {
    28         System.out.println("
    Class1-->afterMethod每个测试方法运行后跑");
    29     }
    30 
    31     @Test
    32     public void test1() {
    33         System.out.println("
    Class1-->test1测试方法");
    34     }
    35 
    36     @Test
    37     public void test2() {
    38         System.out.println("
    Class1-->test2测试方法");
    39     }
    40 }
     1 package testclasses;
     2 
     3 import org.testng.annotations.Test;
     4 import org.testng.annotations.BeforeMethod;
     5 import org.testng.annotations.AfterMethod;
     6 import org.testng.annotations.BeforeClass;
     7 import org.testng.annotations.AfterClass;
     8 
     9 public class TestNG_TestClass2 {
    10 
    11     @BeforeClass
    12     public void beforeClass() {
    13         System.out.println("
    Class2-->beforeMethod在类里所有的方法运行前跑");
    14     }
    15 
    16     @AfterClass
    17     public void afterClass() {
    18         System.out.println("
    Class2-->afterClass在类里所有的方法运行后跑
    ");
    19     }
    20 
    21     @BeforeMethod
    22     public void beforeMethod() {
    23         System.out.println("
    Class2-->BeforeMethod每个测试方法运行前跑");
    24     }
    25 
    26     @AfterMethod
    27     public void afterMethod() {
    28         System.out.println("
    Class2-->afterMethod每个测试方法运行后跑");
    29     }
    30 
    31     @Test
    32     public void test1() {
    33         System.out.println("
    Class2-->test1测试方法");
    34     }
    35 
    36     @Test
    37     public void test2() {
    38         System.out.println("
    Class2-->test2测试方法");
    39     }
    40 }

    2、新建一个xml文件

    xml是标记型语言,是一种简单的数据存储语言,用一系列简单的标记来描述数据,把数据放在标签中。

    <!-- 没有此行配置运行时会报错 -->
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
    <!-- name中的值表示命名,可随意命名 -->
    <suite name="Regression TestSuite">
    <!-- name中的值表示命名,可随意命名 -->
    <test name="Application Test">
    <!-- name中的值为需要测试的具体类名,格式:包名.类名 -->
    <classes>
    <class name="testclasses.TestNG_TestClass1"></class>
    <class name="testclasses.TestNG_TestClass2"></class>
    </classes>
    </test>
    </suite>

    3、运行结果成功:

    从运行结果中可以看出,当我们在配置完xml文件后,直接运行xml文件,2个testcase就能够一起运行成功了

    三、@BeforeSuite和@AfterSuite

    @BeforeSuite:表示在test suite中的所有测试类在执行前就先运行带有该注解方法中的代码。

     @AfterSuite:表示在test suite中的所有测试类执行完成后再运行带有该注解方法中的代码。

     1、新建一个带有@BeforeSuite和@AfterSuite注解的类

     1 package base;
     2 
     3 import org.testng.annotations.AfterClass;
     4 import org.testng.annotations.AfterSuite;
     5 import org.testng.annotations.BeforeClass;
     6 import org.testng.annotations.BeforeSuite;
     7 
     8 public class BaseTestSuite {
     9 
    10     @BeforeClass
    11     public void beforeClasss() {
    12         System.out.println("
    BaseTestSuite-->beforeClass在每个测试类运行前跑");
    13     }
    14 
    15     @AfterClass
    16     public void afterClasss() {
    17         System.out.println("
    AfterClass-->afterClass在每个测试类运行完成后跑
    ");
    18     }
    19 
    20     @BeforeSuite
    21     public void beforeSuite() {
    22         System.out.println("
    BeforeSuite-->beforeSuite在每个test suite运行前跑");
    23     }
    24 
    25     @AfterSuite
    26     public void afterSuite() {
    27         System.out.println("
    BeforeSuite-->beforeSuite在每个test suite运行完成后跑
    ");
    28     }
    29 }

    2、让test suite中的TestNG_TestClass1类和TestNG_TestClass2类继承新建的类BaseTestSuite 。

    3、运行xml配置文件

    <!-- 没有此行配置运行时会报错 -->
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
    <!-- name中的值表示命名,可随意命名 -->
    <suite name="Regression TestSuite">
        <!-- name中的值表示命名,可随意命名 -->
        <test name="Application Test">
            <!-- name中的值为需要测试的具体类名,格式:包名.类名 -->
            <classes>
                <class name="regressionsuite.TestNG_TestClass1"></class>
                <class name="regressionsuite.TestNG_TestClass2"></class>
            </classes>
        </test>
    </suite>

    4、运行结果

    从运行结果中我们可以看出,@BeforeSuite和@AfterSuite分别只在所有的test suite运行前和介绍后运行一次

     四、@BeforeTest和@AfterTest注解

    @BeforeTest:使用这个注解的方法会在xml文件中的test标签中的每个test方法运行之前运行。

    @AfterTest:使用这个注解的方法会在xml文件中的test标签中的每个test方法运行之后运行。

     

     1 <!-- 没有此行配置运行时会报错 -->
     2 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
     3 <!-- name中的值表示命名,可随意命名 -->
     4 <suite name="Regression TestSuite">
     5     <!-- name中的值表示命名,可随意命名 -->
     6     <test name="Application Test">
     7         <!-- name中的值为需要测试的具体类名,格式:包名.类名 -->
     8         <classes>
     9             <class name="regressionsuite.TestNG_TestClass1"></class>
    10             <class name="regressionsuite.TestNG_TestClass2"></class>
    11         </classes>
    12     </test>
    13     
    14     <test name="Application Test">
    15         <!-- name中的值为需要测试的具体类名,格式:包名.类名 -->
    16         <classes>
    17             <class name="regressionsuite.TestNG_TestClass1"></class>
    18             <class name="regressionsuite.TestNG_TestClass2"></class>
    19         </classes>
    20     </test>
    21 </suite>

     五、@BeforeClass和@AfterClass注解

    @BeforeClass:使用这个注解的方法会在当前这个类的第一个test方法运行之前运行。

    @AfterClass:使用这个注解的方法会在当前这个类的最后一个test方法运行之后运行。

    六、@BeforeMethod和@AfterMethod注解

    @BeforeMethod:使用这个注解的方法会在每个test方法运行之前运行。

    @AfterMethod:使用这个注解的方法会在每个test方法运行之后运行。

    注:带@BeforeTest和@AfterTest、@BeforeSuite和@AfterSuite注解的方法不能在类中直接运行(直接运行会报如下图所示的错误信息),必须在xml中才能运行。

    如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。

    内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。

    欢迎关注,转载请注明来源。

  • 相关阅读:
    一种安全云存储方案设计(上)——基于二次加密的存储策略与加密图文混合检索
    lamda表达式导致运行时VerifyError
    编译原理:语法分析概述
    语音识别与 RNN-Transducer 概述
    通信原理基本概念
    追光捉影的自动机:2021 卓工实训小作文
    【实战】jsfinder+jsinfo-scan结合改造
    js基础记录
    qq、微信二次分享
    收藏链接
  • 原文地址:https://www.cnblogs.com/luohuasheng/p/11384564.html
Copyright © 2011-2022 走看看