Java >> Java Tutorial >  >> Java

TestNG Selenium Scripts Beispiel erstellen

1. Einführung

In diesem Beitrag stellen wir einen umfassenden Artikel über TestNG zum Erstellen von Selenium-Skripten vor. TestNG ist ein automatisiertes Open-Source-Testframework für Java-Komponententests, das sowohl von JUnit als auch von NUnit inspiriert ist. Es unterstützt die folgenden Komponententestfunktionen:

  • Es bietet eine Reihe von Anmerkungen:@BeforeClass , @AfterClass , @BeforeMethod , @AfterMethod , @Test usw.
  • Es bündelt Testklassen mit xml Dateien.
  • @Test Attribute werden verwendet, um die Ausnahmen, Zeitüberschreitungen, Abhängigkeiten und parametrisierten Tests festzulegen, und werden auch verwendet, um Tests zu ignorieren.

Selenium ist ein Open-Source-Testframework für Webanwendungen. Es unterstützt neun gängige Browser:Google Chrome, Internet Explorer, Firefox, Safari, Opera, HtmlUnit, phantomjs, Android und iOS. Es unterstützt mehrere Sprachen:Java, C#, Ruby, Python und Javascript.

In diesem Beispiel werde ich automatisierte Testskripte mit Java mit TestNG und Selenium für die folgenden Websites schreiben:

  • Startseite der Google-Suche
  • Google-Suchergebnisseite
  • Neue Kontoseite von Google Gmail

2. Verwendete Technologien

Der Beispielcode in diesem Artikel wurde erstellt und ausgeführt mit:

  • Java 11
  • Maven 3.3.9
  • Eclipse-Sauerstoff
  • TestNg 6.8
  • Selen 3.14

3. Einrichten

3.1 Installieren Sie das TestNG-Plug-in in der Eclipse-IDE

Sie können überprüfen, ob TestNG in Eclipse IDE installiert ist, indem Sie es in den Installationsdetails finden.

Klicken Sie hier für detaillierte Anweisungen zur Installation.

3.2 Installieren Sie den Google Chrome-Webtreiber

Ich werde Selenium Chrome WebDriver herunterladen von hier und installiere es auf meinem PC unter C:\MaryZheng\DevTools\Selenium . Dieser Ort wird verwendet, um den "webdriver.chrome.driver" einzustellen Systemeigenschaft, bevor ein ChromeDriver initialisiert wird Beispiel.

3.3 Erstellen Sie ein Maven-Projekt

Erstellen Sie ein Maven-Projekt, das sowohl TestNG- als auch Selenium-Abhängigkeiten enthält.

pom.xml

<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>testng-selenium-example</groupId>
	<artifactId>testng-selenium-example</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.0</version>
				<configuration>
					<release>11</release>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>org.testng</groupId>
			<artifactId>testng</artifactId>
			<version>6.8</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
		<dependency>
			<groupId>org.seleniumhq.selenium</groupId>
			<artifactId>selenium-java</artifactId>
			<version>3.141.59</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-io -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-io</artifactId>
			<version>1.3.2</version>
		</dependency>


	</dependencies>
</project>

4. Testklassen

4.1 SeleniumTestBase

In diesem Schritt erstelle ich einen SeleniumTestBase Klasse, die drei Methoden hat:

  • setupWebDriver – diese Methode ist mit dem @BeforeClass annotiert Annotation, die einmal ausgeführt wird, bevor die erste Testmethode in der aktuellen Klasse ausgeführt wird. Es richtet Chrome WebDriver ein und öffnet die Google-Startseite.
  • cleanup – diese Methode ist mit dem @AfterClass annotiert Anmerkung, die einmal ausgeführt wird, nachdem alle Testmethoden in der aktuellen Klasse ausgeführt wurden. Es schließt das Chrome-Browserfenster und wird beendet.
  • saveScreenshot – diese Methode ist mit dem @AfterMethod annotiert Anmerkung, die nach jeder Testmethode ausgeführt wird. Es kopiert den Screenshot in eine Datei.

SeleniumTestBase.java

package jcg.zheng.testngdemo;

import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;

public class SeleniumTestBase {

    protected static final String GOOGLE_URL = "http://google.com";
    protected String screenshotFileName = null;

    protected WebDriver driver;// an API to send commands directly to the browser
    protected WebDriverWait webdriverwait;

