团体在 TestNG

⚡ 智能摘要

团体在 TestNG 允许您使用逻辑标签标记测试方法,然后通过 XML 套件包含或排除这些标签。这种方法简化了冒烟测试、回归测试和依赖驱动测试,而无需重写代码。 Java 码。

  • 🏷️ 注解语法: 绝大部分储备使用 @Test(groups = {"smoke","regression"}) 使用一个或多个逻辑组名称标记任何方法。
  • 📜 XML 控件:<groups><run><include><exclude> testng.xml 中的标签决定了实际执行哪些带标签的方法。
  • 🔗 依赖关系:dependsOnGroups 属性强制排序,以便先决条件组始终在依赖测试开始之前完成。
  • 🤖 AI 选择: AI 测试影响工具会将代码更改映射到相关组,以便每次提交时只运行受影响的测试套件。
  • 🧪 TestNG 7.x: 现代版本保持了组与并行执行、监听器和 Maven Surefire 管道的完全兼容性。

团体在 TestNG

TestNG 是一个测试框架,涵盖单元测试、功能测试、端到端测试、UI测试和集成测试。 Java 项目。

你可以通过创建 XML 套件并通过 Maven 触发来运行单个包或多个包(包将相关类封装在定义的目录布局中)。

TestNG 带示例的群组

您可以使用组 TestNG 什么时候:

  • 你不希望仅仅根据功能领域将测试方法分散到多个类中,而且
  • 你想跳过(不执行)选定的测试用例,就好像它们不存在于代码库中一样。
  • 为了实现这两个目标,你需要将方法标记到逻辑组中。 TestNG 然后遵循 XML 套件中声明的“包含”和“排除”过滤器。

下面的代码片段显示了测试方法中使用的分组标记语法。

@测试 (团体 = { “联结”, “强关系” })

这里使用了两个组名,分别是 bondingstrong_ties这些是逻辑标签,您可以根据项目需要重命名。

<groups> 标签标志着 XML 套件中分组过滤器的开始。

然后,您可以自定义 XML,从标记的类中选择所需的组。以下示例展示了组声明语法。

<团体>
<运行>
<包括 姓名=“联结” />
</运行>
</团体>

假设一个类包含 10 个测试方法。

这些方法中:

  • 6 种方法携带 bonding 组,以及
  • 4 种方法携带 strong_ties 组。

接下来,您需要设置 Maven 和 Java 路径并使用 Eclipse IDE 将通过 XML 文件演示组的使用方法 Java基于 Maven 的项目。

创建 XML 用于 TestNG 带有标签

  • Maven 框架中的 XML(可扩展标记语言)文件存储一个或多个测试的配置,这些测试在框架内声明。 标签。
  • 每个测试条目都包装在一个 标签,可容纳一个或多个 TestNG 类。
  • A Java 包含一个或多个 @测试 对其方法的注解被视为 TestNG 类。

多个标签按顺序出现,以构建一个可用的 testng.xml 文件,即, , 和。

  • 标签保存了套件级别名称。 TestNG 执行摘要报告。
  • <test name=”Guru 99 烟雾测试演示”> 标签包含逻辑测试名称;报告使用它来统计通过、失败和跳过次数,以及总执行时间和组元数据。
  • 标签指向测试类,其中 com.group.guru99 是包裹和 TC_Class1 是类名。

<!DOCTYPE 套房 系统 “http://testng.org/testng-1.0.dtd”>
<套房 姓名=“套房”>
<实验 姓名=“Guru 99 烟雾测试演示”>
<团体>
<运行>
<包括 姓名=“强关系” />
</运行>
</团体>
<>
< 姓名=“com.group.guru99.TC_Class1” />
</>
</实验>
</套房>

在接下来的章节视频演示中会用到此 XML 配置。

测试 XML 中的“排除”或“包含”

如果分组机制对于小型过滤器来说显得过于繁琐,testng.xml 套件还允许您按名称排除或包含单个测试方法。

排除标签:排除标签的语法排除 姓名=“${TEST_CASE_NAME}” />
包含标签include 标签的语法包括 姓名=“${TEST_CASE_NAME}” />

