团体在 TestNG

TestNG 是一个测试框架,涵盖单元测试、功能测试、端到端测试、UI测试和集成测试。 Java 项目。
你可以通过创建 XML 套件并通过 Maven 触发来运行单个包或多个包(包将相关类封装在定义的目录布局中)。
TestNG 带示例的群组
您可以使用组 TestNG 什么时候:
- 你不希望仅仅根据功能领域将测试方法分散到多个类中,而且
- 你想跳过(不执行)选定的测试用例,就好像它们不存在于代码库中一样。
- 为了实现这两个目标,你需要将方法标记到逻辑组中。 TestNG 然后遵循 XML 套件中声明的“包含”和“排除”过滤器。
下面的代码片段显示了测试方法中使用的分组标记语法。
这里使用了两个组名,分别是 bonding 和 strong_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 套件还允许您按名称排除或包含单个测试方法。
包含标签include 标签的语法包括 姓名=“${TEST_CASE_NAME}” />
注意: 您可以在一次运行中包含或排除多个测试用例,同样的语法也适用于分组筛选器。
使用 dependsOnGroups 实现有序执行
除了简单的包含之外, TestNG 让一个群体依赖于另一个群体,使用 dependsOnGroups 属性。运行器确保父组中的每个方法在任何依赖方法启动之前都已完成,从而保证前提条件的可靠性。
- 先登录,再进行交易: 使用标签标记登录方法
group = "auth"以及标签转移测试dependsOnGroups = {"auth"}只有在登录成功后才会运行转账测试。 - 失败时跳过: 如果父组中的某个方法失败, TestNG 将依赖方法标记为已跳过,而不是直接判定其失败,这样可以保证报告的真实性。
- 与 alwaysRun 结合使用: 清理方法应设置
alwaysRun = true即使上游组发生故障,拆卸过程仍然会运行。
这种模式在端到端套件中很常见,其中 API 设置必须在 UI 断言启动之前完成。
运行 TestNG 分组、包含、排除代码(视频演示)
以下是详细的步骤说明 Java 代码和驱动该代码的 XML 套件 分组、排除和包含 行为。
测试场景: 启动 Guru99 演示银行网站,验证登录页面上的几个元素,输入凭据,登录后在仪表板上再次验证几个项目。
注意: 每个步骤都存在于自己的方法中,但在运行时,顺序取决于 XML 套件中的条目。
- 方法1: 初始化浏览器并启动 URL (
tc01LaunchURL()). - 方法2: 核对登录页面标题(
tc02VerifyLaunchPage()). - 方法3: 在登录表单中输入用户名和密码(
tc03EnterCredentials()). - 方法4: 验证用户仪表板上是否存在管理员 ID(
tc04VerifyLoggedInPage()). - 方法5: 验证用户仪表板上的其他链接(
tc05VerifyHyperlinks()).
Code 针对以下场景:
进口 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_ties 和 bonding.
- 第一种方法和第三种方法都包含两者
bonding和strong_ties因此,只要套件中包含任一组,它们就会运行。这是共享的常见模式。 测试用例 步骤。 - 第二种方法仅标记为
bonding所以它只在以下情况下运行:bonding该组包含在内。 - 第四种方法仅标记为
strong_ties因此,它仅在包含该组时运行。 - 第五个方法仅标记为
bonding所以它只在以下情况下运行:bonding该组包含在内。
以下是四种执行方案:
情景1: 无论分组如何,运行所有测试方法。移除 <groups> 从正在运行的 XML 中提取代码块。
情景2: 仅运行与所选组关联的方法,即 strong_ties or bonding请参考以下视频。
- 视频的第一部分,
<groups>该代码块被注释掉了,因此每个测试方法都会运行。 - 在第二部分中,恢复了分组过滤器,并且只运行匹配方法。
情景3: 应用排除筛选器跳过选定的测试用例。请参考视频。
- 演示版不包含以下内容。
tc02按运行 XML 中的名称,结果报告确认排除的方法不会运行。
情景4: 应用包含筛选器,仅运行 tc01LaunchURL, tc03EnterCredentials和 tc05VerifyHyperlinks请参考视频。
本次运行中,仅执行包含过滤器中列出的方法,完全按照配置执行。
请从以下链接下载示例项目。
结语
团体在 TestNG 为大型项目构建结构 Selenium 并通过用声明式 XML 过滤器替换一次性类拆分来创建单元套件。
用以下标签标记你的方法: @Test(groups = {...}),然后使用 <include>, <exclude>和 dependsOnGroups 从同一个 Maven 项目驱动烟雾测试、回归测试和端到端测试。 TestNG 7.x。

