资深测试必备技能!TestNG自动化测试框架实战详解

1、TestNG导言

在软件测试工作中,自动测试框架是不可或缺的,之前有Junit和Nunit框架,后有TestNG。TestNG不但吸取了Junit和Nunit框架的思想,而且创造了更强大的功能,它不但是单元测试框架,同时也是集成自动化测试框架。TestNG突破了以前一些测试框架的限制,成为用途最广泛的自动和单元测试框架之一,大家由浅入深地一起认识TestNG的强大之处,实现从初级测试工程师到资深测试工程师的进阶!

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.配置环境变量(注:这里选择配置系统变量而不是用户变量)

添加图片注释,不超过 140 字(可选)

5.以此输入变量名和变量值后点击确认

变量名:JAVA_HOME

变量值:这里是刚刚你安装jdk的路径,如果是一步一步跟着安装的可以输入:

D:\Java\jdk1.8.0_131

添加图片注释,不超过 140 字(可选)

6.点击path并进行编辑

添加图片注释,不超过 140 字(可选)

7.点击新建

添加图片注释,不超过 140 字(可选)

8.输入

%JAVA_HOME%\bin

添加图片注释,不超过 140 字(可选)

9.点击确认

添加图片注释,不超过 140 字(可选)

确保jdk是否安装并配置成功

1.win+r输入cmd打开命令窗口输入javac,如果出现以下提示表示安装配置成功

javac

java-version

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

8、TestNG-基本注释

在JUnit 3中指示测试方法的传统方法是在名称前加上test.这是一种非常有效的方法,用于将类中的某些方法标记为具有特殊含义,但命名不能很好地扩展(如果我们想为不同的框架添加更多标记,会怎样?)并且相当不灵活(如果我们怎么办?想要将其他参数传递给测试框架?).

注释在JDK 5中正式添加到Java语言中,TestNG可以选择使用注释来注释测试类.

以下是TestNG支持的注释列表:

添加图片注释,不超过 140 字(可选)

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自动生成测试报告如下:

文末了:

可以到我的个人号:atstudy-js,可以免费领取一份10G软件测试工程师面试宝典文档资料。同时我邀请你进入我们的软件测试学习交流平台,大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,了解测试行业的最新趋势,助你快速进阶Python自动化测试/测试开发,稳住当前职位同时走向高薪之路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx反向代理配置

一、介绍 Nginx 的反向代理功能在现代网络架构中扮演着至关重要的角色。首先&#xff0c;它充当了客户端与后端服务器之间的中介。当客户端发送请求时&#xff0c;这些请求先到达 Nginx 服务器&#xff0c;Nginx 会根据预先设定的规则和配置&#xff0c;将请求准确地转发到相应…

Linux下安装mysql8.0(以rpm包安装)

前言&#xff1a;原文在我的博客网站中&#xff0c;持续更新数通、系统方面的知识&#xff0c;欢迎来访&#xff01; Linux下安装mysql8.0&#xff08;以rpm包安装&#xff09;https://myweb.myskillstree.cn/125.html 目录 1、查操作系统信息 2、下载mysql 8.0.34的rpm包 …

【Anaconda 3 】Jupyter Notebook 的安装配置及使用

Jupyter Notebook 的安装配置及使用 一、引言 Jupyter Notebook 是一种交互式笔记本&#xff0c;它允许用户将代码、注释、方程式、可视化内容等整合到一个文档中&#xff0c;并支持多种编程语言&#xff0c;如 Python、R、Julia 等。它在数据科学、机器学习和教育领域中得到…

Goland GC

Goland GC 引用Go 1.3 mark and sweep 标记法Go 1.5 三色标记法屏障机制插入屏障删除写屏障总结 Go 1.8 混合写屏障(hybrid write barrier)机制总结 引用 https://zhuanlan.zhihu.com/p/675127867 Garbage Collection&#xff0c;缩写为GC&#xff0c;一种内存管理回收的机制…

条件平差——以水准网平差为例 (python详细过程版)

目录 一、原理概述二、案例分析三、代码实现四、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、原理概述 条件平差的函数模型和随机模型为: A V + W = 0

大模型时代,程序员如何卷?

最近在看电影《碟中谍7》&#xff0c;该片讲述了特工伊森亨特尝试与一个被称为智体的全能人工智能作战&#xff0c;其可以即时访问任何在线网络&#xff0c;他和他的团队成员试图找回控制人工智能智体所必需的两部分钥匙并将其摧毁的故事。 在剧中&#xff0c;智体是一个虚拟反…

文旅行业| 某景区导游培养和管理项目成功案例纪实

——整合导游资源并进行统一管理&#xff0c;构建完善的培养与管理机制&#xff0c;发挥景区导游价值 【客户行业】文旅行业&#xff1b;景区&#xff1b;文旅企业 【问题类型】人才培养&#xff1b;人员管理 【客户背景】 南方某5A级景区&#xff0c;作为国内极具代表性和特…