注意: 您可以在一次运行中包含或排除多个测试用例,同样的语法也适用于分组筛选器。

使用 dependsOnGroups 实现有序执行

除了简单的包含之外, TestNG 让一个群体依赖于另一个群体,使用 dependsOnGroups 属性。运行器确保父组中的每个方法在任何依赖方法启动之前都已完成,从而保证前提条件的可靠性。

  • 先登录,再进行交易: 使用标签标记登录方法 group = "auth"以及标签转移测试 dependsOnGroups = {"auth"}只有在登录成功后才会运行转账测试。
  • 失败时跳过: 如果父组中的某个方法失败, TestNG 将依赖方法标记为已跳过,而不是直接判定其失败,这样可以保证报告的真实性。
  • 与 alwaysRun 结合使用: 清理方法应设置 alwaysRun = true 即使上游组发生故障,拆卸过程仍然会运行。

这种模式在端到端套件中很常见,其中 API 设置必须在 UI 断言启动之前完成。

运行 TestNG 分组、包含、排除代码(视频演示)

以下是详细的步骤说明 Java 代码和驱动该代码的 XML 套件 分组、排除和包含 行为。

测试场景: 启动 Guru99 演示银行网站,验证登录页面上的几个元素,输入凭据,登录后在仪表板上再次验证几个项目。

运行 TestNG 分组、包含、排除 Code

注意: 每个步骤都存在于自己的方法中,但在运行时,顺序取决于 XML 套件中的条目。

  • 方法1: 初始化浏览器并启动 URL (tc01LaunchURL()).
  • 方法2: 核对登录页面标题(tc02VerifyLaunchPage()).
  • 方法3: 在登录表单中输入用户名和密码(tc03EnterCredentials()).
  • 方法4: 验证用户仪表板上是否存在管理员 ID(tc04VerifyLoggedInPage()).
  • 方法5: 验证用户仪表板上的其他链接(tc05VerifyHyperlinks()).

Code 针对以下场景:

com.group.guru99;

进口 java.util.concurrent.TimeUnit;

进口 org.openqa.selenium.By;
进口 org.openqa.selenium.WebDriver;
进口 org.openqa.selenium.firefox。Firefox司机;
进口 org.testng.Assert;
进口 org.testng.annotations.Test;

公开课 TC_Class1 {
公共静态决赛 网络驱动程序 webDriver = Firefox驱动器();

启动页面标题 = “//h3[text()='Guru99银行']”;
最后 用户名元素 = “//input[@name='uid']”,密码元素 = “//input[@name='password']”,
signIn_element = “//input[@name='btnLogin']”;
最后 用户名值 = “mngr28642”,密码值 = “ydAnate”;
最后 经理ID = “//td[contains(text(),'经理 ID')]”;
最后 新客户 = “//a[@href='addcustomerpage.php']”,资金转移 = “//a[@href='FundTransInput.php']”;

/** 此测试用例初始化 webDriver */
@测试(团体 = { “联结”, “强关系” })
公共无效 tc01发射URL(){
webDriver.manage().window().maximize();
webDriver.manage().timeouts().implicitlyWait(20, 时间单位. 秒);
webDriver.get(“https://www.demo.guru99.com/V4/”);
}

/** 检查登录页面上是否存在标题 */
@测试(团体 = { “联结” })
公共无效 tc02VerifyLaunchPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
首页标题未显示);
系统.out.println(“首页标题已显示”);
}

/** 输入用户名、密码,然后点击登录 */
@测试(团体 = { “联结”, “强关系” })
公共无效 tc03EnterCredentials() {
webDriver.findElement(By.xpath(userName_element)).sendKeys(userName_value);
webDriver.findElement(By.xpath(password_element)).sendKeys(password_value);
webDriver.findElement(By.xpath(signIn_element)).click();
}

/** 验证仪表盘上的经理 ID */
@测试(团体 = { “强关系” })
公共无效 tc04VerifyLoggedInPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
“未显示管理员 ID 标签”);
系统.out.println(“显示经理 ID 标签”);
}

