TestNG使用总结

原创 2016年08月30日 17:06:34

TestNG简介:

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

TestNG相较于Junit的优点:

·可指定执行顺序, dependsOnMethods 属性来应对测试的依赖性问题。
·参数化测试,TestNG 提供了开箱即用的类似特性。通过在 TestNG 的 XML 配置文件中放入参数化数据,就可以对不同的数据集重用同一个测试用例,甚至有可能会得到不同的结果。支持@DataProvider 注释可以方便地把复杂参数类型映射到某个测试方法。
·支持分组测试
·支持多线程测试

官网地址:http://testng.org/doc/index.html

引入依赖:

<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8</version>
</dependency>

TestNG用法简介:

注解 描述
@BeforeSuite 注解的方法将只运行一次,所有测试运行前运行。
@AfterSuite 注解的方法将只运行一次,,所有测试运行后运行。
@BeforeClass 注解的方法将只运行一次,被注释的方法将在当前类的第一个测试方法调用前运行。
@AfterClass 注解的方法将只运行一次,被注释的方法将在当前类的最后一个个测试方法调用后运行。
@BeforeTest 被注释的方法将在所有测试方法运行前运行
@AfterTest 被注释的方法将在所有测试方法运行后运行
@BeforeGroups 组的列表,这种配置方法将之前运行。此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用。
@AfterGroups 组的名单,这种配置方法后,将运行。此方法是保证运行后不久,最后的测试方法,该方法属于任何这些组被调用。
@BeforeMethod 注解的方法将每个测试方法之前运行。
@AfterMethod 被注释的方法将被运行后,每个测试方法。
@DataProvider 标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象[]的测试方法的参数列表中可以分配。该@Test 方法,希望从这个DataProvider的接收数据,需要使用一个dataProvider名称等于这个注解的名字。
@Factory 作为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]。
@Listeners 定义一个测试类的监听器。
@Parameters 介绍如何将参数传递给@Test方法。
@Test 标记一个类或方法作为测试的一部分。

生命周期:

@BeforeSuite->@BeforeTest->@BeforeClass->{@BeforeMethod->@Test->@AfterMethod}->@AfterClass->@AfterTest->@AfterSuite

分组测试

相比junit的TestCase/TestSuite,TestNG有suite/test/test method三个级别,即将test/test method明确区分开了。
* suite由xml文件描述。它包含一个或多个测试并被定义为标签
* test由描述并包含一个或者多个TestNG类
* TestNG类是包含至少一个TestNG annotation的java类,由标签描述并包含一个或多个测试方法

测试类:

public class QueryTest {
    @Test(groups = {"functest", "checkintest"})
    public void testMethod1() {
        System.out.println("groups = { functest, checkintest }");
    }

    @Test(groups = {"functest", "checkintest"})
    public void testMethod2() {
        System.out.println("groups = { functest, checkintest }");
    }

    @Test(groups = {"functest"})
    public void testMethod3() {
        System.out.println("groups = { functest }");
    }

    @Test(groups = {"checkintest"})
    public void testMethod4() {
        System.out.println("groups = { checkintest }");
    }
}

testng.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="framework_testng">
    <test verbose="2" name="TestGroups">
        <groups>
            <run>
                <include name="functest" />
                <exclude name="checkintest" />
            </run>
        </groups>

        <classes>
            <class name="QueryTest" />
        </classes>
    </test>
</suite>  

意思就是执行QueryTest类中group带functest,排除checkintest的方法;

依赖执行

用例间依赖关系,按序执行:

public class DependsTest {

@Test
public void setupEnv(){
System.out.println("this is setup Env");
}
//setupEnv()方法须在testMessage()方法前执行
@Test(dependsOnMethods = {"setupEnv"})
public void testMessage(){
System.out.println("this is test message");
}
}

参数化测试

TestNG提供了2种传递参数的方式。

第一种: testng.xml 方式使代码和测试数据分离,方便维护,适用于一个用例,需要多个相同参数(值不同)来验证的情况。
第二种:@DataProvider能够提供比较复杂的参数。
这里介绍下第一种,如下例:@Parameters({ “key” }) 会去testng.xml里取到这个key对应的value,放到传参secondName中。

public class TestngParameters {  

    // @Parameters注解内对应的参数名称和配置文件中的key必须是相同  
    @Parameters({ "key" })  
    @Test  
    public void testSingleString(String secondName) {  
        System.err.println("Invoked testString " + secondName);  
        assert "Cedric".equals(secondName);  
    } 

对应的testng.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
        <parameter name="key" value="Tank" />
        <parameter name="key" value="Xiao" />
    <test name="test12">
        <classes>
            <class name="ClassName" />
        </classes>
    </test
</suite>

异常处理

TestNG通过@Test(expectedExceptions) 来判断期待的异常, 并且判断Error Message
e.g:@Test(expectedExceptions =IllegalArgumentException.class, expectedExceptionsMessageRegExp=”NullPoint”)

忽略测试:
@Test(enable = false), 来禁用此测试用例

多线程运行:

@Test(threadPoolSize = 3, invocationCount = 10,timeout = 3000)

invocationCount—-表示执行的次数
threadPoolSize—–表示线程池的内线程的个数
timeOut——-超时时间-毫秒

TestNG常用断言:

导入Assert包:

import static org.testng.Assert.*;

(1) assertTrue:判断是否为True。

(2) assertFalse:判断是否为false。

(3) assertSame:判断引用地址是否相同。

(4) assertNotSame:判断引用地址是否不相同。

(5) assertNull:判断是否为null。

(6) assertNotNull:判断是否不为null。

(7) assertEquals:判断是否相等,Object类型的对象需要实现haseCode及equals方法。

(8) assertNotEquals:判断是否不相等。

(9) assertEqualsNoOrder:判断忽略顺序是否相等。

版权声明:本文为博主原创文章,未经博主允许不得转载。

testng实现verify断言

1.构造一个Verify类,将testNg的Assert断言异常捕获,利用监听器在@Test方法结束后一次性抛出 2.编写Verify类,可按需求扩充 package com.p; import...
  • kdslkd
  • kdslkd
  • 2016年04月26日 14:28
  • 1580

JAVA结合testng断言verify(断言失败不中断继续执行)

JAVA结合testng断言verify(断言失败不中断继续执行) 原理: 1.自已构造一个断言类,把Assert.assertEquals给try catch住。 2.利用testng...
  • M1011566442
  • M1011566442
  • 2016年08月01日 13:37
  • 1135

TestNG监听器实现用例运行失败自动截图、重运行功能

 使用Testng框架搭建自动测试框架,经常会需要增加失败自动截图,以及失败重跑功能,下面介绍一下不修改Testng的源码,通过监听器的方式来实现自动截图、重跑、以及自定义生成的Html结果文件...
  • Sunnyyou2011
  • Sunnyyou2011
  • 2015年05月21日 16:51
  • 7753

初步使用过testNG后的总结

初步使用过testNG后的总结
  • airwolk
  • airwolk
  • 2017年02月13日 11:16
  • 143

testNG安装使用

  • 2016年01月28日 17:31
  • 487KB
  • 下载

TestNG在eclipse中的使用

  • 2012年11月02日 15:16
  • 23KB
  • 下载

TestNG 学习总结 - 执行测试(六)

学习背景:    该系列教程由悦分享提供,专门为自动化测试从业者学习自动化测试工具(Selenium WebDriver)使用,Selenium WebDriver自动化测试工具兼容Junit、...
  • a578133380
  • a578133380
  • 2016年04月20日 15:53
  • 740

TestNG 学习总结 - 编写测试(三)

编写TestNG测试基本上包括以下步骤: 测试和编写业务逻辑,在代码中插入TestNG的注解.. 添加一个testng.xml文件或build.xml中在测试信息(例如类名,您想要运行的组,等....
  • a578133380
  • a578133380
  • 2016年04月20日 15:47
  • 343

gradle复习(3)-在gradle项目中使用TestNG

1.gradle项目 在eclipse中创建的java项目,用gradle管理。我要复习的是关于在gradle中使用TestNG的知识。首先TestNG环境配置如上一篇文章。 测试目录下有2个ja...
  • qhshiniba
  • qhshiniba
  • 2015年01月20日 17:40
  • 6475

testng(一)安装和基本使用

1.  教程 TestNG入门教程 :http://www.yiibai.com/testng/ EasyMock教程 : http://www.yiibai.com/easymock/...
  • wodeyijia911
  • wodeyijia911
  • 2015年09月22日 22:10
  • 6364
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TestNG使用总结
举报原因:
原因补充:

(最多只允许输入30个字)