Java优秀测试框架TestNG详解

目录
  • 我们为什么需要TestNG?
  • TestNG搭建
  • TestNG注解及功能
  • TestNG配置文件
    • 1.新增配置文件
    • 2.配置测试套件(suit)
    • 3.配置测试案例
  • TestNG测试
    • 1.异常测试
    • 2.忽略测试
    • 3.超时测试
    • 4.参数化测试
      • 4.1使用XML配置文件提供
      • 4.2使用@DataProvider传递参数
    • 5.依赖测试
  • TestNG测试报告
  • 总结

我们为什么需要TestNG?

Java有好几个测试框架,JUnit是比较常见的一个,Spring系列默认的测试框架就是JUnit。TestNG也是Java的一个测试框架,与JUnit功能类似, 但支持更多的注解与功能。

我们常使用JUnit做单元测试,而在做自动化测试时,更偏向于选择TestNG。

TestNG搭建

Maven工程中,添加TestNG依赖包即可,可自行选择版本:

		<dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.1.0</version>
            <scope>test</scope>
        </dependency>

TestNG注解及功能

TestNG的注解与JUnit类似,但会更丰富,更细致:

注解 描述
@Test 标记一个类里所有的public void方法,或某个方法,作为测试案例。
@BeforeSuite 对于套件测试,在此套件中的所有测试执行之前运行,仅运行一次。
@AfterSuite 对于套件测试,在此套件中的所有测试执行之后运行,仅运行一次。
@BeforeClass 在调用当前类之前运行,只运行一次。
@AfterClass 在调用当前类之后运行,只运行一次。
@BeforeTest 对于套件测试,在属于标签内的所有类的测试方法执行之前运行。
@AfterTest 对于套件测试,在属于标签内的所有类的测试方法都已执行完之后运行。
@BeforeGroups 在调用属于该组的第一个测试方法之前运行。
@AfterGroups 在调用属于该组的最后一个测试方法执行之后运行 。
@BeforeMethod 注解的方法将每个测试方法之前运行。
@AfterMethod 在每个测试方法执行之前都会运行。
@DataProvider 标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象[]的测试方法的参数列表中可以分配。该@Test 方法,希望从这个DataProvider的接收数据,需要使用一个dataProvider名称等于这个注解的名字。
@Factory 作为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]。
@Listeners 定义一个测试类的监听器。
@Parameters 用于将参数传递给@Test方法。

TestNG配置文件

对比JUnit,TestNG最显眼的区别就是多了一个配置文件。

有了这个配置文件的存在,可以更方便的管理测试案例的执行。

1.新增配置文件

在项目根目录下,新增testng.xml格式的配置文件,文件名任意,配置文件可以有多个。

maven工程在pom文件中,指定配置文件路径后,可以直接运行配置文件:

			<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M4</version>
                <configuration>
                    <suiteXmlFiles>
                        <suiteXmlFile>./testng.xml</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>

TestNG配置的内容并不复杂,这里的配置并不是TestNG启动的依赖,而是对测试案例的执行方式进行划分。

2.配置测试套件(suit)

一个配置文件,有且只能有一个测试套件。suit标签的常见属性如下,其中name为强制填写的,会展示在最终的测试报告中。

属性 描述
name 套件的名称,这是一个强制属性
verbose 运行的级别或详细程度,级别为0-10,其中10最详细
parallel TestNG是否运行不同的线程来运行这个套件,默认为none,其他级别为methods、tests、classes、instances
thread-count 如果启用并行模式(忽略其他方式),则为使用的线程数
annotations 在测试中使用的注释类型
time-out 在本测试中的所有测试方法上使用的默认超时
preserve-order 用于配置测试案例是否按顺序执行

3.配置测试案例

按照groups组进行划分(使用了@Test (groups={“group1”})进行注解的),include标签标注的组名会被执行,被exclude标注的组则不会被执行:

		<groups>
  			<run>
     			<include name = "includedGroupName" />
     			<exclude name = "excludedGroupName" />
  			</run>
		</groups>

