testng.xml

一、TestNG.xml 是 TestNG 测试框架的核心配置文件,用于组织和控制测试执行。通过它,可以灵活地管理测试套件、测试类、方法,并设置各种执行参数

一个基本的 testng.xml文件通常以 ​​DOCTYPE 声明​​开头,并遵循特定的文档类型定义(DTD)
一个基本的 TestNG.xml 结构如下

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="SuiteName"><test name="TestName"><classes><class name="com.example.TestClass1"/><class name="com.example.TestClass2"/></classes></test>
</suite>

二、 下面详细解释其主要结构和用法。

2.1 < suite >

根标签,代表一个测试套件。可设置 name(套件名,必填)、parallel(并行模式,如 none/methods/tests/classes)、thread-count(线程数)等属性

name​​ (必填): 套件或测试的名称,会显示在报告中
​​verbose​​: 控制台输出的详细等级,0-10,数字越大越详细。
​​parallel​​: 指定并行模式,TestNG 7.0+版本默认parallel=“none”(即false)、methods、tests、classes、instances。​​必须​​与 thread-count配套使用。
​​thread-count​​: 并行执行时的最大线程数。
​​data-provider-thread-count​​: 并发时数据提供者的线程池大小。
​​preserve-order​​: 是否按 XML 中的顺序执行测试,默认为 true。

<suite name="MyTestSuite" verbose="1" parallel="tests" thread-count="3" data-provider-thread-count="10"><test name="RegressionTest1"><!-- 配置内容 --></test><test name="SmokeTest"><!-- 配置内容 --></test>
</suite>

2.2 < test>

定义测试模块,包含具体的测试类或包
name(必填): 测试的名称。
同样可以设置 parallel, thread-count等属性,其设置会覆盖 suite 级别的同名属性

<test name="Example"><classes><class name="com.example.TestClass1"><methods><include name="testMethod1"/> <!-- 只运行 testMethod1 --><exclude name="testMethod2"/> <!-- 排除 testMethod2 --></methods></class><class name="com.example.TestClass2"/> <!-- 运行 TestClass2 中的所有测试方法 --></classes><!-- 或者使用 packages --><packages><package name="com.example.integrationtests"/> <!-- 运行指定包及其子包下所有测试类 --></packages>
</test>

2.3< parameter>

​​用于定义参数,这些参数可以通过 @Parameters注解在测试类中获取。可以声明在 < suite>或 < test>级别,test 级别的参数会覆盖 suite 级别的同名参数。

<suite name="ParameterSuite"><parameter name="env" value="staging"/> <!-- suite级别参数 --><test name="ParameterTest"><parameter name="username" value="testuser"/> <!-- test级别参数 --><classes><class name="com.example.LoginTest"/></classes></test>
</suite>

在测试类中:

public class LoginTest {@Test@Parameters({"env", "username"})public void testLogin(String environment, String user) {// 使用参数进行测试System.out.println("Running in env: " + environment + " with user: " + user);}
}

2.4< groups>

用于定义要运行或排除的测试组
位于 < test>标签下。使用 < run>, < include>, < exclude>来精细控制哪些组的测试方法需要执行
还可以使用 < define>来组合已有的组,形成新的逻辑组

<test name="GroupTest"><groups><define name="all"> <!-- 定义一个新的组组合 --><include name="smoke"/><include name="regression"/></define><run><include name="all"/> <!-- 运行自定义的组组合 --><exclude name="broken"/> <!-- 排除标记为broken的测试 --></run><!-- 还可以定义组依赖 --><dependencies><group name="final-test" depends-on="smoke regression"/></dependencies></groups><classes><class name="com.example.*"/> <!-- 运行指定包下所有类的测试 --></classes>
</test>

2.5< classes>

< classes>用于指定具体的类,还可以在类下通过 < methods>元素包含或排除特定方法。

<suite name="ParallelSuite" parallel="classes" thread-count="5">
<!-- parallel="methods": 所有测试方法在不同线程并行执行 -->
<!-- parallel="tests": 不同<test>下的方法在不同线程执行 -->
<!-- parallel="classes": 不同<class>下的方法在不同线程执行 -->
<!-- parallel="instances": 相同实例的方法在不同线程执行 --><test name="ParallelTest"><classes><class name="com.example.TestClass1"/><class name="com.example.TestClass2"/></classes></test>
</suite>

2.6< packages>

< packages>用于指定整个包,TestNG会自动扫描该包下所有带有TestNG注解的类。

<test name="Example"><classes><class name="com.example.TestClass1"><methods><include name="testMethod1"/> <!-- 只运行 testMethod1 --><exclude name="testMethod2"/> <!-- 排除 testMethod2 --></methods></class><class name="com.example.TestClass2"/> <!-- 运行 TestClass2 中的所有测试方法 --></classes><!-- 或者使用 packages --><packages><package name="com.example.integrationtests"/> <!-- 运行指定包及其子包下所有测试类 --></packages>
</test>

2.7< methods>

​​在类中指定要包含或排除的具体方法

2.8< listeners>

用于配置监听器,这些监听器可以监听测试执行过程中的各种事件(如测试开始、结束、失败等),用于扩展测试行为,如生成自定义报告

<suite name="ListenerSuite"><listeners><listener class-name="com.example.myutil.MyTestListener"/> <!-- 自定义监听器 --></listeners><test name="TestWithListener"><classes>...</classes></test>
</suite>

三、这是一个综合了多种元素的 testng.xml示例:

3.1

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="ComprehensiveSuite" parallel="tests" thread-count="3" verbose="2"><parameter name="env" value="staging" /> <!-- Suite level parameter --><test name="SmokeTest" preserve-order="true"><parameter name="browser" value="chrome" /> <!-- Test level parameter, overrides suite level if same name --><groups><run><include name="smoke"/><exclude name="broken"/></run></groups><classes><class name="com.example.tests.LoginTest"><methods><include name="testValidLogin"/><exclude name="testInvalidLogin"/></methods></class><class name="com.example.tests.HomePageTest"/></classes></test><test name="RegressionTest"><packages><package name="com.example.regression.*"/></packages></test><listeners><listener class-name="com.example.listeners.MyTestListener"/></listeners>
</suite>

3.2

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="ECommerce_Regression_Suite" verbose="2" parallel="tests" thread-count="3" data-provider-thread-count="2"><!-- 全局参数 --><parameter name="env" value="staging"/><parameter name="browser" value="chrome"/><parameter name="timeout" value="30"/><!-- 监听器配置 --><listeners><listener class-name="com.qa.listeners.ExtentReportListener"/><listener class-name="com.qa.listeners.TestListener"/></listeners><!-- 冒烟测试套件 --><test name="Smoke_Test" preserve-order="true"><groups><run><include name="smoke"/><exclude name="broken"/> <!-- 排除标记为broken的测试 --></run></groups><classes><class name="com.qa.tests.LoginTest"/><class name="com.qa.tests.SearchTest"/><class name="com.qa.tests.CartTest"/></classes></test><!-- 登录模块测试 - 并行执行 --><test name="Login_Module_Tests" parallel="methods" thread-count="2"><parameter name="browser" value="firefox"/> <!-- 覆盖全局参数 --><classes><class name="com.qa.tests.LoginTest"><methods><include name="testValidLogin"/><include name="testInvalidLogin"/><exclude name="testExpiredPassword"/> <!-- 排除特定方法 --></methods></class><class name="com.qa.tests.RegistrationTest"/></classes></test><!-- 支付流程测试 - 按包运行 --><test name="Payment_Flow_Tests"><groups><run><include name="payment"/><include name="p1"/> <!-- 包含多个组 --></run></groups><packages><package name="com.qa.tests.payment.*"/> <!-- 运行包内所有测试类 --></packages></test><!-- API测试套件 --><test name="API_Tests" enabled="true"> <!-- enabled可控制是否执行此test --><parameter name="base_url" value="https://api.ecommerce.com/v1"/><classes><class name="com.qa.api.tests.UserAPITest"/><class name="com.qa.api.tests.ProductAPITest"/><class name="com.qa.api.tests.OrderAPITest"/></classes></test></suite>

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

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

相关文章

上架商品合规流程有多条,有的长,有的短,有的需要审核,校验商品的合规性

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

[嵌入式][stm32h743iit6] 野火繁星stm32h743iit6开发板使用学习记录

[嵌入式][stm32h743iit6] 野火繁星stm32h743iit6开发板使用学习记录野火繁星STM32H743IIT6开发板使用学习速记问题描述尝试解决野火繁星STM32H743IIT6开发板使用学习速记 问题描述 在使用该开发板学习stm32hal库pwm开发时, 偶遇代码无法驱动sg90舵机进行旋转, 无论占空比设置…

Android 热点开发的相关api总结

Android 热点 一、前言热点开发属于系统级功能开发&#xff0c;涉及的核心 API 多为系统签名权限保护&#xff08;如android.permission.TETHER_PRIVILEGED&#xff09;&#xff0c;通常仅系统应用&#xff08;如 Settings&#xff09;可正常调用。 实际开发中&#xff0c;除基…

Claude Code 使用指南

Claude Code 使用指南 在 AI 辅助编程领域&#xff0c;我们正经历从简单的代码补全到能够自主执行复杂任务的“智能体”&#xff08;Agent&#xff09;的深刻变革。Claude Code 正是这一变革的杰出代表。它并非一个简单的问答机器人&#xff0c;而是一个设计精密的编程协作系统…

Spring Boot常用注解-详细解析+示例

1. SpringBootApplication详细解析&#xff1a;组合注解&#xff0c;包含Configuration&#xff08;标记配置类&#xff09;、EnableAutoConfiguration&#xff08;开启自动配置&#xff09;、ComponentScan&#xff08;组件扫描&#xff09;。启动类标注后&#xff0c;Spring …

基于原神游戏物品系统小demo制作思路

概述 本文介绍了一个基于C的游戏物品与角色管理系统&#xff0c;该系统实现了游戏中的物品分类、角色属性管理、队伍组建以及背包物品使用等功能。该系统采用面向对象的设计原则&#xff0c;通过继承和多态实现了可扩展的物品效果系统。 系统架构 1. 物品类型系统 系统定义了三…

Grounded-Segment-Anything 环境配置

Grounded-Segment-Anything 环境配置Grounded-Segment-Anything 介绍环境配置Install osx&#xff08;非必须&#xff09;:Install RAM & Tag2Text:报错 module ‘pkgutil‘ has no attribute ‘ImpImporter‘. Did you mean: ‘zipimporter‘?运行输出分割文本提示检测远…

ZYNQ 定时器

一、ZYNQ定时器简介 每个Cortex-A9处理器都有自己的专用32位定时器和32位看门狗定时器。两个处理器共享一个全局64位定时器。这些计时器的时钟始终为CPU频率&#xff08;CPU_3x2x&#xff09;的1/2。在系统级&#xff0c;有一个24位看门狗定时器和两个16位三重定时器/计数器。系…

Java8 Comparator接口 和 List Steam 排序使用案例

在Java中&#xff0c;Comparator接口主要用于实现自定义排序逻辑&#xff0c;适用于未实现Comparable接口或需要覆盖默认比较规则的场景。以下是核心使用方法和注意事项&#xff1a;一、基础用法‌匿名内部类实现‌传统方式通过匿名内部类重写compare()方法&#xff0c;例如对整…

word2vec模型案例

代码实现&#xff1a;import torch.optim as optim from tqdm import tqdm, trange import numpy as np import torch from torch import nn import torch.nn.functional as FCONTEXT_SIZE 2raw_text """We are about to study the idea of a computational p…

< 自用文 OS 有关 > (续)发现正在被攻击 后的自救 Fail2ban + IPset + UFW 工作流程详解

继上编&#xff1a;&#xff1c; 自用文 主机 USC 记录&#xff1a;&#xff1e; 发现正在被攻击 后的自救-CSDN博客 环境&#xff1a; 改进&#xff1a; 以下是把代码&#xff0c;懒得写&#xff0c;扔给了 AI &#xff0c;让它出的&#xff1a; Fail2ban IPset UFW 工作…

Linux —— 虚拟进程地址空间

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录虚…

简单聊一聊js

JavaScript 是一种高级的、解释型的编程语言。它是现代 Web 开发的三大核心基石之一&#xff0c;与 HTML 和 CSS 并列。​HTML​&#xff1a;负责网页的结构和内容​&#xff08;如标题、段落、图片&#xff09;。​CSS​&#xff1a;负责网页的样式和布局​&#xff08;如颜色…

造粒机cad+设计说明书

摘要 随着现代化工业的快速发展&#xff0c;生产出大量的固体废弃物。这些废弃物对环境造成了很大的污染&#xff0c;因此需要采取有效的措施进行处理。机械强压式造粒机就是一种非常有效的处理工具&#xff0c;它可以将废渣、废料、饲料和化肥等材料通过机械强力挤压&#xff…

第五课 C#语言基本元素概览,初始类型,变量与方法,算法简介

熟悉C#语言要求&#xff1a;对构成C#语言的基本元素&#xff0c;随便拿出一个你都认识&#xff0c;对于常见基本元素&#xff0c;都能正确使用它 精通C#语言要求&#xff1a;对于构成C#语言的基本元素&#xff0c;随便拿出一个都会使用&#xff0c;对于常用基本元素&#xff0…

LLM学习:大模型基础——视觉大模型以及autodl使用

1、常见的VLM 在大模型中,VLM 是视觉语言模型(Vision-Language Model)的缩写,是一种多模态、生成式 AI 模型,能够理解和处理视频、图像和文本。 VLM 通过将大语言模型(LLM)与视觉编码器相结合构建而成,使 LLM 具有 “看” 的能力,从而可以处理并提供对提示中的…

Vue—路由配置中设置了meta.title,但页面标题仍然显示为“Vite App“?【让我来看看~】

路由配置中明明设置了meta.title&#xff0c;但是页面标题仍然显示为"Vite App"&#xff1f;这是因为仅仅在路由配置中设置meta.title是不够的&#xff0c;还需要在路由守卫中动态设置页面标题。需要做以下几件事来正确设置页面标题&#xff1a;1.首先更新HTML文件的…

【机器学习】综合实训(二)

项目五 电影评分预测【教学内容】使用 MovieLens 数据集&#xff0c;训练一个模型预测用户对电影的评分。主要有以下几个知识点&#xff1a;&#xff08;1&#xff09;数据加载与探索性分析&#xff08;EDA&#xff09;。&#xff08;2&#xff09;处理稀疏数据&#xff08;如用…

STM32 UART + DMA + 空闲中断使用中的帧错误(FE)问题及解决方案

STM32 UART + DMA + IDLE中断使用中的帧错误(FE)问题及解决方案 在我调试STM32H7串口空闲中断DMA接受时遇到了一个bug,这个现象发生在系统刚上电时,有个串口由于帧错误FE挂起了中断,之后在HAL_UART_IRQHandler这个全局中断处理函数结束后,所有的中断使能标志位都被清除了,经过…

TDengine 选择函数 BOTTOM() 用户手册

BOTTOM() 函数用户手册 函数定义 BOTTOM(expr, k)功能说明 BOTTOM() 函数统计表/超级表中某列的值最小 k 个非 NULL 值。如果多条数据取值一样&#xff0c;全部取用又会超出 k 条限制时&#xff0c;系统会从相同值中随机选取符合要求的数量返回。 返回值 数据类型: 同应用…