testNG单元测试学习

【demo的项目报以及流程文档放在了资源文件上】

1 TestNG的介绍

1.1 概念:

TestNG(Test Next Generation)是一个测试框架,在Junit和NUnit基础上引入新功能,它是一个开源自动化测试框架。

1.2 特点:

1.     注解;

2.     TestNG使用Java和面向对象的功能;

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

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

5.     灵活的运行时配置;

6.     支持测试分组、依赖测试方法、并行测试、负载测试、局部故障等;

7.     灵活的插件API;

8.     支持多线程测试;

1.3 注解

注解

描述

@BeforeSuite

在该套件的所有测试都运行在注释的方法之前,仅运行一次。

@AfterSuite

在该套件的所有测试都运行在注释方法之后,仅运行一次。

@BeforeClass

在调用当前类的第一个测试方法之前运行,注释方法仅运行一次。

@AfterClass

在调用当前类的第一个测试方法之后运行,注释方法仅运行一次

@BeforeTest

注释的方法将在属于<test>标签内的类的所有测试方法运行之前运行。

@AfterTest

注释的方法将在属于<test>标签内的类的所有测试方法运行之后运行。

@BeforeGroups

配置方法将在之前运行组列表。 此方法保证在调用属于这些组中的任何一个的第一个测试方法之前不久运行。

@AfterGroups

此配置方法将在之后运行组列表。该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行。

@BeforeMethod

注释方法将在每个测试方法之前运行。

@AfterMethod

注释方法将在每个测试方法之后运行。

@DataProvider

标记一种方法来提供测试方法的数据。 注释方法必须返回一个Object [] [],其中每个Object []可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称。

@Factory

将一个方法标记为工厂,返回TestNG将被用作测试类的对象。 该方法必须返回Object []。

@Listeners

定义测试类上的侦听器。

@Parameters

描述如何将参数传递给@Test方法。

@Test

将类或方法标记为测试的一部分。

其中,@BeforeSuite和@AfterSuite只执行一次,大致的顺序是:@BeforeSuite——@BeforeTest——@BeforeClass——@BeforeMethod——(method),然后@AfterXXX是逆序

2 TestNG框架的安装

2.1使用的工具:

       TestNG插件、Maven、Eclipse

其中TestNG插件的安装:在ecplise的help栏目中找到Install New Software按钮按照以下操作:

2.2 TestNG依赖关系

在pom.xml中添加TestNG库


3 TestNG Demo的编写

3.1 套件测试

3.1.1 套件测试介绍

1)测试套件作用:用于测试软件程序的行为或一组行为的测试用例的集合。主要是用xml文件表示,由<suite>标记定义,<suite>是testng.xml的根标记,描述一个测试套件,<suite>又由几个<test>部分组成。

2)下表是<suite>接受的所有定义的合法属性

属性

描述

name

套件的名称,这是一个强制属性。

verbose

运行的级别或详细程度。

parallel

TestNG是否运行不同的线程来运行这个套件。

thread-count

如果启用并行模式(忽略其他方式),则要使用的线程数。

annotations

在测试中使用的注释类型。

time-out

在本测试中的所有测试方法上使用的默认超时。

3.1.2 套件测试Demo

1. 创建Demo目录如下:


2.创建三个测试类分别是TestConfig、TestDatabase、TestPerson如下

 

 

 3.创建testng_suite.xml文件,进行套件测试

 


4.创建testng_package.xml文件,进行整个包的测试


3.2 分组测试

3.2.1分组测试介绍

1)分组测试是TestNG中的一个新的创新功能,在Junit框架中不存在。它允许声明属于某个分组的方法,也可以指定包含其他组的组。可以要求包含一组特定的组,同时排除另一个分组(include和exclude的使用)

2)在testng.xml文件中指定分组,使用<groups>标记,在<test>或<suite>标签下找到,<suite>标签中指定分组适用于所有<test>标签。

3.2.2分组测试Demo

1. 创建Demo目录如下:


2.创建TestGroup测试类


3.创建TestDatabase测试类


4.创建testng_groups.xml进行分组测试


运行后结果为:


3.3 依赖测试

3.3.1 依赖测试介绍

