zoukankan      html  css  js  c++  java
  • 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

          启动Eclipse,选择Help-Install New Software-》点击add-name中输入TestNGlocation中输入“http://beust.com/eclipse/”,点击ok-》在弹出的install对话框中勾选TestNG复选框-Next-Accept-Finish

    四、testNG用例执行后如何查看执行结果?

      4.1 Console标签栏中展示测试用例的执行结果,如图:

      

      4.2 在工程下也会生成一个test-output文件夹,如图:

      

     

    五、TestNG常用注解:执行顺序如下

      @BeforeSuite > @BeforeTest > @BeforeMethod > @Test > @AfterMethod > @AfterTest > @AfterSuite

    @BeforeSuite

    表示会在当前测试集合中的任意一个测试用例开始运行前执行

    @AfterSuite

    表示会在当前测试集合中的所有测试程序运行结束之后执行

    @BeforeTest

    表示会在Test中的任意一个测试用例开始运行前执行

    @AfterTest

    表示会在Test中的所有测试用例运行结束后执行

    @BeforeGroups

    分组测试用例的任一测试用例开始运行前执行

    @AfterGroups

    分组测试用例的所有测试用例运行结束后执行

    @BeforeClass

    在当前测试类的任意一个测试用例开始运行前执行

    @AfterClass

    在当前测试类的所有测试用例运行结束后执行

    @BeforeMethod

    在每个测试方法开始运行前执行

    @AfterMethod

    在每个测试方法运行结束后执行

    @Test

    被认为是一个测试方法,既一个测试用例

    六、如何创建TestNG测试集合?

      6.1 测试集合:在自动化测试的执行过程中,通常会产生批量运行多个测试用例的需求,此需求称为运行测试集合(Test Suite

      6.2 TestNG的测试用例可以是相互独立的,也可以按照特定的顺序来执行(配置TestNG.xml

      6.3 如何配置testNG.xml文件?     

    <suite name = "TestNG Suite">    //自定义的测试集合名称
      <test name = "test1">    //自定义的测试名称
        <classes>    //定义被运行的测试类
          <class name = "cn.gloryroad.FirstTestNGDemo" />    //测试类的路径
          <class name = "cn.gloryroad.NewTest" />
        </classes>
      </test> 
    </suite>

    七、测试用例的分组(group

      7.1 只执行一组分组配置如下:

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

      7.2 执行多组分组时配置如下(两种形式都可以):

    <suite name = "TestNG Suite">
      <test name = "Grouping">
        <groups>
          <run>
            <include name = "动物" />   //name分组名称
                 <include name = "人" />
          </run>
        </groups>
        <classes>
          <class name = "cn.gloryroad.Grouping"/>
        </classes>
      </test>
    </suite>            
    <suite name = "TestNG Suite">
        <test name = "Grouping">
            <groups>
           <define name = "All">
              <include name = "动物" />
              <include name = "人" />
           </define>
           <run>
              <include name = "All" />
           </run>
         </groups>
        <classes>
          <class name = "cn.gloryroad.Grouping"/>
        </classes>
      </test> 
    </suite>

    八、依赖测试(dependsOnMethod

      @Test(dependsOnMethod = {"方法名称"})

      被依赖的方法优先于此方法执行

    九、特定顺序执行测试用例(priority

      @Test(priority = 0/1/2/3/4/…)

      按照数字大小顺序优先执行,优先执行1,然后是2…

    十、如何跳过某个测试方法(enabled = false

      @Test(priority = 0/1… , enabled = false)

      执行结束后,在测试报告中显示跳过的测试用例数,例如skip=1

    十一、数据注解

      11.1 参数化测试(@Parameters-》通过xml文件从外部给测试方法传参):<Parameter name="Type" value="chrome"/>  -》参考http://www.yiibai.com/html/testng/2013/0916303.html 

    创建测试案例类
    
        创建一个Java测试类 ParameterizedTest1.java.
    
        测试方法parameterTest()添加到测试类。此方法需要一个字符串作为输入参数。
    
        添加注释 @Parameters("myName") 到此方法。该参数将被传递testng.xml,在下一步我们将看到一个值。
    
    创建Java类文件名 ParameterizedTest1.java 在 C:\ > TestNG_WORKSPACE
    
      import org.testng.annotations.Parameters;
      import org.testng.annotations.Test;
    
      public class ParameterizedTest1 {
          @Test
          @Parameters("myName")
          public void parameterTest(String myName) {
              System.out.println("Parameterized value is : " + myName);
          }
      }
    
    创建 TESTNG.XML
    
    创建 testng.xml C:\ > TestNG_WORKSPACE 执行测试案例
    
      <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
      <suite name="Suite1">
          <test name="test1">
    	  <parameter name="myName" value="manisha"/> 
    	  <classes>
    	      <class name="ParameterizedTest1" />
    	      </classes>
          </test>
      </suite>
    
    我们还可以定义参数在<suite>级别。假设我们已经定义在两个<suite>和<test>级别myName,在这种情况下,常规的作用域规则适用。这意味着,任何类里面<test>标签将查看值参数定义在<test>,而testng.xml文件中的类的其余部分将看到定义在<suite>中值
    
    编译使用javac的测试用例类。
    
    C:\TestNG_WORKSPACE>javac ParameterizedTest1.java
    
    现在,运行testng.xml,其中将运行parameterTest方法。TestNG的将试图找到一个命名myName的第一<test>标签的参数,然后,如果它不能找到它,它会搜索包围在的<suit>标签。
    
    C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
    
    验证输出。
    
    Parameterized value is : manisha
    
    ===============================================
    Suite1
    Total tests run: 1, Failures: 0, Skips: 0
    ===============================================
    
    TestNG 对testng.xml 的参数的类型指定的值会自动尝试转换。下面是支持的类型:
    
        String
    
        int/Integer
    
        boolean/Boolean
    
        byte/Byte
    
        char/Character
    
        double/Double
    
        float/Float
    
        long/Long
    
        short/Short

      11.2 数据驱动(@DataProvider)-》参考http://www.yiibai.com/html/testng/2013/0916303.html 

     当你需要通过复杂的参数或参数需要创建从Java(复杂的对象,对象读取属性文件或数据库等..),在这种情况下,可以将参数传递使用数据提供者。数据提供者@DataProvider的批注的方法。这个注解只有一个字符串属性:它的名字。如果不提供名称,数据提供者的名称会自动默认方法的名称。数据提供者返回一个对象数组。
    
    让我们看看下面的例子使用数据提供者。第一个例子是@DataProvider的使用Vector,String或Integer 作为参数,第二个例子是关于@DataProvider 的使用对象作为参数。
    实例 1
    
    在这里 @DataProvider 通过整数和布尔参数。
    创建Java类
    
    创建一个java类PrimeNumberChecker.java。这个类检查,如果是素数。创建这个类在 C:\ > TestNG_WORKSPACE
    
      public class PrimeNumberChecker {
          public Boolean validate(final Integer primeNumber) {
              for (int i = 2; i < (primeNumber / 2); i++) {
                  if (primeNumber % i == 0) {
                      return false;
                   }
              }
              return true;
          }
      }
    
    创建测试案例类
    
        创建一个Java测试类 ParamTestWithDataProvider1.java.
    
        定义方法primeNumbers(),其定义为DataProvider 使用注释。此方法返回的对象数组的数组。
    
        测试方法testPrimeNumberChecker()添加到测试类中。此方法需要一个整数和布尔值作为输入参数。这个方法验证,如果传递的参数是一个素数。
    
        添加注释 @Test(dataProvider = "test1") 到此方法。dataProvider的属性被映射到"test1".
    
    创建Java类文件名ParamTestWithDataProvider1.java 在 C:\ > TestNG_WORKSPACE
    
      import org.testng.Assert;
      import org.testng.annotations.BeforeMethod;
      import org.testng.annotations.DataProvider;
      import org.testng.annotations.Test;
    
      public class ParamTestWithDataProvider1 {
          private PrimeNumberChecker primeNumberChecker;
      
          @BeforeMethod
          public void initialize() {
              primeNumberChecker = new PrimeNumberChecker();
          }
    
          @DataProvider(name = "test1")
          public static Object[][] primeNumbers() {
              return new Object[][] { { 2, true }, { 6, false }, { 19, true },
                	{ 22, false }, { 23, true } };
          }
    
          // This test will run 4 times since we have 5 parameters defined
          @Test(dataProvider = "test1")
          public void testPrimeNumberChecker(Integer inputNumber,
              Boolean expectedResult) {
    	  System.out.println(inputNumber + " " + expectedResult);
    	  Assert.assertEquals(expectedResult,
            	  primeNumberChecker.validate(inputNumber));
          }
      }
    
    创建 TESTNG.XML
    
    创建 testng.xml C:\ > TestNG_WORKSPACE 执行测试案例。
    
      <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
      <suite name="Suite1">
          <test name="test1">
    	  <classes>
    	      <class name="ParamTestWithDataProvider1" />
    	      </classes>
          </test>
      </suite>
    
    编译使用javac的测试用例类。
    
    C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java
    
    运行testng.xml.
    
    C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
    
    验证输出。
    
    2 true
    6 false
    19 true
    22 false
    23 true
    
    ===============================================
    Suite1
    Total tests run: 5, Failures: 0, Skips: 0
    ===============================================
    
    实例 2
    
    在这里,@DataProvider 传递对象作为参数。
    创建Java类
    
    创建一个Java类 Bean.java, 对象带有 get/set 方法, 在 C:\ > TestNG_WORKSPACE.
    
    public class Bean {
        private String val;
        private int i;
        public Bean(String val, int i){
            this.val=val;
            this.i=i;
        }
        public String getVal() {
    	return val;
        }
        public void setVal(String val) {
    	this.val = val;
        }
        public int getI() {
    	return i;
        }
        public void setI(int i) {
    	this.i = i;
        }
    }
    
    创建测试案例类
    
        创建一个Java测试类 ParamTestWithDataProvider2.java.
    
        定义方法primeNumbers(),其定义为DataProvider使用注释。此方法返回的对象数组的数组。
    
        添加测试类中测试方法TestMethod()。此方法需要对象的bean作为参数。
    
        添加注释 @Test(dataProvider = "test1") 到此方法.  dataProvider 属性被映射到 "test1".
    
    创建Java类文件名 ParamTestWithDataProvider2.java 在 C:\ > TestNG_WORKSPACE
    
      import org.testng.annotations.DataProvider;
      import org.testng.annotations.Test;
    
      public class ParamTestWithDataProvider2 {
          @DataProvider(name = "test1")
          public static Object[][] primeNumbers() {
              return new Object[][] { { new Bean("hi I am the bean", 111) } };
          }
    
          @Test(dataProvider = "test1")
          public void testMethod(Bean myBean) {
              System.out.println(myBean.getVal() + " " + myBean.getI());
          }
      }
    
    创建 TESTNG.XML
    
    创建一个文件 testng.xml C:\ > TestNG_WORKSPACE 来执行测试用例.
    
      <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
      <suite name="Suite1">
          <test name="test1">
    	  <classes>
    	      <class name="ParamTestWithDataProvider2" />
    	      </classes>
          </test>
      </suite>
    
    编译使用javac的测试用例类。
    
    C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java
    
    运行 testng.xml.
    
    C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
    
    验证输出。
    
    hi I am the bean 111
    
    ===============================================
    Suite1
    Total tests run: 1, Failures: 0, Skips: 0
    ===============================================
    

      

    十二、测试报告中自定义日志(Reporter.log输入自定义内容)),例如:

      @Test(groups = {""})

      public void student(){

        System.out.println("学生方法被调用");

        Reporter.log("学生方法自定义日志");

      }

  • 相关阅读:
    VS安装部署
    C#与C/C++的交互
    3、C#入门第3课
    登录接口,猜年龄
    安装sql server 2016 always on配置dtc支持时遇到的问题
    购物车第一版
    Oracle patch查看路径
    innobackup增量备份脚本
    在vmware workstation下安装linux6关闭防火墙
    线程池-连接池-JDBC实例-JDBC连接池技术
  • 原文地址:https://www.cnblogs.com/yxfeng/p/7605522.html
Copyright © 2011-2022 走看看