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

posted @ 2018-01-27 19:40  小小强~  阅读(543)  评论(0编辑  收藏  举报