Selenium 简明教程

Selenium - TestNG

当我们使用 Selenium 或任何其他工具运行任何自动化测试时,我们需要查看和分析执行结果,以总结已经执行、通过、失败、失败数据等的测试数量,以报告的形式。

有时,测试失败的屏幕截图也会被捕获到报告中。还需要定期与项目利益相关者分享测试报告。为此,我们可以借助 TestNG 报告。

TestNG 报告是一个 html 报告,在测试用例在 TestNG 的帮助下构建并运行后自动生成。它是一个单元测试框架,可以与 Selenium 测试集成并用于报告目的。

除此之外,TestNG 还有一个名为 Reporter 的默认报告类,它有助于记录。这有助于检测失败的根本原因以调试失败的测试。

Prerequisites to Create A TestNG Report

  1. 在系统中安装 Java(版本高于 8),并使用以下命令检查它是否存在:java -version。如果已成功完成安装,将显示已安装的 java 版本。

  2. 在系统中安装 maven 并使用以下命令检查它是否存在:mvn -version。如果已成功完成安装,将显示已安装的 maven 版本。

  3. 安装任何一个 IDE,例如 Eclipse、IntelliJ 等等。

  4. 从以下链接添加 TestNG 依赖项: https://mvnrepository.com/artifact/

  5. 从以下链接添加 Selenium Java 依赖项: selenium-java

  6. 使用所有依赖项保存 pom.xml 并更新 Maven 项目

What are the Different Ways to Generate TestNG Reports?

生成 TestNG 报告的不同方法如下所示 -

  1. emailable-report.html

  2. index.html report

  3. Reporter class report

emailable-report.html

创建 emailable-report.html 的步骤如下 -

Step 1 - 创建 TestNG 测试类,并实现以下示例,其中我们将首先单击 New User button 上的 Welcome Page

请注意,我们将在 testng.xml 文件中运行测试。

selenium testng report 1

单击 New User 按钮时,我们将导航到注册页面,其中包含 Welcome, Register 文本,如下面的图像所示。

selenium testng report 2

Example

package Report;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.*;
import java.util.concurrent.TimeUnit;
import static org.testng.Assert.assertEquals;

public class TestNGTest {
   WebDriver driver;
   @BeforeTest
   public void setup() throws Exception{

      // Initiate browser driver
      driver = new ChromeDriver();

      // adding implicit wait of 12 secs
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

      // Opening the webpage
      driver.get("https://www.tutorialspoint.com/selenium/practice/login.php");
   }
   @Test(priority = 1)
   public void verifyWelcomePageHeading() {

      // identify header then get text
      WebElement header = driver.findElement
         (By.xpath("//*[@id='signInForm']/h1"));
      String text = header.getText();

      // assertion to verify login page header
      assertEquals("Welcome, Login In", text);
   }
   @Test(priority = 2)
   public void moveToRegisterPage() {

      // identify button then click
      WebElement btn = driver.findElement
         (By.xpath("//*[@id='signInForm']/div[3]/a"));
      btn.click();
   }
   @Test(priority = 3)
   public void verifyRegisterPageHeading() {

      // identify header then get text
      WebElement heder = driver.findElement
         (By.xpath("//*[@id='signupForm']/h1"));
      String text = heder.getText();

      // assertion to verify register page header
      assertEquals("Welcome,Register", text);
   }

   @AfterTest
   public void teardown() {
      // quitting browser
      driver.quit();
   }
}

testng.xml 文件中的配置。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite">
   <test verbose="2" preserve-order="true" name="TestNGTest.java">
      <classes>
         <class name="Report.TestNGTest">
            <methods>
               <include name="verifyWelcomePageHeading"/>
               <include name="moveToRegisterPage"/>
               <include name="verifyRegisterPageHeading"/>
            </methods>
         </class>
      </classes>
   </test>
</suite>

pom.xml 文件中的依赖项。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">

   <modelVersion>4.0.0</modelVersion>
   <groupId>org.example</groupId>
   <artifactId>SeleniumJava</artifactId>
   <version>1.0-SNAPSHOT</version>

   <properties>
      <maven.compiler.source>16</maven.compiler.source>
      <maven.compiler.target>16</maven.compiler.target>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>

   <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
   <dependencies>
      <dependency>
         <groupId>org.seleniumhq.selenium</groupId>
         <artifactId>selenium-java</artifactId>
         <version>4.11.0</version>
      </dependency>

      <!-- https://mvnrepository.com/artifact/org.testng/testng -->
      <dependency>
         <groupId>org.testng</groupId>
         <artifactId>testng</artifactId>
         <version>7.9.0</version>
         <scope>test</scope>
      </dependency>
   </dependencies>
</project>

上述实现的项目结构如下图所示 −

selenium testng report 3

我们将通过 testng.xml 运行测试。

Output

===============================================
All Test Suite
Total tests run: 3, Passes: 3, Failures: 0, Skips: 0
===============================================

Process finished with exit code 0

我们借助 TestNG 测试框架创建了测试,并检索了页面标头并使用断言对它们进行了验证。

控制台中的结果显示 Total tests run: 3 ,因为有三个带 @Test 注释的方法 - verifyWelcomePageHeading()、moveToRegisterPage() 和 verifyRegisterPageHeading()。

最后,接收到消息 Passes: 3Process finished with exit code 0 ,表示代码执行成功。

Step 2 - 刷新项目,项目结构中应该生成一个名为 test-output 的新文件夹。