    @BeforeClass
    public void setupWebDriver() {
        System.setProperty("webdriver.chrome.driver",
                "C:\\MaryZheng\\DevTools\\Selenium\\chromedriver.exe");
        driver = new ChromeDriver();
        webdriverwait = new WebDriverWait(driver, 30);

        driver.manage().deleteAllCookies();
        driver.manage().window().maximize();
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        driver.get(GOOGLE_URL);
    }

    @AfterClass
    public void cleanup() {
        driver.close();
        driver.quit();
    }

    @AfterMethod
    public void saveScreenshot() throws IOException {
        if (screenshotFileName != null) {
            File screeshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
            FileUtils.copyFile(screeshot, new File(screenshotFileName));
        }
    }

}

4.2 GoogleSuchtest

In diesem Schritt werde ich das Entwicklertool von Chrome verwenden, um die ID und den Namen des Webelements zu finden. Ich werde einen GoogleSearchTest erstellen Klasse, die sechs Methoden hat:

  • check_title – überprüft, ob der Titel der Startseite der Google-Suche „Google“ lautet, über Seleniums driver.getTitle() Methode und setzt den Timeout dieser Methode über @Test(timeout = 10000) auf 10 Sekunden .
  • check_feeling_lucky – überprüft, ob die Startseite der Google-Suche ein Element mit dem ID-Wert „gbqfbb“ über driver.findElement(By.id("gbqfbb") enthält ).
  • check_about_link – überprüft, ob der About link wird über die isDisplayed-Methode angezeigt und gruppiert ihn unter der Gruppe „links“ über @Test(groups="links") .
  • check_store_link – überprüft, ob der Store Link wird angezeigt und gruppiert ihn unter der Gruppe „Links“.
  • check_gmail_link – überprüft, ob der Gmail Link wird angezeigt und gruppiert ihn unter der Gruppe „Links“.
  • check_images_link – überprüft, ob der Images Link wird angezeigt und gruppiert ihn unter der Gruppe „Links“.

GoogleSearchTest.java

package jcg.zheng.testngdemo;

import static org.junit.Assert.assertTrue;
import static org.testng.Assert.assertEquals;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.testng.annotations.Test;

public class GoogleSearchTest extends SeleniumTestBase {

    @Test(timeOut = 10000)
    public void check_title() {
        String title = driver.getTitle();
        assertEquals("Google", title);
    }

    @Test
    public void check_feeling_lucky() {
        WebElement searchInput = driver.findElement(By.id("gbqfbb"));
        assertTrue(searchInput.isDisplayed());
    }

    @Test(groups = "links")
    public void check_about_link() {
        WebElement aboutLink = driver.findElement(By.linkText("About"));
        assertTrue(aboutLink.isDisplayed());
    }

    @Test(groups = "links")
    public void check_store_link() {
        WebElement aboutLink = driver.findElement(By.linkText("Store"));
        assertTrue(aboutLink.isDisplayed());
    }

    @Test(groups = "links")
    public void check_gmail_link() {
        WebElement aboutLink = driver.findElement(By.linkText("Gmail"));
        assertTrue(aboutLink.isDisplayed());
    }

    @Test(groups = "links")
    public void check_images_link() {
        WebElement aboutLink = driver.findElement(By.linkText("Images"));
        assertTrue(aboutLink.isDisplayed());
    }

}

Wählen Sie GoogleSearchTest aus Datei in Eclipse IDE und Rechtsklick auf „Ausführen als -> TestNG Test“. Erfassen Sie die Ausgabe.

Testausgabe

[RemoteTestNG] detected TestNG version 6.8.0
[TestNG] Running:
  C:\Windows\Temp\testng-eclipse-1768898921\testng-customsuite.xml

Starting ChromeDriver 74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}) on port 35888
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
Jun 04, 2019 9:17:55 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
PASSED: check_about_link
PASSED: check_feeling_lucky
PASSED: check_gmail_link
PASSED: check_images_link
PASSED: check_store_link
PASSED: check_title

===============================================
    Default test
    Tests run: 6, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 6, Failures: 0, Skips: 0
===============================================