【python】python中的argparse模块,教你如何自定义命令行参数

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【Pip】pip 安装第三方包异常:[SSL:CERTIFICATE_VERIFY_FAILED]解决方案

pip 安装第三方包异常:[SSL:CERTIFICATE_VERIFY_FAILED] 大家好 我是寸铁&#x1f44a; 总结了一篇pip 安装第三方包异常:[SSL:CERTIFICATE_VERIFY_FAILED]✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 报错 今天在安装第三方包时报错如下: 解决方案 本质上是需要指定信任的镜像…

开启异步线程的方法

1&#xff0c;开启异步线程&#xff0c;在启动类上加注解&#xff1a; 2&#xff0c;自定义线程池&#xff1a; Configuration public class PromotionConfig {Beanpublic Executor generateExchangeCodeExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExec…

搜维尔科技:【案例分享】Xsens用于工业制造艺术创新设计平台

用户名称&#xff1a;北京理工大学 主要产品&#xff1a;Xsens MVN Awinda惯性动作捕捉系统 在设计与艺术学院的某实验室内&#xff0c;通过Xsens惯性动作捕捉&#xff0c;对人体动作进行捕捉&#xff0c;得到人体三维运动数据&#xff0c;将捕到的数据用于后续应用研究。…

小心电子合同这个坑:手写签名图片

一、引言 在数字化浪潮的推动下&#xff0c;电子合同因其便捷性和高效性受到广泛应用。然而&#xff0c;在使用电子合同的过程中&#xff0c;一个看似简单的签名方式——手写签名图片&#xff0c;却可能带来意想不到的法律风险。本文将详细解析这一陷阱&#xff0c;并为大家提…

PMP证书好考吗?

PMP新考纲还颠覆了自己旧有的五大知识领域&#xff0c;将原来的五大过程组整合成新领域中过程的一部分&#xff0c;提出了新的商业环境、过程、人员三大知识领域。 最关键的是&#xff0c;在新考纲中明确写到&#xff1a; 重要注意事项。通过工作任务分析开展的研究证实&…

PX4FMU和PX4IO最底层启动过程分析(上)

PX4FMU和PX4IO最底层启动过程分析&#xff08;上&#xff09; 主处理器和协处理器的固件烧写和运行过程 PX4FMU&#xff1a;各种传感器数据读取、姿态解算、PWM控制量的计算、与PX4IO通信。负责飞控最主要的工作。 PX4IO&#xff08;STM32F103&#xff09;&#xff1a;为PIXHA…

大模型面试常考知识点2

文章目录 1. LLM推理attention优化技术KV CachePageAttention显存优化MHA\GQA\MQA优化技术FlashAttention优化技术稀疏Attention1. Atrous Self Attention2. Local Self Attention3. Sparse Self Attention 2. LLM数据处理关键去重多样性保证构造扩充数据充分利用数据 参考文献…

【电路笔记】-无源高通滤波器

无源高通滤波器 文章目录 无源高通滤波器1、概述2、一阶高通滤波器的频率响应3、高通滤波器示例4、二阶高通滤波器5、RC 差异化因素高通滤波器与低通滤波器电路完全相反,因为这两个组件已互换,滤波器输出信号现在从电阻器两端获取。 1、概述 由于低通滤波器只允许低于其截止…

Shell编程之循环语句

目录 1.for循环语句&#xff08;遍历循环&#xff09; 1.1 for语句的结构 1.2 for语句的执行流程 1.3 for语句应用示例 1.4 echo命令参数 2.while循环语句 2.1 while语句应用示例 2.2 通过while循环读取行内容 3.until 4.双重循环 4.1 双重循环案例 4.2 循环的退出 …

从零开始详解OpenCV条形码区域分割

前言 在识别二维码之前&#xff0c;首先要划分出二维码的区域&#xff0c;在本篇文章中将从零开始实现二维码分割的功能&#xff0c;并详细介绍用到的方法。 我们需要处理的图像如下&#xff1a; 完整代码 首先我们先放出完整代码&#xff0c;然后根据整个分割流程介绍用到…

基于fastapi sqladmin开发,实现可动态配置admin

1. 功能介绍&#xff1a; 1. 支持动态创建表、类&#xff0c;属性&#xff0c;唯一约束、外键&#xff0c;索引&#xff0c;关系&#xff0c;无需写代码&#xff0c;快速创建业务对象&#xff1b; 2. 支持配置admin显示参数&#xff0c;支持sqladmin原生参数设置&#xff0c;动…

Istio 使用 Apache SkyWalking 进行服务链路追踪、链路监控告警

一、Istio 使用 Apache SkyWalking 链路追踪和告警 SkyWalking是一个开源的观测平台&#xff0c;用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据&#xff0c;SkyWalking 提供了一种简便的方式来清晰地观测分布式系统&#xff0c;甚至可以观测横跨不同云的系统…