TestNG教程一:testNG简介

  • Post author:
  • Post category:其他

1.TestNG是什么?

  TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便。

TestNG是一个开源自动化测试框架;TestNG表示下一代(Next Generation的首字母)。 TestNG类似于JUnit(特别是JUnit 4),但它不是JUnit框架的扩展。它的灵感来源于JUnit。它的目的是优于JUnit,尤其是在用于测试集成多类时。 TestNG的创始人是Cedric Beust(塞德里克·博伊斯特)。

TestNG消除了大部分的旧框架的限制,使开发人员能够编写更加灵活和强大的测试。 因为它在很大程度上借鉴了Java注解(JDK5.0引入的)来定义测试,它也可以显示如何使用这个新功能在真实的Java语言生产环境中。

2.TestNG的特点

 ·  注解

·  TestNG使用Java和面向对象的功能

·  支持综合类测试(例如,默认情况下,不用创建一个新的测试每个测试方法的类的实例)

·  独立的编译时测试代码和运行时配置/数据信息

·  灵活的运行时配置

·  主要介绍“测试组”。当编译测试,只要要求TestNG运行所有的“前端”的测试,或“快”,“慢”,“数据库”等

·  支持依赖测试方法,并行测试,负载测试,局部故障

·  灵活的插件API

·  支持多线程测试

3. TestNG实用功能:

TestNG是一个类似Junit的自动化框架,使用它可以做功能,接口,单元,集成的自动化测试;最常见的是结合Selenium做Web功能自动化测试,结合APPIUM做APP自动化测试,同时它是Java开发人员最广泛的测试框架,常使用Java注解去写测试方法,例如,如果你在TestNG写好了一个测试方法,你只需要在这个方法的前面一行写上“@test”,就相当于告诉TestNG, 这个是一个测试方法,只有添加了这个注册,才会被认为是一个测试用例,才会被执行。

4. TestNG配置文件介绍

   4.1 TestNG.xml是TestNG的配置文件,简单来说TestNG就是通过运行这个文件来执行测试用例的,它的主要功能是配置测试用例和测试套件,利用这个文件我们可以跑同一个类或多个不同类的测试用例,具体来说,TestNG通过设置testng.xml文件能做以下事情;

  1)创建来源不同包、类、方法的测试套件

2)包括一些选项,例如失败的用例可以重跑。

3)支持使用正则表达式

4)运行把外部参数传入测试方法

5)支持配置多线程的执行环境

4.2简单TestNG.xml配置如下:

<?xml version=”1.0″ encoding=”UTF-8″?>

<!DOCTYPE suite SYSTEM “http://testng.org/testng-1.0.dtd”>

<suite name=”Default Suite”>

  <test name=”Java_Learn”>

    <classes>

      <class name=”com.java.learn.TestNG_Demo1″/>

    </classes>

  </test>

</suite>

  4.3我们可以看出来,suite管理多个test,而test管理多个class,最小单元是一个class文件,下面就以运行同一个包下的不同测试类和不同包下测试类怎样将其添加到配置文件中;

  <?xml version=”1.0″ encoding=”UTF-8″?>

<!DOCTYPE suite SYSTEM “http://testng.org/testng-1.0.dtd”>

<suite name=”Default Suite”>

  <test name=”Java_Learn”>

    <classes>

      <class name=”com.java.learn.TestNG_Demo1″/> <!– com.java.learn包下的TestNG_Demo1类 –>

     <!– 添加不同测试类文件 –>

     <class name=”com.java.learn.TestNG_Demo2″/>  <!– com.java.learn包下的TestNG_Demo2类 –>

     <class name=”demo2.TestNG_Demo3″/> <!– demo2包下的TestNG_Demo3类 –>

    </classes>

  </test> <!– Java_Learn –>

</suite> <!– Default Suite –>

5. TestNG的注解

  5.1 @Before和@After 注解

     Before分类有@BeforeSuite,@BeforeTest, @BeforeGroups,@BeforeClass,@BeforeMethod

After分类有@AfterSuite,@ AfterTest, @AfterGroups,@ AfterClass,@ AfterMethod

注:套件测试是什么东西? 套件测试是一起运行的多个测试类。

    5.2@DataProvider注解

标记一个方法是用来给其他测试方法提供数据的方法。要求该方法必须返回是object[][].

5.3@Factory注解

标记这个方法是一个工厂,方法必须返回的是一个对象。

5.4@Listeners注解

在一个测试方法上定义一个监听。例如Selenium自动化测试中需要用到这个事件监听功能,方便我们输出日志。

5.5@Parameters注解

描述了如何给一个测试方法传提参数。

5.6@Test注解

在@Test下有很多选项可以设置,例如用例之间的依赖关系等。

    注:注解是用来执行测试类的配置,如设置、清理数据库,准备虚拟数据、部署、关闭服务器等;

6. TestNG中测试类、测试组和测试方法

   6.1 Test Methods(测试方法)

   凡是方法(或者叫函数)前面添加了@Test注解,就叫测试方法,在实际测试中,写的测试用例,其实就是许多个添加@Test的方法。6.2

6.2 Test Classes(测试类)

   测试类,一般我们新建一个Java类文件,如果里面方法有@Test,那么就是一个测试类文件。上面是写的复数。这个在testng.xml文件里可以体现,classes下可以有一个或者多个测试类文件。Classes相当于就是一个装class的容器,而class又相当于一个装method的容器。

  6.3 Test Groups(测试组)

测试组存在于同一个测试类中,一个组可以包含多个methods。还是可以组嵌套,也是就是一个组可以属于是另外一个组管理,后边会详细讲解TestNG的组测试;

7. TestNG的执行顺序

package com.testngdemo;

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 NewTest {

    //1个测试方法

    @Test

    public void testCase1() {

       System.out.println(1个测试方法+“->@Test”);

    }

 

    //2个测试方法

    @Test

    public void testCase2() {

       System.out.println(2个测试方法+“->@Test”);

    }

 

    @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”);

    }

 

    @AfterTest

    public void afterTest() {

       System.out.println(“@afterTest”);

    }

 

    @BeforeSuite

    public void beforeSuite() {

       System.out.println(“@beforeSuite”);

    }

 

    @AfterSuite

    public void afterSuite() {

       System.out.println(“@afterSuite”);

    }  

 

}

运行结果如下:


版权声明:本文为zhangwenxatu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。