资深测试必备技能!TestNG自动化测试框架实战详解
ccwgpt 2025-05-23 15:50 2 浏览 0 评论
1、TestNG导言
在软件测试工作中,自动测试框架是不可或缺的,之前有Junit和Nunit框架,后有TestNG。TestNG不但吸取了Junit和Nunit框架的思想,而且创造了更强大的功能,它不但是单元测试框架,同时也是集成自动化测试框架。TestNG突破了以前一些测试框架的限制,成为用途最广泛的自动和单元测试框架之一,大家由浅入深地一起认识TestNG的强大之处,实现从初级测试工程师到资深测试工程师的进阶!
1)关注+私信回复:“测试”,可以免费领取一份10G软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!
2)关注+私信回复:"入群" 就可以邀请你进入软件测试群学习交流~~
2、TestNG-初步认知
软件测试是检查应用程序功能以确保其按要求运行的过程。单元测试由开发人员编码中开展,其中采取了足够的措施来测试每个实体(类或方法)以确保最终产品满足要求.TestNG不仅支持单元测试,同时,是很优秀的的自动化测试框架。
JUnit促使开发人员了解与任何其他测试框架相比,测试的有用性,特别是单元测试的有用性.利用相当简单,实用和严格的架构,JUnit能够"感染"大量的开发人员,JUnit同时也有一些缺点:
最初设计用于启用单位仅测试,现在用于各种测试.
无法进行依赖性测试.
配置控制不佳(setUp/tearDown).
Intrusive(强制你扩展类并以某种方式命名你的方法).
静态编程模型(强制您不必要地重新编译).
管理不同的测试套件复杂的项目可能非常棘手.
3、TestNG定义
TestNG是一个受JUnit和NUnit启发的测试框架,但引入了一些新功能,使其功能更强大,更易于使用。
TestNG是一个开源自动化测试框架,其中NG表示N ext G通气.TestNG类似于JUnit(尤其是JUnit 4),但它不是JUnit扩展,它的灵感来自JUnit.它的设计优于JUnit,尤其是在自动化测试时.TestNG的创建者是Cedric Beust。
消除旧框架的大多数限制,TestNG使开发人员能够编写更灵活,更强大的测试.由于它大量借鉴JavaAnnotations(用JDK 5.0引入)来定义测试,它还可以向您展示如何在真实的生产环境中使用Java语言的这一新功能。
4、TestNG功能
·支持注释.
·TestNG使用更多Java和OO功能.
·支持测试集成类(例如,默认情况下,不需要为每个测试方法创建新的测试类实例).
·将编译时测试代码与运行时配置/数据信息分开.
·灵活的运行时配置.
·介绍'测试组'编译完测试后,可以让TestNG运行所有"前端"测试,或"快速","慢速","数据库"测试等.
·支持相关测试方法,并行测试,负载测试和部分故障.
·灵活的插件API.
·支持多线程测试.
5、TestNG-环境和编辑工具
TestNG是Java的框架,因此第一个要求是在您的计算机上安装JDK.需要安装idea开发工具或者eclipse等编码工具。
6、JDK系统配置要求
7、JDK1.8的安装及环境变量的配置
1)https://www.oracle.com/java/technologies/downloads/下载JDK安装包
2)具体安装步骤
点击下一步:
C盘空间足够可以傻瓜式安装到C盘,也可自行更改路径到D盘
更改路径的具体步骤:
3)复制红色框中的名称并在刚刚新建Java文件夹中再新建一个为其文件名的文件夹(注:文件名不要任何有其他字符)
4)下一步:
环境变量的配置
这里以win11系统为例:
1.首先win+E打开文件管理器,找到此电脑图标,右击选择属性
2.选择高级系统设置
3.选择环境变量
4.配置环境变量(注:这里选择配置系统变量而不是用户变量)
5.以此输入变量名和变量值后点击确认
变量名:JAVA_HOME
变量值:这里是刚刚你安装jdk的路径,如果是一步一步跟着安装的可以输入:
D:\Java\jdk1.8.0_131
6.点击path并进行编辑
7.点击新建
8.输入
%JAVA_HOME%\bin
9.点击确认
确保jdk是否安装并配置成功
1.win+r输入cmd打开命令窗口输入javac,如果出现以下提示表示安装配置成功
javac
java-version
8、TestNG-基本注释
在JUnit 3中指示测试方法的传统方法是在名称前加上test.这是一种非常有效的方法,用于将类中的某些方法标记为具有特殊含义,但命名不能很好地扩展(如果我们想为不同的框架添加更多标记,会怎样?)并且相当不灵活(如果我们怎么办?想要将其他参数传递给测试框架?).
注释在JDK 5中正式添加到Java语言中,TestNG可以选择使用注释来注释测试类.
以下是TestNG支持的注释列表:
9、使用注释的优点
以下是使用注释和减号的一些好处:
·TestNG识别通过查找注释,它感兴趣的方法.因此,方法名称不限于任何模式或格式。
·我们可以将其他参数传递给注释。
·注释是强类型的,因此编译器会立即标记任何错误。
·测试类不再需要扩展任何内容(如作为TestCase,用于JUnit 3)。
10、TestNG-执行程序案例演示
TestNgExecutionOrder.java案例代码如下:
package com.test;
import org.testng.annotations.*;
/**
*@author Fson
*@date 2024/1/26 14:06
*/
public class TestNgExecutionOrder{
//test case1
@Test
public void testCase1(){
System.out.println("in test case1");
}
//test case2
@Test
public void testCase2(){
System.out.println("in test case2");
}
//test beforeMethod
@BeforeMethod
public void testBeforeMethod(){
System.out.println("in beforeMethod每次执行Test方法前执行");
}
//test afterMethod
@AfterMethod
public void testAfterMethod(){
System.out.println("in afterMethod每次执行test方法后执行");
}
//test beforeClass
@BeforeClass
public void testBeforeClass(){
System.out.println("in beforeClass testcase1执行注释方法只会在调用当前类的第一个测试方法之前运行一次");
}
//test AfterClass
@AfterClass
public void testAferClass(){
System.out.println("in afterClass testcase1执行带注释的方法仅会运行一旦所有当前类的测试方法都已运行.");
}
//test BeforeTest
@BeforeTest
public void testBeforeTest(){
System.out.println("in BeforeTest(比如先登录)执行完suit执行BeforeTest带注释的方法将在任何属于该方法的测试方法之前运行里面的课程LT;试验>标签运行.");
}
//test AfterTest
@AfterTest
public void TestAfterTest(){
System.out.println("in afterTest(比如退出登录)带注释的方法将在属于<test>内的类的所有测试方法之后运行.标签已经运行.");
}
//test beforeSuite
@BeforeSuite
public void testBeforeSuite(){
System.out.println("in beforeSuite最早执行在此套件中的所有测试运行之前,带注释的方法只运行一次.");
}
//test@AfterSuite
@AfterSuite
public void testAfterSuite(){
System.out.println("in afterSuite最后执行在此套件中的所有测试运行后,带注释的方法只运行一次.");
}
}
代码中直接运行效果如下:
根据以上输出,执行程序如下:
·首先,beforeSuite()方法只执行一次.
·最后,afterSuite()方法只执行一次.
·甚至方法beforeTest(),beforeClass(),afterClass()和afterTest()方法也只执行一次.
·beforeMethod()方法为每个测试用例执行但在执行测试用例之前.
·afterMethod()方法在执行测试用例后执行每个测试用例.
·在beforeMethod()和afterMethod()之间,每个测试用例都会执行.
通过testng.xml配置文件运行程序
让我们在其中创建testng.xml文件/work/testng/src,执行测试用例。此文件以XML格式捕获您的整个测试。该文件使您可以轻松地在一个文件中描述所有测试套件及其参数,您可以将其签入代码存储库或通过电子邮件发送给同事。它还可以轻松提取测试的子集或拆分多个运行时配置(例如,testngdatabase.xml将仅运行测试您的数据库的测试)。
<?xml version="1.0"encoding="UTF-8"?>
<!--@beforeSuite-->
<suite name="tester">
<test name="case1">
<classes>
<class name="com.test.TestNgExecutionOrder"/>
</classes>
</test>
</suite>
右键--->run TestNgExecution.xml
创建testng.xml文件
运行TestNG测试脚本有两种方式:一种是直接通过IDE运行(例如使用eclipse中的“Run TestNG tests”),另一种是从命令行运行(通过使用xml配置文件)。当我们想执行某个包或者某个类中的一部分测试脚本的时候,使用xml配置文件是非常便利的。在xml配置文件里,不仅可以选择某些需要执行的测试脚本,还可以排除某些不需要运行的测试脚本。
创建xml文件很容易,只需要在其中填充一些内容。可以同时执行多个类中间的测试方法。
首先要声明一个suite的名字,用于描述将要运行的测试脚本集,可以根据自己需要任意命名,最终这个名字会在testng的测试报告中看到。
<!DOCTYPE suite SYSTEM"http://testng.org/testng-1.0.dtd">
<suite name="SuiteName"verbose="1">
<test name="TestName">
</test>
</suite>
如果选择的测试脚本是基于组的(使用了@Test(groups={"student"})这样的注解),那么接下来需要声明如何使用这些组:包含或者排除。如果使用了include标签标注某些组,那么在选择的测试脚本中,只有属于那些组的测试脚本会被运行。那些未被选中的测试脚本,或者被选中却不属于某些组的测试脚本都不会被运行。需要注意,一个测试脚本可以属于很多个组,只要有一个组被include标签标注,那么它就会被运行。
如果使用了exclude标签标注某些组,那么在选择的脚本中,只有不属于那些组的测试脚本会被运行。如果同时使用了include标签和exclude标签,那么拥有被include标注的组的那些脚本会被运行,拥有被exclude标注的脚本不会被运行。有一个例外是,一个组同时被include和exclude标注了,那么拥有这个组的脚本会被运行。include和exclude标签的使用方式如下:
<groups>
<run>
<include name="includedGroupName"/>
<exclude name="excludedGroupName"/>
</run>
</groups>
11、TestNG include
include在testng.xml中间指定需要执行的方法,如果只执行类中间的指定方法,需要通过testng.xml配置文件选中需要执行的方法,未包含的方法将不会执行.
IncludeTest.java案例代码
package com.test;
import org.testng.annotations.Test;
/**
*@author Fson
*@date 2024/2/20 14:20
*include在testng.xml中间指定需要执行的方法
*/
public class IncludeTest{
@Test
public void testRun(){
System.out.println("+++++++++++++++testRun+++++++++++");
}
@Test
public void testNotRun(){
System.out.println("+++++++++++testNotRun+++++++++++++++++++++++");
}
@Test
public void testTwoRun(){
System.out.println("++++++++testTwoRun++++++++++++++");
}
}
testng xml案例配置文件
<?xml version="1.0"encoding="UTF-8"?>
<!--@beforeSuite-->
<suite name="IncludeTestNG">
<test name="IncludeTest">
<classes>
<class name="com.test.IncludeTest"/>
<methods>
<include name="testRun"></include>
<include name="testTwoRun"></include>
</methods>
</classes>
</test>
</suite>
案例运行效果如下:
TestNG exclude
与include对立的是exclude,比如除去test01方法以外其他都运行,就用exclude,如果需要排除某个方法不执行,其他的方法都需要执行,就需要在testng.xml配置文件中间用该关键字。
ExcludeTest.java案例代码
package com.test;
import org.testng.annotations.Test;
/**
*@author Fson
*@date 2024/2/20 14:42
*exclude排除该方法之外所有的方法都执行比如该类中间有3个方法test01 test02 test03除了test01方法外其他的方法都执行
*就可以用该关键词
*/
public class ExcludeTest{
@Test
public void test01(){
System.out.println("test01()");
}
@Test
public void test02(){
System.out.println("test02()");
}
@Test
public void test03(){
System.out.println("test03()");
}
}
ExcludeTestNG.xml案例配置文件
<?xml version="1.0"encoding="UTF-8"?>
<!--@beforeSuite-->
<suite name="IncludeTestNG">
<test name="IncludeTest">
<classes>
<class name="com.test.ExcludeTest"/>
<methods>
<exclude name="test01"></exclude>
</methods>
</classes>
</test>
</suite>
案例运行效果:
12、TestNG自动化测试框架完整案例并输出报告
Testng_before_after_class.java案例代码
package com.test;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
*@author Fson
*@date 2024/1/16 14:06
*/
/*
注解说明
TestNG支持多种注解,可以进行各种组合,如下进行简单的说明
注解描述
@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将类或方法标记为测试的一部分,此标记若放在类上,则该类所有公共方法都将被作为测试方法
常用注解使用:
1.@BeforeClass@AfterClass在运行类之前或之后执行一次
@BeforeClass中可写入初始数据
@AfterClass清除数据
testng_before_after_class.java
public class Testng_before_after_class{
//运行testng_before_after_class类的时,会执行一次
@BeforeClass
public void BeforeClass(){
System.out.println("BeforeClass被运行登录");
}
@AfterTest
public void AfterClass(){
System.out.println("AfterClass被运行退出登录");
}
//运行每个测试方法进都会被执行到
@Test
public void abc(){
System.out.println("这里是abc");
}
@Test
public void abc1(){
System.out.println("这里是abc1");
}
@Test
public void abc2(){
System.out.println("这里是abc2");
}
@Test
public void exportBaogao(){
System.out.println("+++++++++++查看输出报告+++++");
}
}
testng_before.xml案例配置文件
<suite name="tester_before_suite1"parallel="methods"thread-count="2">
<test name="test_before">
<classes>
<class name="com.test.Testng_before_after_class"/>
</classes>
</test>
</suite>
案例运行效果:
生成TestNG自带的默认报告Use Default Reportters
设置报告输出路径run-->Edit configuration
html文件存放路径:
可以直接把该文件复制出来,浏览器打开开一下效果,TestNG自动生成测试报告如下:
最后:
1)关注+私信回复:“测试”,可以免费领取一份10G软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!
2)关注+私信回复:"入群" 就可以邀请你进入软件测试群学习交流~~
相关推荐
- 固识像系统曝光!类魂篝火点与多角色切换战斗有何亮点?
-
由Tipsworks开发,叠纸网络发行的全端游戏《万物契约》今日发布了第一支实机演示PV。火子哥一直以来还是比较关注这款游戏的,今天就带大家来看看这次的实机演示透露出什么新东西。开头在经过了一段预渲染...
- Docker 架构详解与核心概念实战图解:一文读懂容器的前世今生
-
不懂Docker架构,你只是“用容器的人”;理解了它的底层逻辑,才能成为真正的高手!在学习Docker之前,很多同学可能会陷入一个误区:“反正我用dockerrun就能跑起服务,架构这种...
- 新考纲-系统架构设计师(软考高级)一站式通关课程(25章完结)
-
新考纲-系统架构设计师(软考高级)一站式通关课程(25章完结)获课》jzit.top/5255/针对新旧考纲中新增的云原生和AI架构考点,考生可以采取以下应对策略:一、云原生考点应对策略深入理解云原生...
- 前后端分离的项目管理系统框架
-
技术栈:Thinkphp、Vue3、Typescript、Element-plus、pinia、Echarts等
- 掌握这6种软件架构,构建可维护、可扩展的系统不再难
-
说实话,大多数人不会一觉醒来突然决定:“今天,我要成为一名软件架构师!”通常的故事是这样的:一个小项目不断长大,代码像野兽一样在每个角落咆哮,而你终于意识到:“也许我应该早点考虑怎么架构这玩意儿。”软...
- Windows实时拓展架构-鸿道Intewell-win构型
-
鸿道Intewell操作系统软件采用开放式结构,具备较高的模块化程度,根据应用场景需要进行自由裁剪定制。实时扩展构型用于在多核处理器上使用硬件隔离技术,允许在同一台目标机上同时运行一个通用操作系统(G...
- 高手编写的自动化测试框架是如何管理用例?他们都会用到这个包。
-
本文是接口自动化测试框架系列篇的第四篇,主要介绍yaml包的使用。自动化测试的本质是将功能测试用例交给代码去执行,测试人员往往是在自动化框架添加对应的测试用例即可(也叫测试脚本)。而维护测试用例...
- 日资著名车企在自动化设备中采用的PLC程序标准框架
-
日资著名车企在自动化设备中采用的PLC程序标准框架,通常融合了先进的自动化控制理念与严谨的日式管理风格,注重程序的可靠性、可维护性和扩展性。以下是一个详细的PLC程序标准框架说明:一、程序框架的基本结...
- Robot Framework实现多平台自动化测试框架搭建
-
RobotFramework官方站:https://robotframework.org/一、robotframework安装pipinstallrobotframework二、robotf...
- chatgpt只用3秒钟就能写一个基于pytest的自动化框架
-
以下是一个使用pytest框架进行百度登录界面自动化测试的示例代码:1.安装pytest首先需要安装pytest,可以使用以下命令进行安装:pipinstallpytest2.编写测试用例在项目...
- API 自动化测试框架分享
-
前言接口自动化逐渐成为各大公司投入产出最高的测试技术。但是如何在版本迅速迭代过程中提高接口自动化的测试效率,仍然是大部分公司需要解决的问题。框架定位数据驱动设计模式,无需写测试代码脚本即可实现自动化等...
- 资深测试必备技能!TestNG自动化测试框架实战详解
-
1、TestNG导言在软件测试工作中,自动测试框架是不可或缺的,之前有Junit和Nunit框架,后有TestNG。TestNG不但吸取了Junit和Nunit框架的思想,而且创造了更强大的功能,它不...
- Java开发中的自动化测试框架:从零开始玩转测试工具
-
Java开发中的自动化测试框架:从零开始玩转测试工具在Java开发的世界里,自动化测试框架就像一位忠诚的助手,它不仅能帮你发现代码中的“隐形炸弹”,还能让你的程序更健壮、更可靠。那么,今天就让我们一起...
- 测试新手如何搭建自动化框架 ?手把手教会从0到1的搭建过程。
-
1.接口自动化测试自动化测试虽然是测试中比较热的一门技术,但凡一个测试岗位,你几乎都能看到有自动化测试的要求。但不得不说,最入门的自动化测试其实已经烂大街了,就像国产神车H6,随处可见。当然...
- 塞土族领导人:应在联合国决议规定框架内解决塞浦路斯问题
-
新华社尼科西亚10月31日电(记者张章)塞浦路斯媒体10月31日报道说,塞土耳其族领导人阿肯哲日前表示,塞浦路斯问题的解决应在联合国安理会决议规定的框架内进行。据报道,阿肯哲30日晚在土耳其伊斯坦布尔...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- bootstrap框架 (43)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)