[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@1817d444: 247 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@130161f7: 18 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@7ed7259e: 82 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@1725dc0f: 123 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter@41fbdac4: 8 ms

4.3 GoogleSearchResultTest

TestNG stellt den dependsOnMethods bereit Attribut bei @Test Anmerkung, um die abhängigen Methoden anzugeben. In diesem Schritt werde ich drei Testmethoden erstellen und die Abhängigkeiten zwischen ihnen einrichten.

  • check_google_search_button – überprüft, ob die Suchschaltfläche über den isEnabled() aktiviert ist Methode.
  • check_google_search_input – überprüft, ob das Sucheingabefeld angezeigt wird und ruft dessen sendKeys("Mary") auf um die Eingabedaten mit „Mary“ zu füllen.
  • search_results – legt diese Testmethode fest, hängt von beiden ab check_google_search_button und check_google_search_input . Es wird nur die abhängige Methode pass ausführen.

GoogleSearchResultTest.java

package jcg.zheng.testngdemo;

import static org.junit.Assert.assertTrue;
import static org.testng.Assert.assertEquals;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.testng.annotations.Test;

public class GoogleSearchResultTest extends SeleniumTestBase {

    @Test
    public void check_google_search_input() {
        WebElement searchInput = driver.findElement(By.name("q"));
        assertTrue(searchInput.isDisplayed());
        searchInput.sendKeys("Mary");
        screenshotFileName = "search_Mary.png";
    }

    @Test
    public void check_google_search_button() {
        WebElement searchBtn = driver.findElement(By.name("btnK"));
        assertTrue(searchBtn.isEnabled());

    }

    @Test(dependsOnMethods = { "check_google_search_input", "check_google_search_button" })
    public void search_results() {
        WebElement searchBtn = driver.findElement(By.name("btnK"));
        searchBtn.click();
        screenshotFileName = "search_Mary_result.png";
        assertEquals("Mary - Google Search", driver.getTitle());
    }

}

Wählen Sie GoogleSearchResultTest Datei in Eclipse IDE und Rechtsklick auf „Ausführen als -> TestNG Test“. Erfassen Sie die Ausgabe.

Testausgabe

[RemoteTestNG] detected TestNG version 6.8.0
[TestNG] Running:
  C:\Windows\Temp\testng-eclipse--1473354869\testng-customsuite.xml

Starting ChromeDriver 74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}) on port 9517
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
Jun 04, 2019 9:27:27 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
PASSED: check_google_search_button
PASSED: check_google_search_input
PASSED: search_results

===============================================
    Default test
    Tests run: 3, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 3, Failures: 0, Skips: 0
===============================================

[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@1817d444: 188 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@130161f7: 12 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@7ed7259e: 26 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@1725dc0f: 146 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter@41fbdac4: 9 ms

4.4 SearchMoreThanOnceTest

TestNG stellt den invocationCount bereit Attribut zum @Test Anmerkung, die verwendet werden kann, um denselben Test mehrmals auszuführen.

In diesem Schritt erstelle ich einen check_google_search_results Methode, die zehnmal nach „Mary Zheng“ sucht. Ich füge auch @BeforeMethod hinzu um zurück zur Google-Startseite zu navigieren.

SearchMoreThanOnceTest.java

package jcg.zheng.testngdemo;

import static org.junit.Assert.assertTrue;
import static org.testng.Assert.assertEquals;

import java.util.Random;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class SearchMoreThanOnceTest extends SeleniumTestBase {

    @Test(invocationCount = 10)
    public void check_google_search_results() {
        WebElement searchInput = driver.findElement(By.name("q"));
        assertTrue(searchInput.isDisplayed());
        searchInput.sendKeys("Mary Zheng");

        WebElement searchBtn = driver.findElement(By.name("btnK"));
        searchBtn.click();
        Random random = new Random();
        screenshotFileName = "search_MaryZheng_" + random.nextInt(10) + ".png";
        assertEquals("Mary Zheng - Google Search", driver.getTitle());
    }

    @BeforeMethod
    public void backToSearch() {
        driver.get(GOOGLE_URL);
    }

}

Wählen Sie SearchMoreThanOnceTest Datei in Eclipse IDE und Rechtsklick auf „Ausführen als -> TestNG Test“. Erfassen Sie die Ausgabe.

Testausgabe

[RemoteTestNG] detected TestNG version 6.8.0
[TestNG] Running:
  C:\Windows\Temp\testng-eclipse--1432373915\testng-customsuite.xml

Starting ChromeDriver 74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}) on port 17724
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
Jun 04, 2019 9:30:13 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
PASSED: check_google_search_results
PASSED: check_google_search_results
PASSED: check_google_search_results
PASSED: check_google_search_results
PASSED: check_google_search_results
PASSED: check_google_search_results
PASSED: check_google_search_results
PASSED: check_google_search_results
PASSED: check_google_search_results
PASSED: check_google_search_results

