• TestNG 单元测试框架的使用


    JUnit让开发人员了解测试的实用性,尤其是在单元测试这一模块上比任何其他测试框架都要简单明了。凭借一个相当简单,务实,严谨的架构,JUnit已经能够“感染”了一大批开发人员。TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便。

    一:注解的使用

    import org.testng.annotations.AfterClass;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.AfterSuite;
    import org.testng.annotations.AfterTest;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.BeforeSuite;
    import org.testng.annotations.BeforeTest;
    import org.testng.annotations.Test;
    
    public class Annotation {
        
        @Test
        public void testCase1(){
            System.out.println("测试用例1被执行");
        }
        
        @Test
        public void testCase2(){
            System.out.println("测试用例2被执行");
        }
        
        @BeforeMethod
        public void beforeMethod(){
            System.out.println("@BeforeMethod:在每个测试方法开始运行前执行");
        }
    
        @AfterMethod
        public void afterMethod(){
            System.out.println("@AfterMethod:在每个测试方法开始运行结束后执行");
        }
        
        @BeforeClass
        public void beforeClass(){
            System.out.println("@BeforeClass:在当前测试类的第一个测试方法开始调用前执行");
        }
        
        @AfterClass
        public void afterClass(){
            System.out.println("@AfterClass:在当前测试类的最后一个测试方法结束运行后执行");
        }
        
        @BeforeTest
        public void beforeTest(){
            System.out.println("@BeforeTest:在测试类中的Test开始运行前执行");
        }
        
        @AfterTest
        public void afterTest(){
            System.out.println("@AfterTest:在测试类中的Test运行结束后执行");
        }
        
        @BeforeSuite
        public void beforeSuite(){
            System.out.println("@BeforeSuite:在当前测试集合(suite)中所有测试程序开始运行之前执行");
        }
        
        @AfterSuite
        public void afterSuite(){
            System.out.println("@AfterSuite:在当前测试集合(suite)中所有测试程序运行结束之后执行");
        }
    }

    运行结果:

    @BeforeSuite:在当前测试集合(suite)中所有测试程序开始运行之前执行
    @BeforeTest:在测试类中的Test开始运行前执行
    @BeforeClass:在当前测试类的第一个测试方法开始调用前执行
    @BeforeMethod:在每个测试方法开始运行前执行
    测试用例1被执行
    @AfterMethod:在每个测试方法开始运行结束后执行
    @BeforeMethod:在每个测试方法开始运行前执行
    测试用例2被执行
    @AfterMethod:在每个测试方法开始运行结束后执行
    @AfterClass:在当前测试类的最后一个测试方法结束运行后执行
    @AfterTest:在测试类中的Test运行结束后执行
    PASSED: testCase1
    PASSED: testCase2

    ===============================================
        Default test
        Tests run: 2, Failures: 0, Skips: 0
    ===============================================

    @AfterSuite:在当前测试集合(suite)中所有测试程序运行结束之后执行

    ===============================================
    Default suite
    Total tests run: 2, Failures: 0, Skips: 0
    ===============================================

    二:依赖测试

    import org.testng.annotations.Test;
    public class DependentTest {
        
        /**
         * TestNG 依赖测试(使用dependsOnMethods参数实现)
         * 有时候需要按顺序来调用测试用例,  那么测试用例之间就存在依赖关系
         * 通过依赖测试,可以在不同的方法间共享数据和程序状态
         */
    
        
        // dependsOnMethods={"OpenBrowser"} 表示在OpenBrowser方法被调用后才能执行login方法
        @Test(dependsOnMethods={"OpenBrowser"})
        public void login(){
            System.out.println("login方法被调用");
        }
        
        @Test
        public void OpenBrowser(){
            System.out.println("OpenBrowser方法被调用");
        }
        
        // dependsOnMethods={"login"} 表示在login方法被调用后才能执行logout方法
        @Test(dependsOnMethods={"login"})
        public void logout(){
            System.out.println("logout方法被调用");
        }
    }

    运行结果:

    OpenBrowser方法被调用
    login方法被调用
    logout方法被调用
    PASSED: OpenBrowser
    PASSED: login
    PASSED: logout

    ===============================================
        Default test
        Tests run: 3, Failures: 0, Skips: 0
    ===============================================

    三:按特定顺序执行测试

    import org.testng.annotations.Test;
    
    public class SequenceTest {
        /**
         * 使用priority参数,可以按特定顺序执行测试
         */
        
        @Test(priority=2)
        public void test3(){
            System.out.println("test3方法被调用");
        }
        
        // enabled=false 跳过这个测试方法
        @Test(priority=1,enabled=false)
        public void test2(){
            System.out.println("test2方法被调用");
        }
        
        @Test(priority=0)
        public void test1(){
            System.out.println("test1方法被调用");
        }
        
        @Test(priority=3)
        public void test4(){
            System.out.println("test4方法被调用");
        }
    
    }

    运行结果:

    test1方法被调用
    test3方法被调用
    test4方法被调用
    PASSED: test1
    PASSED: test3
    PASSED: test4

    ===============================================
        Default test
        Tests run: 3, Failures: 0, Skips: 0
    ===============================================

    四:测试集合,通过testng.xml方式来执行测试用例

    <suite name="Suite">
      <test name="Test">
        <classes>
        
          <!-- 测试集合,执行cn.testng包下的Annotation及test测试类 -->
          <class name="cn.testng.Annotation"/>
          <class name="cn.testng.test"/>
          
        </classes>
      </test> 
    </suite> 

    五:测试用例的分组,通过testng.xml方式来执行测试用例

    import org.testng.annotations.Test;
    
    public class Grouping {
        
        /**
         * 测试用例的分组,TestNG使用groups关键字进行分组,用来执行多个Test的测试用例
         */
        
        @Test(groups={"人"})
        public void student(){
            System.out.println("学生方法被调用");
        }
        
        @Test(groups={"人"})
        public void teacher(){
            System.out.println("老师方法被调用");
        }
        
        @Test(groups={"动物"})
        public void cat(){
            System.out.println("小猫方法被调用");
        }
        
        @Test(groups={"动物"})
        public void dog(){
            System.out.println("小狗方法被调用");
        }
    
    }

    设置testng.xml

    <suite name="Suite">
      <test name="Grouping">
      
          <groups>
              <run>
                  <include name="动物"></include>
              </run>
          </groups>
          
        <classes>
          <class name="cn.testng.Grouping"/>
        </classes>
      </test> 
    </suite> 

    通过testng.xml方式来执行测试用例,结果如下:

    小猫方法被调用
    小狗方法被调用

    ===============================================
    Suite
    Total tests run: 2, Failures: 0, Skips: 0
    ===============================================

  • 相关阅读:
    ChsDet is a Charset Detector (检测字符编码)
    Microsoft Fakes进行单元测试
    区域及分离、Js压缩、css、jquery扩展
    服务端软件的服务品质
    警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context}
    开发之技能
    分布式
    工具集
    Visual Studio Code
    Autofac 入门
  • 原文地址:https://www.cnblogs.com/wakey/p/10627985.html
Copyright © 2020-2023  润新知