• testNG测试基础一


    1.TestNG概念

    TestNG:Testing Next Generation 下一代测试技术,是一套根据JUnit和Nunit思想构建的利用注释来强化测试功能的测试框架,可用来做单元测试,也可用来做集成测试,测试人员一般用TestNG来写自动化测试。  开发人员一般用JUnit写单元测试。

    2.TestNg注解:

     

    3. TestNg提供的最基本的注解之一就是Test注解,作用在方法或者类上,此注解支持的属性有:

      1)alwaysRun:提供一个false or true值,如果设置为true,则被标记的方法会永远被执行,即使被标记方法所依赖的方法执行失败了。

      2)dataProvider:此属性的值为标记方法提供数据驱动的数据源

      3)dataProviderClass:此属性指出提供数据驱动方法的所在类

      4)dependsOnGroups:此属性指出标记方法所依赖的组

      5)dependsOnMethods:此属性支持标记方法所依赖的方法

      6)description:标记方法的描述信息

      7)enabled:标记方法是否要执行,默认为true执行

      8)expectedExceptions:指定标记方法返回的异常信息列表

      9)groups:指定标记方法归属于哪个组

      10)timeOut:指定标记方法超时时长 (in millisecs)

      11)invocationCount:被标记的方法会执行多次

      12)threadPoolSize:启用多个线程执行被标记的方法,一般会与invocationCount一起使用;

    4.关于TestNg的执行顺序问题,看下面是咧:

      package com.testNG;

    import org.testng.annotations.*;

    public class NewTest {

      @Test(dataProvider = "dp")

      public void f(Integer n, String s) {

          System.out.println(n+"---"+s);

      }

      @BeforeMethod

      public void beforeMethod() {

          System.out.println("@beforeMethod");

      }

      @AfterMethod

      public void afterMethod() {

          System.out.println("@AfterMethod");

      }

      @DataProvider

      public Object[][] dp() {

        return new Object[][] {

          new Object[] { 1, "a" },

          new Object[] { 2, "b" },

        };

      }

      @BeforeClass

      public void beforeClass() {

          System.out.println("@beforeClass");

      }

      @AfterClass

      public void afterClass() {

          System.out.println("@afterClass");

      }

      @BeforeTest

      public void beforeTest() {

          System.out.println("@beforeTest");

      }

      @AfterTest

      public void afterTest() {

          System.out.println("@afterTest");

      }

      @BeforeSuite

      public void beforeSuite() {

          System.out.println("@beforeSuite");

      }

      @AfterSuite

      public void afterSuite() {

          System.out.println("@afterSuite");

      }

     

    }

    执行结果如下:

    @beforeSuite

    @beforeTest

    @beforeClass

    @beforeMethod

    1---a

    @AfterMethod

    @beforeMethod

    2---b

    @AfterMethod

    @afterClass

    @afterTest

    PASSED: f(1, "a")

    PASSED: f(2, "b")   此时顺序一目了然;

    5.关于TestNg的相关测试,同样以实例举例:

     1)编写Person简单测试类:

       package com.testNG;

    class Person {

        private int age;

        private String  job;

        public Person(int age, String job) {

           super();

           this.age = age;

           this.job = job;

        }

        public int getAge() {

           return age;

        }

        public void setAge(int age) {

           this.age = age;

        }

        public String getJob() {

           return job;

        }

        public void setJob(String job) {

           this.job = job;

        }

       

    }

    2)编写Car简单测试类:

      package com.testNG;

    public class Car {

        private String  color;

        private double money;

        public Car(String color, double money) {

           super();

           this.color = color;

           this.money = money;

        }

        public String getColor() {

           return color;

        }

        public void setColor(String color) {

           this.color = color;

        }

        public double getMoney() {

           return money;

        }

        public void setMoney(double money) {

           this.money = money;

        }

    }

    3)编写测试类:

      package com.testNG;

    import org.testng.Assert;

    import org.testng.annotations.*;

    import java.util.*;

    public class NewTest {

      @Test(dataProvider = "dp",priority=1)                     //仅用于做参数化测试,设置优先级,数值越小优先级越大

      public void personinit(Integer age, String job) {          //通过dp传值给Person参数化    

          Person person = new Person(age,job);

          System.out.println(person.getAge()+"-------"+person.getJob());

      }

      @Test(priority=2,enabled=false)                            //enabled=false表明该测试方法可忽略

      public void personcheck(){

          Person xiaoming = new Person(23,"tester");

          Person xiaowang = new Person(25,"singer");

          try{                                                 //断言判断人的年龄是否正确

             Assert.assertEquals(xiaoming.getAge(), 23);

             Assert.assertEquals(xiaowang.getAge(), 25);

             System.out.println("小明和小王的年龄验证通过");

          }catch(Exception e){

             e.printStackTrace();    

          } 

      }

      @Test(priority=3)

      public void carcheck(){

          Car baoma = new Car("red",250000);

          Car bieke = new Car("black",100000);

          try{                                                   //断言判断车的颜色是否正确

             Assert.assertEquals(baoma.getColor(), "red");

             Assert.assertEquals(bieke.getColor(), "black");

             System.out.println("宝马和别克的颜色验证通过");

          }catch(Exception e){

             e.printStackTrace();

          }

      }

      @Test(priority=4)

      public void buycar(){

          System.out.println("小明买车了");

      }

      @Test(dependsOnMethods=("buycar"))                           //依赖测试,gohome要先有buycar才会实现

        @Parameters("test1")                         //设置参数

      public void gohome(String test1){

          System.out.println("小明开自己买的"+test1+"回家了");  }

      @BeforeMethod

      public void beforeMethod() {

          System.out.println("@beforeMethod");

      }

      @AfterMethod

      public void afterMethod() {

          System.out.println("@AfterMethod");

      }

      @DataProvider                                             //提供Person实例化对象的数据

      public Object[][] dp() {

         System.out.println("@DataProvider");

        return new Object[][] {

          new Object[] { 20, "tester" },

          new Object[] { 25, "worker" },

        }; 

      }

      @BeforeClass

      public void beforeClass() {

      }

      @AfterClass

      public void afterClass() {

      }

      @BeforeTest

      public void beforeTest() {

          System.out.println("@beforeTest");

      }

      @AfterTest

      public void afterTest() {

          System.out.println("@afterTest");

      }

    }

    4)配置文件如下:

     <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

    <suite name="Suite" parallel="false">

     <parameter name="test1" value="宝马" />

      <test name="Test">

        <classes>

          <class name="com.testNG.NewTest"/>

        </classes>

      </test> <!-- Test -->

    </suite> <!-- Suite -->

    执行结果如下:

    @beforeTest

    @DataProvider

    @beforeMethod

    20-------tester

    @AfterMethod

    @beforeMethod

    25-------worker

    @AfterMethod

    @beforeMethod

    宝马和别克的颜色验证通过

    @AfterMethod

    @beforeMethod

    小明买车了

    @AfterMethod

    @beforeMethod

    小明开自己买的宝马回家了

    @AfterMethod

    @afterTest

    PASSED: personinit(20, "tester")

    PASSED: personinit(25, "worker")

    PASSED: carcheck

    PASSED: buycar

    PASSED: gohome("宝马")

    6.参考资料:

    http://www.cnblogs.com/TankXiao/p/3888070.html#introduce

    https://www.cnblogs.com/meitian/p/5221202.html

  • 相关阅读:
    StackExchange.Redis 文档翻译
    性能分析
    脚本
    KEYS,SCAN,FLUSHDB 等等,这些命令在哪里?
    事件
    发布/订阅 消息顺序
    Redis中的事务
    键、值以及通道
    管道和多路复用器
    配置
  • 原文地址:https://www.cnblogs.com/231254971a/p/8367023.html
Copyright © 2020-2023  润新知