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演示站点,在输入凭证后验证登录页面上的一些内容,并在登录时重新验证应用程序上的一些新内容。
注意事项:以下每个步骤都应该在单独的方法中声明,但在执行时,它将根据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天,因此如果尝试在本地计算机上运行代码,则可能会出现无效凭据错误。查找以下步骤以生成登录凭据:
- 启动 http://localhost
- 在框中输入电子邮件ID。
- 单击Enter并在屏幕上查看登录详细信息。
规范说明:
如上所述,已经创建了5个测试用例,用于在独立的方法中执行每个操作。 可以观察到,对于每个方法,都关联了一个组参数,其中包含一些值。
基本上,这些是区分组的名称,即“strong_ties”和“bonding”。
- 第1个和第3个方法被标记为“bonding”,“strong_ties”,这意味着如果在任何组中更新了XML,则此测试用例会运行。
- 第2种方法仅标记为“bonding”组,这意味着如果使用bonding组更新XML。只有在这种情况下,此测试用例才会运行。
- 第4个测试用例被标记到strong_ties组,这意味着该测试用例只有在XML使用strong_ties组名称更新时才会运行。
- 最后但并非最不重要的第5个测试用例附加到绑定组,这意味着只有在使用绑定组名称更新XML时才会运行此测试用例。
总体而言,有4个场景;
-
希望运行所有测试用例,而不考虑组名。在本例中,将从运行XML中删除Group标记。
-
希望运行几个测试用例,这些测试只与两个组中的任何一个相关,即strong_ties
-
使用排除机制来排除测试用例
-
最后,使用Include测试机制来包含测试用例(tc01LaunchURL、tc03EnterCredentials和tc05VerifyHyperlink)
结论
在这里了解了Maven项目中使用XML运行测试用例的一种相对较新的方法。 首先简要介绍了TestNG,然后介绍了组、排除和包含的完整技术规范。