按照包、类、方法三个层级划分:

包:

		<packages>
            <package name = "com.hhm.demo1.*" />
            <package name = "com.hhm.demo2.*" />
        </packages>

类:

		<classes>
            <class name="com.hhm.demo1.DemoTest1"/>
            <class name="com.hhm.demo1.DemoTest2"/>
		</classes>

方法:

		<classes>
            <class name="com.hhm.demo1.DemoTest1">
                <methods>
                    <include name="testMethodName"></include>
                </methods>
            </class>
        </classes>

完整配置示例:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="First suite" verbose="1" >
    <test name="MyTest" parallel="classes" thread-count="4">
        <packages>
            <package name="com.hhm.demo1.*"></package>
            <package name="com.hhm.demo2.*"></package>
        </packages>
    </test>
</suite>

配置完成后,可以直接运行配置文件,以执行测试案例。也可以通过maven-Lifecycle的test命令执行。

TestNG测试

1.异常测试

预期异常测试通过在@Test注解后加入预期的Exception来进行添加,示例如下:

	@Test(expectedExceptions = ArithmeticException.class)
    public void divisionWithException() {
        int i = 1 / 0;
        System.out.println("After division the value of i is :"+ i);
    }

2.忽略测试

有时候我们写的用例没准备好,或者该次测试不想运行此用例,那么删掉显然不明智,那么就可以通过注解@Test(enabled = false)来将其忽略掉,此用例就不会运行了,如下范例:

public class DemoTest1{
    @Test(enabled=false)
    public void TestNgLearn1() {
        System.out.println("this is TestNG test case1");
    }
    @Test
    public void TestNgLearn2() {
        System.out.println("this is TestNG test case2");
    }
}

3.超时测试

“超时”表示如果单元测试花费的时间超过指定的毫秒数,那么TestNG将会中止它并将其标记为失败。此项常用于性能测试。如下为一个范例:

public class DemoTest2{
    @Test(timeOut = 5000) // time in mulliseconds
    public void testThisShouldPass() throws InterruptedException {
        Thread.sleep(4000);
    }
    @Test(timeOut = 1000)
    public void testThisShouldFail() {
        while (true){
            // do nothing
        }
    }
}

4.参数化测试

4.1 使用XML配置文件提供

代码如下:

public class DemoTest2 {
    @Parameters({"param1", "param2"})
    public void TestNgLearn1(String param1, int param2) {
        System.out.println("this is TestNG test case1, and param1 is:"+param1+"; param2 is:"+param2);
        Assert.assertFalse(false);
    }
}

XML配置如下:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="First suite" verbose="1" >
    <test name="MyTest">
	    <parameter name="param1" value="1011111" />
	    <parameter name="param2" value="10" />
        <classes>
      		<class name="com.hhm.demo1.DemoTest2"/>
    	</classes>
    </test>
</suite>

4.2 使用@DataProvider传递参数

此处需要注意,传参的类型必须要一致,且带有@DataProvider注解的函数返回的必然是Object[][],此处需要注意。当提供多组数据时,测试案例则会执行相应次数。

public class DemoTest2 {
    @DataProvider(name = "provideNumbers")
    public Object[][] provideData() {
        return new Object[][] { { 10, 20 }, { 100, 110 }, { 200, 210 } };
    }
    @Test(dataProvider = "provideNumbers")
    public void TestNgLearn1(int param1, int param2) {
        System.out.println("this is TestNG test case1, and param1 is:"+param1+"; param2 is:"+param2);
        Assert.assertFalse(false);
    }
}

5.依赖测试

有时候,我们需要按顺序来调用测试用例,那么测试用例之间就存在依赖关系。 TestNG支持测试用例之间的依赖,使用dependOnMethods和dependsOnGroups来实现依赖测试。如下案例,TestNgLearn1()案例失败时,TestNgLearn2()案例则不会执行:

public class DemoTest1 {
    public void TestNgLearn1() {
        System.out.println("this is TestNG test case1");
        Assert.assertFalse(true);
    }
    @Test(dependsOnMethods= {"TestNgLearn1"})
    public void TestNgLearn2() {
        System.out.println("this is TestNG test case2");
    }
}

TestNG测试报告

使用maven执行完测试用例后,会在 工程根目录\target\surefire-reports 目录下,生成测试报告文件,点击index.html文件则可以在浏览器中查看。

这里的报告比较简单,不够美观。我们可以结合Allure插件,生成更美观的测试报告。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • java 与testng利用XML做数据源的数据驱动示例详解

    java 与testng利用XML做数据源的数据驱动示例详解 testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以XML为例: 备注:@DataProvider的返回值类型只能是Object[][]与Iterator<Object>[] TestData.xml: <?xml version="1.0" encoding="UTF-8"?> <

  • java中TestNG使用教程详解

    目录 一.TestNG介绍 二.TestNG安装(基于eclipse+maven) 三.TestNG基本使用和运行 1.直接运行: 2.xml方式运行 四.注解说明 五.TestNG断言 六.TestNG预期异常测试 七.TestNG忽略测试 八.TestNG超时测试 九.分组测试 十.分suite测试 十一.依赖测试 十二.参数化测试 十三.XML配置文件说明 1.suite标签 2.test标签 3.group标签 4.其他 十四.TestNG报告 一.TestNG介绍 TestNG是Jav

  • Java中用enum结合testng实现数据驱动的方法示例

    前言 数据驱动测试是相同的测试脚本使用不同的测试数据执行,测试数据和测试行为完全分离.数据驱动是做自动化测试中很重要的一部分,数据源的方案也是百花八门了,比如利用外部文件,直接在@DataProvider中写死等等. 我们今天介绍一下利用enum来做数据源,先来看一下enum的写法: public enum TestEnum { OK(200,"success"), FAIL(300,"fail"); private int retCode; private Str

  • 使用JAVA+Maven+TestNG框架实现超详细Appium测试安卓真机教程

    前言:前段时间做了selenium的学习和实践,有点意犹未尽,所以自己就又学了下Appium的使用,因为这一套东西在16年已经停止维护了,不管实现还是设计上都不是很容易,也踩了很多坑,现在在此记录下大概过程.后续有时间再完善手册. 一.准备 安装SDK,配置环境变量 链接: https://pan.baidu.com/s/1g2QaWjdfg6Txa0gZf9kk3A 提取码: 8aaz windows配置环境SDK变量 我的电脑右键->属性 点击高级系统设置 点击环境变量 点击新建按钮,变量名

  • Java+TestNG接口自动化入门详解

    目录 一.环境准备:(根据自己电脑配置来选择安装版本,我的电脑是64位,所以此处选择64位安装) 二.环境安装: 三.TestNG接口自动化实现 四.创建自己的第一个接口自动化脚本 五.批量执行自动化脚本 六.生成并查看自动化测试报告 一.环境准备:(根据自己电脑配置来选择安装版本,我的电脑是64位,所以此处选择64位安装) JDK下载: JDK 1.8下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downl

  • Java优秀测试框架TestNG详解

    目录 我们为什么需要TestNG? TestNG搭建 TestNG注解及功能 TestNG配置文件 1.新增配置文件 2.配置测试套件(suit) 3.配置测试案例 TestNG测试 1.异常测试 2.忽略测试 3.超时测试 4.参数化测试 4.1使用XML配置文件提供 4.2使用@DataProvider传递参数 5.依赖测试 TestNG测试报告 总结 我们为什么需要TestNG? Java有好几个测试框架,JUnit是比较常见的一个,Spring系列默认的测试框架就是JUnit.TestN

  • Java WebService开源框架CXF详解

    目录 CXF简介 支持多种标准 CXF入门案例 服务端的实现 客户端的实现 CXF+Spring整合发布SOAP模式的服务 服务端的实现 客户端的实现 CXF发布REST模式的服务 CXF+Spring整合发布REST模式的服务 综合案例:手机归属地查询 CXF简介 CXF是一个开源的WebService框架.Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix

  • java内部测试类代码详解

    我们一般使用的java内部类有4种形式:一般内部类.局部内部类.匿名内部类.静态内部类.以下是我作的一个测试,以说明各种内部类的特性. 有关内部类的特性,代码中有详细说明,如下. /* * java内部类测试 * * InterObj反射结果: * * private int i * private InterObj$InterA ia * public InterObj() * public static void main(java.lang.String[]) * private int

  • Java之JSF框架案例详解

    这是一个分为两部分的系列,其中我介绍了JSF 2及其如何适合Java EE生态系统. 在第1部分中,我将介绍JavaServer Pages(JSF)背后的基本思想 ,在第2部分中,将介绍Facelets声明语言 . 在构建Web应用程序时,我们为最终用户提供了一种与我们的应用程序进行交互的方式,这就是JSF所提供的. 我将向您介绍MVC设计模式以及如何使用它,并且您将发现Facelets视图语言及其使用方式,如何将数据和事件绑定到上下文以及如何通过表达语言来实现. 我将通过查看替代模板框架(例

  • Java WebService开源框架CXF详解

    CXF简介 CXF是一个开源的WebService框架.Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding .DataBinding.Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WS

  • Java高并发测试框架JCStress详解

    前言 如果要研究高并发,一般会借助高并发工具来进行测试.JCStress(Java Concurrency Stress)它是OpenJDK中的一个高并发测试工具,它可以帮助我们研究在高并发场景下JVM,类库以及硬件等状况. JCStress学起来很简单,而且官方也提供了许多高并发场景下的测试用例,只要引入一个jar包,即可运行研究. 如何使用JCStress 此演示用maven工程,首先需要引入jar包,核心包是必须要的,样例包非必须要,此是为了演示其中的例子. <dependencies>

  • java property配置文件管理工具框架过程详解

    这篇文章主要介绍了java property配置文件管理工具框架过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 property property 是 java 实现的 property 框架. 特点 优雅地进行属性文件的读取和更新 写入属性文件后属性不乱序 灵活定义编码信息 使用 OO 的方式操作 property 文件 支持多级对象引用 快速开始 环境依赖 Maven 3.x Jdk 1.7+ Maven 引入依赖 <depende

  • Java并发中的Fork/Join 框架机制详解

    什么是 Fork/Join 框架 Fork/Join 框架是一种在 JDk 7 引入的线程池,用于并行执行把一个大任务拆成多个小任务并行执行,最终汇总每个小任务结果得到大任务结果的特殊任务.通过其命名也很容易看出框架主要分为 Fork 和 Join 两个阶段,第一阶段 Fork 是把一个大任务拆分为多个子任务并行的执行,第二阶段 Join 是合并这些子任务的所有执行结果,最后得到大任务的结果. 这里不难发现其执行主要流程:首先判断一个任务是否足够小,如果任务足够小,则直接计算,否则,就拆分成几个

  • Java进程内缓存框架EhCache详解

    目录 一:目录 二: 简介 2.1.基本介绍 2.2.主要的特性 2.3. 集成 2.4. ehcache 和 redis 比较 三:事例 3.1.在pom.xml中引入依赖 3.2.在src/main/resources/创建一个配置文件 ehcache.xml 3.3.测试类 3.4.缓存配置 一:xml配置方式: 二:编程方式配置 3.5.Ehcache API 四:Spring整合 4.1.pom.xml 引入spring和ehcache 4.2.在src/main/resources添

  • Java集合框架LinkedList详解及实例

    Java集合框架LinkedList详解 LinkedList定义 package java.util; public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable{ transient int size = 0; transient Node<E> first;

随机推荐