/** 检查控制面板上的新客户链接和转账链接 */
@测试(团体 = { “联结” })
公共无效 tc05VerifyHyperlinks() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
“新客户超链接未显示”);
系统.out.println(“显示新客户超链接”);

Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
“资金转账超链接未显示”);
系统.out.println(“显示资金转账超链接”);
}
}

请注意:演示银行凭证的有效期约为 20 天,因此在此期限过后,本地运行可能会显示无效凭证错误。

代码说明:

五种测试方法,每种方法对应一个动作,每种方法都包含一个 groups 的属性 @Test 注解。

这两个逻辑分组标签是 strong_tiesbonding.

  • 第一种方法和第三种方法都包含两者 bondingstrong_ties因此,只要套件中包含任一组,它们就会运行。这是共享的常见模式。 测试用例 步骤。
  • 第二种方法仅标记为 bonding所以它只在以下情况下运行: bonding 该组包含在内。
  • 第四种方法仅标记为 strong_ties因此,它仅在包含该组时运行。
  • 第五个方法仅标记为 bonding所以它只在以下情况下运行: bonding 该组包含在内。

以下是四种执行方案:

情景1: 无论分组如何,运行所有测试方法。移除 <groups> 从正在运行的 XML 中提取代码块。

情景2: 仅运行与所选组关联的方法,即 strong_ties or bonding请参考以下视频。

  • 视频的第一部分, <groups> 该代码块被注释掉了,因此每个测试方法都会运行。
  • 在第二部分中,恢复了分组过滤器,并且只运行匹配方法。

情景3: 应用排除筛选器跳过选定的测试用例。请参考视频。

  • 演示版不包含以下内容。 tc02 按运行 XML 中的名称,结果报告确认排除的方法不会运行。

情景4: 应用包含筛选器,仅运行 tc01LaunchURL, tc03EnterCredentialstc05VerifyHyperlinks请参考视频。

本次运行中,仅执行包含过滤器中列出的方法,完全按照配置执行。

请从以下链接下载示例项目。

下载以上 Code

结语

团体在 TestNG 为大型项目构建结构 Selenium 并通过用声明式 XML 过滤器替换一次性类拆分来创建单元套件。

用以下标签标记你的方法: @Test(groups = {...}),然后使用 <include>, <exclude>dependsOnGroups 从同一个 Maven 项目驱动烟雾测试、回归测试和端到端测试。 TestNG 7.x。

常见问题

组是通过以下方式附加到测试方法的逻辑标签: groups 归因于 @Test然后,XML 套件使用包含和排除过滤器选择组,因此您可以在运行时决定执行哪些标记的方法。

<groups><run><include name="..."> 为运行标记白名单组,并且 <exclude name="..."> 阻止它们。 TestNG 排除项在包含项之后应用,因此即使排除的组也列在包含项中,也会始终跳过该组。

dependsOnGroups 归因于 @Test 军队 TestNG 在依赖方法启动之前,运行所列组中的每个方法。如果任何先决方法失败, TestNG 将依赖方法标记为已跳过,而不是失败。

是。 该 groups 该属性接受一个数组,因此 @Test(groups = {"smoke", "regression"}) 将同一种方法同时应用于两组。 TestNG 只要任一组包含在套件中,就会运行该方法,从而保持共享步骤的 DRY(避免重复)。

TestNG 7.x 是维护版本系列,其发布版本隶属于 org.testng:testng Maven 协调机制。它使分组、并行执行和监听器与现代 Maven 完全兼容。 Selenium 4 和 JDK 17 项目。

AI 测试影响工具会分析代码差异,然后将更改的类映射到涵盖它们的组。该流程仅对每个拉取请求运行已标记的组,从而缩短反馈时间并保持……ping 正在测试的风险路径。

是的。人工智能聚类算法会读取历史故障日志,标记不稳定的测试,并提出一个标记为稳定的子集。 regression工程师批准了这份清单,然后…… TestNG 该团队每晚都会进行巡视,这样既能保证套房的严密性,又不会造成任何影响。

总结一下这篇文章: