TestNG 入门教程

简介: TestNG 入门教程国庆7天假期,大部分朋友都出去旅游了,微信圈里全是晒旅游的照片, 东南亚游,欧洲游呀,真是羡慕呀。 悲惨的我只去了上海野生动物园, 在家休息,利用这段假期,把之前学过的东西都总结下。

TestNG 入门教程

国庆7天假期,大部分朋友都出去旅游了,微信圈里全是晒旅游的照片, 东南亚游,欧洲游呀,真是羡慕呀。 悲惨的我只去了上海野生动物园, 在家休息,利用这段假期,把之前学过的东西都总结下。 

我前段时间加班太多了,每天忙碌工作,都没精力去管自己的学习新技能的计划, 博客也没写几篇,很多想做的事情都因为工作太忙而耽搁了。 所以工作太忙了也不好,没有精力关注工作以外的事情。   

最近写自动化测试每天都用到TestNG,  把常用的TestNG的用法总结下。

 

阅读目录

  1. TestNG介绍

  2. 在Eclipse中在线安装TestNG

  3. 在Eclipse中离线安装Testng

  4. TestNG最简单的测试

  5. TestNG的基本注解

  6. TestNG中如何执行测试

  7. 使用testtng.xml 文件执行 case 

  8. TestNG按顺序执行Case

  9. TestNG异常测试

  10. TestNG组测试

  11. TestNG参数化测试

  12. TestNG忽略测试

  13. TestNG 依赖测试

  14. TestNG测试结果报告


 

TestNG介绍

TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit,   功能都差不多, 只是功能更加强大,使用也更方便

Java中已经有一个JUnit的测试框架了。  TestNG比JUnit功能强大的多。  测试人员一般用TestNG来写自动化测试。  开发人员一般用JUnit写单元测试。

官方网站: http://testng.org/doc/index.html

 

在Eclipse中在线安装TestNG

打开Eclipse   Help ->Install New Software ,   然后Add   "http://beust.com/eclipse"

 

在Eclipse中离线安装Testng

首先下载testng离线包:  http://pan.baidu.com/s/1hrEaX6k

 

1. 将解压后的文件..\eclipse-testng离线包\features\org.testng.eclipse_6.9.9.201510270734   文件夹 放到      eclipse--》features目录下

2. 将解压后的文件..\eclipse-testng离线包\plugins\org.testng.eclipse_6.9.8.201510130443  文件夹  放到                 eclipse--》plugins目录下

3. 重启eclipse

4. 验证是否安装成功,file-->new-->other-->TestNg

TestNG最简单的测试

 下面是TestNG的最简单的一个例子

package TankLearn2.Learn;import org.junit.AfterClass;import org.junit.BeforeClass;import org.testng.annotations.Test;public class TestNGLearn1 {

    @BeforeClass    public void beforeClass() {
        System.out.println("this is before class");
    }

    @Test    public void TestNgLearn() {
        System.out.println("this is TestNG test case");
    }

    @AfterClass    public void afterClass() {
        System.out.println("this is after class");
    }
}

 

TestNG的基本注解

 

注解 描述
@BeforeSuite 注解的方法将只运行一次,运行所有测试前此套件中。
@AfterSuite 注解的方法将只运行一次此套件中的所有测试都运行之后。
@BeforeClass 注解的方法将只运行一次先行先试在当前类中的方法调用。
@AfterClass 注解的方法将只运行一次后已经运行在当前类中的所有测试方法。
@BeforeTest 注解的方法将被运行之前的任何测试方法属于内部类的 <test>标签的运行。
@AfterTest 注解的方法将被运行后,所有的测试方法,属于内部类的<test>标签的运行。
@BeforeGroups 组的列表,这种配置方法将之前运行。此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用。
@AfterGroups 组的名单,这种配置方法后,将运行。此方法是保证运行后不久,最后的测试方法,该方法属于任何这些组被调用。
@BeforeMethod 注解的方法将每个测试方法之前运行。
@AfterMethod 被注释的方法将被运行后,每个测试方法。
@DataProvider

标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象[]的测试方法的参数列表中可以分配。

该@Test 方法,希望从这个DataProvider的接收数据,需要使用一个dataProvider名称等于这个注解的名字。
@Factory 作为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]。
@Listeners 定义一个测试类的监听器。
@Parameters 介绍如何将参数传递给@Test方法。
@Test 标记一个类或方法作为测试的一部分。

 

TestNG中如何执行测试

第一种直接执行:右键要执行的方法,  点Run As ->TestNG Test

 


使用testtng.xml 文件执行 case 

第二种:  通过testng.xml文件来执行. 把要执行的case, 放入testng.xml文件中。 右键点击testng.xml,   点Run As

testng.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
    <test name="test12">
        <classes>
            <class name="TankLearn2.Learn.TestNGLearn1" />
        </classes>
    </test>
</suite>

 

TestNG按顺序执行Case

在testng.xml中,可以控制测试用例按顺序执行。  当preserve-order="true"是,可以保证节点下面的方法是按顺序执行的

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1">
    <test name="test12" preserve-order="true">
        <classes>
            <class name="TankLearn2.Learn.TestNGLearn1">
                <methods>
                    <include name="TestNgLearn3" />
                    <include name="TestNgLearn1" />
                    <include name="TestNgLearn2" />
                </methods>
            </class>
        </classes>
    </test></suite>

 

 

 

TestNG异常测试

测试中,有时候我们期望某些代码抛出异常。

TestNG通过@Test(expectedExceptions)  来判断期待的异常, 并且判断Error Message

package TankLearn2.Learn;import org.testng.annotations.Test;public class ExceptionTest {
    
    @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp="NullPoint")    public void testException(){        throw new IllegalArgumentException("NullPoint");
    }
}

 

TestNG组测试

TestNG中可以把测试用例分组,这样可以按组来执行测试用例比如:

package TankLearn2.Learn;import org.testng.annotations.Test;public class GroupTest {
    
    @Test(groups = {"systemtest"})    public void testLogin(){
        System.out.println("this is test login");
    }
    
    @Test(groups = {"functiontest"})    public void testOpenPage(){
        System.out.println("this is test Open Page");
    }
}

 

然后在testng.xml中 按组执行测试用例

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1">
    <test name="test1">
        <groups>
        <run>
        <include name="functiontest" />
        </run>
    </groups>
    </test></suite>

 

TestNG参数化测试

软件测试中,经常需要测试大量的数据集。 测试代码的逻辑完全一样,只是测试的参数不一样。  这样我们就需要一种 “传递测试参数的机制”。 避免写重复的测试代码

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

第一种: testng.xml 方式使代码和测试数据分离,方便维护

第二种:@DataProvider能够提供比较复杂的参数。 (也叫data-driven testing)

 

方法一: 通过testng.xml 传递参数给测试代码

package TankLearn2.Learn;import org.testng.annotations.Parameters;import org.testng.annotations.Test;public class ParameterizedTest1 {
    
    @Test
    @Parameters("test1")    public void ParaTest(String test1){
        System.out.println("This is " + test1);
    }
}

testng.xml

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

 

方式二:   通过DataProvider传递参数

package TankLearn2.Learn;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;public class DataProviderLearn {
    
    @DataProvider(name="user")    public Object[][] Users(){        return new Object[][]{
                {"root","passowrd"},
                {"cnblogs.com", "tankxiao"},
                {"tank","xiao"}
        };
    }
    
    @Test(dataProvider="user")    public void verifyUser(String userName, String password){
        System.out.println("Username: "+ userName + " Password: "+ password);
    }
}

 

TestNG忽略测试

有时候测试用例还没准备好, 可以给测试用例加上@Test(enable = false),  来禁用此测试用例

package TankLearn2.Learn;import org.testng.annotations.Test;public class TesgNGIgnore {
    
    @Test(enabled = false)    public void testIgnore(){
        System.out.println("This test case will ignore");
    }
}

 

TestNG 依赖测试

有时候,我们需要按顺序来调用测试用例,  那么测试用例之间就存在依赖关系。 TestNG支持测试用例之间的依赖

package TankLearn2.Learn;import org.testng.annotations.Test;public class DependsTest {
    
    @Test    public void setupEnv(){
        System.out.println("this is setup Env");
    }
    
    @Test(dependsOnMethods = {"setupEnv"})    public void testMessage(){
        System.out.println("this is test message");
    }
}

 

TestNG测试结果报告

测试报告是测试非常重要的部分.  

TestNG默认情况下,会生产两种类型的测试报告HTML的和XML的。 测试报告位于 "test-output" 目录下.

 

当然我们也可以设置测试报告的内容级别. 

verbose="2" 标识的就是记录的日志级别,共有0-10的级别,其中0表示无,10表示最详细

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1">
    <test name="test12" verbose="2">
        <classes>
            <class name="TankLearn2.Learn.TestNGLearn1" />
        </classes>
    </test></suite>

 

相关文章
|
机器学习/深度学习 运维 算法
Machine Learning机器学习之向量机(Support Vector Machine,SVM)
Machine Learning机器学习之向量机(Support Vector Machine,SVM)
|
10月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
717 0
|
5月前
|
人工智能 API 数据安全/隐私保护
阿里云新手零基础部署OpenClaw保姆级教程 秒级上线+大模型Kimi K2.5接入全流程
2026年,开源AI智能体工具OpenClaw(曾用名Clawdbot、Moltbot,圈内常称“AI小龙虾”)凭借**轻量化运行、一键云端部署、零代码配置、大模型灵活对接**的特性,成为零基础用户打造私人AI助手的首选工具。它不需要高配本地电脑,依托阿里云轻量服务器就能实现7×24小时不间断运行,既能完成日常问答、长文本解读、代码编写,也能实现文件处理、信息检索、自动化任务执行等实操功能,上手难度极低,完全不用懂服务器运维和编程知识。
1196 1
|
5月前
|
设计模式 数据采集 人工智能
构建生产级 AI Agent 系统的4大主流技术:反思、工具、规划与多智能体协作
本文深入解析Agentic AI四大核心设计模式:Reflection(自我反思)、Tool Use(工具调用)、Planning(任务规划)与Multi-Agent协作。它们共同赋予AI思考、行动、校验与协同能力,突破单轮问答局限,构建真正可落地的自主智能系统。
927 3
|
8月前
|
前端开发 Java 关系型数据库
|
8月前
|
存储 弹性计算 缓存
阿里云云服务器经济型、通用算力型和第九代热门实例解析:实例性能、适用场景与选购参考
在阿里云目前的活动中,可选的云服务器ECS实例规格主要有经济型e、通用算力型u1/u2i/u2a、九代c9i/g9i/r9i/c9a/g9a/r9a实例等。不同实例规格的所采用的架构、处理器不同,因此在计算、网络、存储等方面的性能也有所不同,从而在适用场景方面也有所差异。本文为大家解析这些实例各自的性能与适用场景,为企业及个人用户提供一份选择参考指南。
|
11月前
|
敏捷开发 Dubbo Java
需求开发人日评估
本文介绍了敏捷开发中工时评估的重要方法——“人日评估”,即根据开发人员负责模块的工作量估算所需时间。内容涵盖人日定义、开发各阶段(开发、自测、联调、测试、发布)的人日参考值,以及常见需求如Excel导入导出、远程服务调用等的评估示例,帮助团队更合理地规划开发周期。
|
11月前
|
监控 安全 数据可视化
Amass 被动与主动子域收集
Amass是OWASP推出的开源信息收集工具,主要用于域名信息收集、子域名枚举与攻击面分析。它结合被动数据源、主动探测及字典爆破发现目标资产,支持生成可视化图表,适用于渗透测试、资产管理和安全监控等多种场景。
433 0
|
机器学习/深度学习 Java 开发工具
【移花接木】OpenCV4.8 For Java 深度学习 实时人脸检测
【移花接木】OpenCV4.8 For Java 深度学习 实时人脸检测
458 0
|
SQL 关系型数据库 数据库
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
877 9
SQL Server语法基础:入门到精通