1)场景需求:需要以特定顺序调用测试用例中的方法,或者可能希望在方法之间共享一些数据和状态。 TestNG支持这种依赖关系,因为它支持在测试方法之间显式依赖的声明。

2)TestNG允许指定依赖关系:

@Test注释中使用属性dependsOnMethods,

@Test注释中使用属性dependsOnGroups。

3)在TestNG中,使用dependOnMethods和dependsOnGroups来实现依赖测试。 如果依赖方法失败,则将跳过所有后续测试方法。

3.3.2 依赖测试Demo

1. 创建Demo目录如下:


2.dependsOnMethods依赖方法

1)method2()依赖于method1(),如果method1()通过,那么执行method2()

 

2)如果method1()失败,则将跳过method2()

3.dependsOnGroups的使用

1)创建被依赖的分组测试类

 

2)创建依赖分组测试类

3)创建xml文件testng_dependency.xml进行依赖测试

3.4 超时测试

3.4.1 超时测试介绍

1)执行超时测试,“超时”表示如果单元测试花费的时间超过指定的毫秒数,那么testNG将会中止它并将其标记为失败。

2)“超时”也可用于性能测试,以确保方法在合理的时间内返回。

3.4.2 超时测试Demo

1.创建Demo目录如下:

2.创建TestTimeout测试类:

3.5 忽略测试

3.5.1 忽略测试介绍

1)当编写的测试方法为准备就绪,并且测试用例要测试该方法/代码是否失败(或成功)。注释@Test(enabled= false)有助于禁用此测试用例。如果使用@Test(enabled= false)注释在测试方法上,则会绕过这个未准备好测试的测试用例。

2)默认情况下,注释为@Test等价于@Test(enabled=true)

3.5.2 忽略测试Demo

1.创建Demo目录如下:

2.创建TestIgnore测试类:

3.6 预期异常测试

3.6.1 预期异常测试介绍

1)TestNG可以简单方便的检测异常的发生,通过@expectedExceptions标注预期捕获的异常,当确实发生预期的异常,TestNG认为测试通过。也可以指定标注多个异常。

3.6.2 预期异常测试Demo

1.创建Demo目录如下:

2.创建测试对象类Order

2.创建业务对象类OrderBo:

3.创建三个Exception异常

4.运行时异常测试类TestRuntime:

5.检查异常测试TestCheckedException:

3.7 参数测试

3.7.1 参数化测试介绍

1)TestNG中参数化测试允许开发人员使用不同的值一次又一次地运行相同的测试。

2)TestNG可以通过两种不同的方式将参数直接传递给测试方法:

使用testng.xml即XML文件;

使用数据提供者@DataProvider;

3.7.2 参数化测试Demo

1.创建Demo目录如下

 

2.添加mysq-connector的Maven依赖包:

(1)使用XML传递参数

1.创建参数测试类TestParameterXML:

2.创建db.properties属性文件:

3.创建tesng_parameterTest.xml文件进行参数化测试:

(2)通过@DataProvider传递参数

1.创建测试类TestParameterDataProvider,传递一个int参数

2.创建一个测试类TestParameterDataProvider2,传递一个对象

 运行结果:

(3)通过@DataProvider+方法的方式传递参数

1.创建一个测试类TestParameterDataProvider3,根据测试方法名称传递不同的参数

(4)使用@DataProvider+ITestContext传递参数

1.创建测试类TestParameterDataProvider4,根据包含的分组名称传递参数

2.创建testng_ITestContext.xml文件进行测试:

4 总结

1)学会套件测试的方式(主要是利用xml文件进行配置);

2)学会指定包名进行套件测试;

3)学会@BeforeGroups(groups=?)和@AfterGroups(groups=())的使用;

4)学会分组测试中,在xml文件中include和exclude的使用;

5)学会依赖测试(@Test(dependsOnMethods=?)和@Test(dependsOnGroups=?)的使用);

6)学会超时测试;

7) 学会忽略测试(通过@Test(enabled=false)可以进行测试方法的忽略,默认情况下是true);

8)学会预期异常测试(@Test(expectedExceptions=?)的使用);

9)学会参数化测试(使用XML传递参数,熟悉@Test(dataProvider="xxx")和@DataProvider(name="xxx")的使用;

posted @ 2017-07-28 09:35  Andya_net  阅读(33)  评论(0编辑  收藏  举报  来源