===============================================
    Default test
    Tests run: 10, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 10, Failures: 0, Skips: 0
===============================================

[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@1817d444: 376 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@130161f7: 18 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@7ed7259e: 65 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@1725dc0f: 132 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 1 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter@41fbdac4: 15 ms

4.5 GmailTest

In diesem Schritt erstelle ich einen GmailTest Klasse, die zwei Methoden hat:

  • check_gmail_link – Es findet den Gmail-Link auf der Google-Startseite und überprüft, ob der Titel „Gmail – Kostenloser Speicherplatz und E-Mail von Google“ lautet, nachdem es darauf geklickt hat.
  • find_not_exist_link – es wird NoSuchElementException ausgegeben beim Auffinden nicht vorhandener Webelemente. TestNG handhabt es über den expectedExceptions Attribut.

GmailTest.java

package jcg.zheng.testngdemo;

import static org.junit.Assert.assertTrue;
import static org.testng.Assert.assertEquals;

import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebElement;
import org.testng.annotations.Test;

public class GmailTest extends SeleniumTestBase {

    @Test
    public void check_gmail_link() {
        WebElement gmailLink = driver.findElement(By.linkText("Gmail"));
        assertTrue(gmailLink.isDisplayed());
        gmailLink.click();
        screenshotFileName = "gmail_page.png";
        String gmailTitle = driver.getTitle();
        assertEquals("Gmail - Free Storage and Email from Google", gmailTitle);
    }

    @Test(expectedExceptions = NoSuchElementException.class)
    public void find_not_exist_Link() {
        driver.findElement(By.linkText("mail"));
    }
}

Wählen Sie GmailTest Datei in Eclipse IDE und Rechtsklick auf „Ausführen als -> TestNG Test“. Erfassen Sie die Ausgabe.

Testausgabe

[RemoteTestNG] detected TestNG version 6.8.0
[TestNG] Running:
  C:\Windows\Temp\testng-eclipse-1469233723\testng-customsuite.xml

Starting ChromeDriver 74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}) on port 20002
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
Jun 04, 2019 9:32:26 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
PASSED: check_gmail_link
PASSED: find_not_exist_Link

===============================================
    Default test
    Tests run: 2, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================

[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@1817d444: 178 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@130161f7: 15 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@7ed7259e: 31 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@1725dc0f: 122 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter@41fbdac4: 12 ms

4.6 GmailNewAccountsTest

TestNG unterstützt einen parametrisierten Test mit einem @DataProvider Anmerkung zusammen mit dem dataProvider Attribut. In diesem Schritt erstelle ich einen GmailNewAccountsTest Klasse, die drei neue Gmail-Konten mit dem createGmailUsers erstellt Methode.

Der Selenium-Webtreiber stellt WebDriverWait bereit um auf die Seite zu warten, bevor eine Aktion auf die Webelemente angewendet wird.

GmailNewAccountsTest.java

package jcg.zheng.testngdemo;

import java.util.ArrayList;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class GmailNewAccountsTest extends SeleniumTestBase {

    @Test(dataProvider = "setGmailUsers")
    public void createGmailUsers(String firstName, String lastName, String username, String pwd)
            throws InterruptedException {
        WebElement gmailLink = driver.findElement(By.linkText("Gmail"));
        gmailLink.click();

        WebElement createAcctBtn = webdriverwait
                .until(ExpectedConditions.elementToBeClickable(By.linkText("Create an account")));
        createAcctBtn.click();

        webdriverwait.until(ExpectedConditions.numberOfWindowsToBe(2));
        ArrayList<String> windowsTabs = new ArrayList<>(driver.getWindowHandles());

        driver.switchTo().window(windowsTabs.get(windowsTabs.size() - 1)); // switch to the new tab
        Thread.sleep(2000);

        WebElement fnameEle = webdriverwait
                .until(ExpectedConditions.elementToBeClickable(By.id("firstName")));
        fnameEle.sendKeys(firstName);

        WebElement lnameEle = webdriverwait
                .until(ExpectedConditions.elementToBeClickable(By.id("lastName")));
        lnameEle.sendKeys(lastName);

        WebElement unameEle = webdriverwait
                .until(ExpectedConditions.elementToBeClickable(By.id("username")));
        unameEle.sendKeys(username);

        WebElement pwdEle = webdriverwait
                .until(ExpectedConditions.elementToBeClickable(By.name("Passwd")));
        pwdEle.sendKeys(pwd);

        driver.close();
        driver.switchTo().window(windowsTabs.get(0));// switch back to the main
        Thread.sleep(2000);

    }

    @DataProvider
    public Object[][] setGmailUsers() {
        return new Object[][] { { "firstName", "lastname", "flname", "pwd" },
            { "Mary", "Zheng", "mzheng", "pwd2" }, { "Allen", "Zheng", "aZheng", "pwd3" } };
    }
}

Testausgabe

Wählen Sie GmailNewAccountsTest Datei in Eclipse IDE und Rechtsklick auf „Ausführen als -> TestNG Test“. Erfassen Sie die Ausgabe.

[RemoteTestNG] detected TestNG version 6.8.0
[TestNG] Running:
  C:\Windows\Temp\testng-eclipse-707167101\testng-customsuite.xml

Starting ChromeDriver 74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}) on port 20723
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
Jun 04, 2019 9:34:10 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
PASSED: createGmailUsers("firstName", "lastname", "flname", "pwd")
PASSED: createGmailUsers("Mary", "Zheng", "mzheng", "pwd2")
PASSED: createGmailUsers("Allen", "Zheng", "aZheng", "pwd3")

