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 演示银行网站,然后在登录页面上验证一些内容,输入凭据,并在登录时重新验证应用程序上的一些新内容。

运行 TestNG 分组、包含、排除代码

请注意: 您编写的每个步骤都应在单独的方法中声明,但在执行时,它将根据 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 进行了简要介绍,然后介绍了组、排除和包含的完整技术规范。