selenium testng report 4

Step 3 - 右键单击 emailable-report.html 并选择在浏览器中打开的选项。

selenium testng report 5

报告将在浏览器中打开,显示测试类名称 - TestNGTest.java,其中包括已通过、已跳过、已失败的总数、测试持续时间等。此外,测试方法名称 moveToRegisterPage、verifyRegisterPageHeading 和 verifyWelcomePageHeading 也包含在报告中。

index.html report

创建 index.html 报告的步骤如下 -

Step 1 − 按照创建 emailable-report.html 的步骤执行步骤 1。

Step 2 - 刷新项目,项目结构中应该生成一个名为 test-output 的新文件夹。

selenium testng report 6

Step 3 − 右键单击 index.html 并选择在浏览器中打开的选项。

selenium testng report 7

报告将在浏览器中打开,显示 testng.xml、测试数量、组、时间、Reporter 输出、忽略的方法和时间顺序视图。此外,“Results”部分包含带有方法数量、通过和失败的方法名称 moveToRegisterPage、verifyRegisterPageHeading 和 verifyWelcomePageHeading。

Report Generated From Reporter Class

TestNG 提供 Reporter 类用于记录目的。它有四种不同的方法来处理用于记录的信息:

  1. Reporter.log( String str);

  2. Reporter.log(String str, Boolean logToOut);

  3. Reporter.log(String str, int l);

  4. Reporter.log(String str, int l, Boolean logToOut);

下面列出了使用 Reporter 类在报告中生成日志消息的步骤:

Step 1 - 创建 TestNG 测试类,并实现以下示例,其中我们将首先单击 New User button 上的 Welcome Page

请注意,我们将通过 testng.xml 文件运行测试。此外,一旦执行测试,我们将在报告中得到以下日志消息:

  1. Moving to Registration Page

  2. Verified Login Page Header

  3. Verified Register Page Header

selenium testng report 8

单击 New User 按钮时,我们将导航到注册页面,其中包含 Welcome, Register 文本,如下面的图像所示。

selenium testng report 9

请注意,我们将通过 testng.xml 文件运行测试。此外,一旦执行测试,我们将在报告中得到以下日志消息:

  1. Moving to Registration Page

  2. Verified Login Page Header

  3. Verified Register Page Header

Example

package Report;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Reporter;
import org.testng.annotations.*;
import java.util.concurrent.TimeUnit;
import static org.testng.Assert.assertEquals;

public class TestNGTest {
   WebDriver driver;
   @BeforeTest
   public void setup() throws Exception{

      // Initiate browser driver
      driver = new ChromeDriver();

      // adding implicit wait of 12 secs
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

      // Opening the webpage
      driver.get("https://www.tutorialspoint.com/selenium/practice/login.php");
   }
   @Test(priority = 1)
   public void verifyWelcomePageHeading() {

      // identify header then get text
      WebElement header = driver.findElement(By.xpath("//*[@id='signInForm']/h1"));
      String text = header.getText();

      // assertion to verify login page header
      assertEquals("Welcome, Login In", text);
      Reporter.log("Verified Login Page header");
   }
   @Test(priority = 2)
   public void moveToRegisterPage() {

      // identify button then click
      WebElement btn = driver.findElement(By.xpath("//*[@id='signInForm']/div[3]/a"));
      btn.click();
      Reporter.log("Moving to Registration Page");
   }
   @Test(priority = 3)
   public void verifyRegisterPageHeading() {

      // identify header then get text
      WebElement heder = driver.findElement(By.xpath("//*[@id='signupForm']/h1"));
      String text = heder.getText();

      // assertion to verify register page header
      assertEquals("Welcome,Register", text);
      Reporter.log("Verified Register Page header");
   }

   @AfterTest
   public void teardown() {
   // quitting browser
   driver.quit();
   }
}

Step 2 - 刷新项目,项目结构中应该生成一个名为 test-output 的新文件夹。

Step 3 − 右键单击 emailable-report.htmlindex.html 以选择在浏览器中打开的选项。

以下 emailable-report.html 报告应在浏览器中打开,显示 TestNGTest.java 测试类名称,以及通过、跳过、失败、测试持续时间等的总数。此外,报告中还包括 test 方法名称 moveToRegisterPage、verifyRegisterPageHeading 和 verifyWelcomePageHeading。

在报告的较低部分,可以看到记录消息以及 test 方法名称。

selenium testng report 10

以下 index.html 报告应在浏览器中打开,显示 testng.xml、测试数量、组、时间、Reporter 输出、忽略的方法和时间顺序视图。此外,“Results”部分包含带有方法数量、通过和失败的方法名称 moveToRegisterPage、verifyRegisterPageHeading 和 verifyWelcomePageHeading。

单击左侧的“Reporter output”选项卡时,可以看到记录消息以及 test 方法名称。

selenium testng report 11

以下链接提供了 TestNG 的详细说明: TestNG

到此,我们对 Selenium - TestNG Report 教程的全面介绍结束了。我们从描述 TestNG 报告开始,介绍了设置 TestNG 报告的先决条件,并逐步指导如何创建不同类型的 TestNG 报告,例如 emailable-report.html、index.html 和带有 Reporter 类的报告,并通过一个示例来说明如何将它们与 Selenium 一起使用。这让你对 TestNG 报告有了深入了解。明智的做法是不断练习你所学到的知识,并探索与 Selenium 相关的内容以加深你的理解和拓展你的视野。