Testng 组 – 包含和排除(示例)
TestNG 是一个测试框架,涵盖不同类型的测试设计,如单元测试、功能测试、端到端测试、UI 测试和集成测试。
您可以通过创建 XML 并通过 maven 运行来运行单个或多个包(这里的包是指以适当的目录格式封装一组类)。
TestNG 带示例的群组
我们在 测试 什么时候,
- 我们不想在不同的类中分别定义测试方法(取决于功能)并且
- 同时想要忽略(不执行)一些测试用例,就好像它们在代码中不存在一样。
- 因此,为了实现这一点,我们必须对它们进行分组。这是通过使用 testNG 支持的“包含”和“排除”机制来实现的。
在下面的示例中,我们展示了如何在 XML 文件中使用组的语法。
@Test (groups = { "bonding", "strong_ties" })
这里我们使用 2 个组名,即“bonding”和“strong_ties”(这些是可以根据您的意愿更改的逻辑名称)。
<groups>
标签定义 XML 中组的开始。
自定义 XML 以从测试类中选择提到的组。下面提到的是如何在 XML 文件中声明组的语法,例如
<groups> <run> <include name="bonding" /> </run> </groups>
因此,我们假设一个类中有 10 种测试方法。
其中,
- 有 6 种方法被标记为“bonding”组,
- 4 个属于“strong_ties”组
接下来,我们将设置 maven/Java 路径并使用 Eclipse IDE 使用 XML 文件演示组的用法 Java 基于maven项目。
创建 XML 用于 TestNG 带有标签
- Maven框架中的XML(可扩展标记语言)文件包含一个或多个测试的信息,并由 标签.
- XML 中的测试信息表示为 标签 并且可以包含一个或多个 TestNG 类。
- A Java 包含的类 @测试 测试方法上方的注释定义为 TestNG 方法。
按顺序使用多个标签来构建一个有效的 testNG xml,例如,和
- 首先是标签,它包含一个逻辑名称,该名称定义了向 testNG 报告以生成执行报告的完整信息。
- 第二是注意,它是逻辑名称,包含测试执行报告的信息,如通过、失败、跳过测试用例,以及其他信息,如执行总时间和组信息
- 第三是com.group.guru99.TC_Class1” />,com.group.guru99是使用的包,测试类名是TC_Class1。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"> <test name="Guru 99 Smoke Test Demo"> <groups> <run> <include name="strong_ties" /> </run> </groups> <classes> <class name="com.group.guru99.TC_Class1" /> </classes> </test> </suite>
我们将在下面的部分中给出的即将发布的视频中使用此 XML。
测试 XML 中的“排除”或“包含”
假设您发现组机制的使用很复杂,那么 testNG XML 可以促进排除/包含测试的功能。
Exclude Tag: Syntax for exclude tag <exclude name="${TEST_CASE_NAME}" /> Include Tag: Syntax for include tag <include name="${TEST_CASE_NAME}" />
请注意: 我们可以一次包含/排除多个测试用例,这也适用于群组。
运行 TestNG 分组、包含、排除代码(视频演示)
的解释 Java 代码和 XML 分组、排除和包含 XML 中的标签。
测试场景:启动 Guru99 演示银行网站,然后在登录页面上验证一些内容,输入凭据,并在登录时重新验证应用程序上的一些新内容。
请注意: 您编写的每个步骤都应在单独的方法中声明,但在执行时,它将根据 XML 文件中的条目执行测试方法。
- 方法1:初始化浏览器并启动 URL (tc01LaunchURL())
- 方法2:验证登录页面标题 (tc02VerifyLaunchPage())
- 方法3:在登录表单上输入用户名和密码(tc03EnterCredentials())
- 方法4:验证用户仪表板上是否存在管理员 ID(tc04VerifyLoggedInPage())
- 方法5:验证用户仪表板上的更多链接(tc05VerifyHyperlinks())
我们的场景的代码:
package com.group.guru99; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class TC_Class1 { public static final WebDriver webDriver = new FirefoxDriver();; String launchPageHeading = "//h3[text()='Guru99 Bank']"; final String userName_element = "//input[@name='uid']", password_element = "//input[@name='password']", signIn_element = "//input[@name='btnLogin']"; final String userName_value = "mngr28642", password_value = "ydAnate"; final String managerID = "//td[contains(text(),'Manger Id')]"; final String newCustomer = "//a[@href='addcustomerpage.php']", fundTransfer = "//a[@href='FundTransInput.php']"; /** * This test case will initialize the webDriver */ @Test(groups = { "bonding", "strong_ties" }) public void tc01LaunchURL() { webDriver.manage().window().maximize(); webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); webDriver.get("http://www.demo.guru99.com/V4/"); } /** * Will check the presence of Heading on Login Page */ @Test(groups = { "bonding" }) public void tc02VerifyLaunchPage() { Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(), "Home Page heading is not displayed"); System.out.println("Home Page heading is displayed"); } /** * This test case will enter User name, password and will then click on * signIn button */ @Test(groups = { "bonding", "strong_ties" }) public void 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(); } /** * This test case will verify manger's ID presence on DashBoard */ @Test(groups = { "strong_ties" }) public void tc04VerifyLoggedInPage() { Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(), "Manager ID label is not displayed"); System.out.println("Manger Id label is displayed"); } /** * This test case will check the presence of presence of New customer link * And FundTransfer link in Left pannel */ @Test(groups = { "bonding" }) public void tc05VerifyHyperlinks() { Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(), "New customer hyperlink is not displayed"); System.out.println("New customer hyperlink is displayed"); Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(), "Fund Transfer hyperlink is not displayed"); System.out.println("Fund Transfer hyperlink is displayed"); } }
请注意:凭证仅有效期 20 天,因此如果您尝试在本地机器上运行代码,可能会遇到无效凭证错误。
代码说明:
如上所述,我们创建了 5 个测试用例,以独立的方法执行每个操作。
对于每种方法,我们都将一个组参数与某个值关联起来。
基本上,这些是区分组的名称,即“strong_ties”和“bonding”。
- 第一种和第三种方法被标记为“bonding”、“strong_ties”,这意味着如果任何组中的 XML 被更新,这 测试用例 会跑。
- 第二种方法仅标记为“绑定”组,这意味着如果 XML 使用绑定组进行更新。只有在这种情况下,此测试用例才会运行。
- 第四个测试用例被标记为 strong_ties 组,这意味着只有在 XML 使用 strong_ties 组名更新时,该测试用例才会运行。
- 最后但并非最不重要的一点是,第五个测试用例附加到绑定组,这意味着只有在使用绑定组名称更新 XML 时,该测试用例才会运行。
总的来说,我们有 4 种情况;
情景1: 我们希望运行所有测试用例,而不考虑组名。在这种情况下,我们将从运行 XML 中删除 Group 标签。
情景2: 我们想要运行一些仅与两个组之一相关的测试,即 strong_ties 或 binding。请参考:
- 在此视频中,Group 参数从运行 XML 中注释掉。因此,您将看到所有测试用例都已执行。
- 继续视频,现在我们已经在 XML 中包含了组名,您可以看到只有特定于该组的测试用例正在运行。
情景3: 我们使用排除机制来排除测试用例。请参考视频
- 您会看到,我们已通过在运行 XML 中写入其名称来排除一些测试用例(tc02)。在最终结果中,提到的测试用例未运行。
情景4: 最后,我们使用包含测试机制来包含测试用例(tc01LaunchURL、tc03EnterCredentials 和 tc05VerifyHyperlinks)。请参考视频
在此视频中,您将看到 XML 中提到的测试用例仅在测试执行期间运行。
请从上述示例的代码中下载代码-
结语
我们在这里学习了一种在 Maven 项目中使用 XML 运行测试用例的相对较新的方法。
我们首先对 testNG 进行了简要介绍,然后介绍了组、排除和包含的完整技术规范。