TestNG测试组的包含,排除等操作

TestNG涵盖了不同类型的测试设计,如单元测试、功能测试、端到端测试、UI测试和集成测试。

可以通过创建XML并在Maven中运行来运行单个或多个包(这里的包是指以适当的控制器格式封装一组类)。

在本教程中,将了解-

  • 使用示例TestNG组
  • 在环境变量中设置maven和Java路径(适用于windows用户)
  • XML简介及如何制作XML文件
  • 另一种代替分组的机制是测试XML中的“exclude”或“include”
  • 如何使用XML文件运行代码

使用示例TestNG组

在以下情况中适合使用TestNG组

  • 不希望在不同的类中单独定义测试方法

  • 希望忽略(不执行)一些测试用例

因此,要实现这一点,就必须进行分组。通过使用TestNG中支持的Include和Exclude机制来实现。

在下面的示例中,展示了如何在XML文件中使用组的语法。

 @Test(groups = { "bonding", "strong_ties" })
 

在这里,使用两个组名称,即“bonding”和“strong_ties”(这些是逻辑名称,可以根据意愿进行更改)。

<GROUPS>标记 在XML中定义组的开始。

下面是如何在XML文件中声明组的语法,例如

 <groups>
<run>
<include name="bonding" />
</run>
</groups>
 

因此,假设一个类中有10个测试方法,从中,

  • 6种方法被标记在“bonding”组中,并且
  • 有4个人在“strong_ties”组

接下来,设置maven/Java路径,使用Eclipse IDE演示基于Maven的Java项目。

XML简介及如何制作XML文件

  • Maven框架中的XML(可扩展标记语言)文件包含一个或多个测试的信息,由tag <suite> 。
  • XML中的测试信息由tag <test> 并且可以包含一个或多个TestNG类。
  • 包含以下内容的Java类@Test上面的测试方法注释被定义为TestNG方法。

在一个序列中使用多个标记来构建工作的TestNGXML,如<suite>、<test>和<class>

  • 第一个是<suite>标记,它保存一个逻辑名称,该名称定义了报告给TestNG,用来生成执行报告的完整信息。
  • 第二个是<test name=“Smoke Test Demo”>,注意这是一个逻辑名称,它保存了测试执行报告的信息,如通过、失败、跳过测试用例以及执行的总时间和组信息等
  • 第三个是<class name=“com.group.TC_Class1”/>使用的包为com.group,测试类名为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的“exclude”和“include”

假设发现组机制的用法很复杂,那么TestNG XML有助于exclude/include测试的功能。

 Exclude Tag:Syntax for exclude tag 
    <exclude name="${TEST_CASE_NAME}" />
Include Tag:Syntax for include tag 
    <include name="${TEST_CASE_NAME}" />
 

注:我们可以一次包含/排除多个测试用例,并且它也适用于组。

如何使用XML文件运行代码

对Java代码和XML的分组、排除和包含的标记。 场景:启动ITXiaonv Bank演示站点,在输入凭证后验证登录页面上的一些内容,并在登录时重新验证应用程序上的一些新内容。

Introduction to TestNG Groups
Introduction to TestNG Groups

注意事项:以下每个步骤都应该在单独的方法中声明,但在执行时,它将根据XML文件中的顺序执行测试方法。

方法1:初始化浏览器并启动url(tc01LaunchURL())

方法2:验证登录页标题(tc02VerifyLaunchPage())

方法3:在登录表单上输入用户名和密码(tc03EnterCredentials())

方法4:验证用户控制面板(tc05VerifyHyperlinks())上是否存在 Manager ID

方法5:验证用户仪表板上的更多链接

代码:

 package com.group.itxiaonv;
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()='ITXiaonv 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.itxiaonv.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天,因此如果尝试在本地计算机上运行代码,则可能会出现无效凭据错误。查找以下步骤以生成登录凭据:

  1. 启动 http://localhost
  2. 在框中输入电子邮件ID。
  3. 单击Enter并在屏幕上查看登录详细信息。

规范说明:

如上所述,已经创建了5个测试用例,用于在独立的方法中执行每个操作。 可以观察到,对于每个方法,都关联了一个组参数,其中包含一些值。

基本上,这些是区分组的名称,即“strong_ties”和“bonding”。

  • 第1个和第3个方法被标记为“bonding”,“strong_ties”,这意味着如果在任何组中更新了XML,则此测试用例会运行。
  • 第2种方法仅标记为“bonding”组,这意味着如果使用bonding组更新XML。只有在这种情况下,此测试用例才会运行。
  • 第4个测试用例被标记到strong_ties组,这意味着该测试用例只有在XML使用strong_ties组名称更新时才会运行。
  • 最后但并非最不重要的第5个测试用例附加到绑定组,这意味着只有在使用绑定组名称更新XML时才会运行此测试用例。

总体而言,有4个场景;

  1. 希望运行所有测试用例,而不考虑组名。在本例中,将从运行XML中删除Group标记。

  2. 希望运行几个测试用例,这些测试只与两个组中的任何一个相关,即strong_ties

  3. 使用排除机制来排除测试用例

  4. 最后,使用Include测试机制来包含测试用例(tc01LaunchURL、tc03EnterCredentials和tc05VerifyHyperlink)

结论

在这里了解了Maven项目中使用XML运行测试用例的一种相对较新的方法。 首先简要介绍了TestNG,然后介绍了组、排除和包含的完整技术规范。

IT赶路人

专注IT知识分享