===============================================
    Default test
    Tests run: 3, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 3, Failures: 0, Skips: 0
===============================================

[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@1817d444: 186 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@130161f7: 12 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@7ed7259e: 33 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@1725dc0f: 144 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter@41fbdac4: 5 ms

5. Testsuite-XML

TestNG gruppiert eine Reihe von Testklassen in einer XML-Datei. Das Eclipse TestNG-Plug-in generiert automatisch die XML-Datei für die Testklassen, nachdem Sie mit der rechten Maustaste auf „Ausführen als -> TestNG-Test“ geklickt haben. TestNG generiert eine Reihe von Berichten für die Testergebnisse. Hier ist mein Projekt, das zeigt

5.1 TestNG_google.xml

In diesem Schritt erstelle ich einen TestNG_google.xml um zwei Tests zu bündeln:

  • Google Search Test – bündelt drei Testklassen:GoogleSearchTest , GoogleSearchResult , und SearchMoreThanOnceTest .
  • Google Mail-Test – enthält GmailTest .

TestNG_google.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Google Search Suites">
	<test name="Google Search Test" verbose="2">
		<classes>
			<class name="jcg.zheng.testngdemo.GoogleSearchTest" />
			<class name="jcg.zheng.testngdemo.GoogleSearchResultTest" />
			<class name="jcg.zheng.testngdemo.SearchMoreThanOnceTest">
				<methods>
					<include name="check_google_search_results" />
				</methods>
			</class> <!-- jcg.zheng.testngdemo.SearchMoreThanOnceTest -->
		</classes>

	</test>
	<test name="Gmail Test" verbose="2">
		<classes>
			<class name="jcg.zheng.testngdemo.GmailTest" />
		</classes>
	</test> <!-- Default test -->
</suite> <!-- Default suite -->

Wählen Sie TestNG_google.xml Datei und Rechtsklick auf „Ausführen als -> TestNG Suite“. Es führt die Tests aus und gibt die Ergebnisse aus. Es generiert auch die HTML-Berichte. Hier ist der Screenshot des HTML-Berichts.

5.2 TestNG_gmail.xml

In diesem Schritt erstelle ich einen TestNG_gmail.xml um beide GmailTest zu bündeln und GmailNewAccountsTest Klassen. Außerdem wird das Timeout für die Testsuite auf 1 Minute eingestellt.

TestNG_gmail.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Gmail suite" time-out="60000">
  <test name="Gmail test" verbose="2">
    <classes>
      <class name="jcg.zheng.testngdemo.GmailTest"/>
      <class name="jcg.zheng.testngdemo.GmailNewAccountsTest" />
    </classes>
  </test>  
</suite>

Wählen Sie TestNG_gmail.xml Datei und Rechtsklick auf „Ausführen als -> TestNG Suite“. Es führt die Tests aus und gibt die Ergebnisse aus. Es generiert auch die HTML-Berichte. Hier ist der Screenshot des HTML-Berichts.

6. TestNG Selenium Scripts erstellen – Zusammenfassung

In diesem Artikel habe ich Automatisierungstestskripte für Google-Websites mit Selenium und TestNG erstellt.

7. Laden Sie den Quellcode herunter

Dieses Tutorial besteht aus einem Maven-Projekt, das automatisierte Selenium-Skripte erstellt hat, um die Google-Websites zu testen.selenium

Java-Tag