TestNG уроци

⚡ Умно обобщение

TestNG е следващо поколение Java рамка за тестване, която се съчетава с Selenium за структурирана автоматизация, богато отчитане и паралелно изпълнение. Този урок обхваща основните анотации, настройката на проекта в Eclipse, писане на първия тестов случай, HTML отчети и разширено използване на параметри.

  • 🧱 Основна рамка: TestNG простира JUnit идеи с анотации, групаpingи паралелно изпълнение на тестове за Selenium апартаменти.
  • ???? ️ Анотации Drive Flow: Настройка, тестване и демонтиране на последователностите @Test, @BeforeMethod, @AfterMethod, @BeforeTest и @AfterTest.
  • 🗂️ Eclipse Setup: Build a TestNG проект, добавете TestNG библиотека и Selenium JAR файлове, след което генерирайте тестови класове от помощника.
  • 📊 Отчитане: TestNG генерира текстови, графични и HTML отчети в папката test-output, включително хронологични изгледи.
  • Параметри: Използвайте priority, alwaysRun и dataProvider, за да контролирате реда на изпълнение и да подавате данни в тестовете.
  • 🤖 AI Boost: Асистентите за кодиране с изкуствен интелект ускоряват TestNG генериране на класове, актуализации на локатора и скеле на dataProvider.

TestNG уроци

Какво е TestNG?

TestNG е рамка за автоматизирано тестване, където „NG“ означава „Следващо поколение“. TestNG е вдъхновен от JUnit и използва Java анотации (@) за контрол на тестовия поток. Това преодолява JUnitпо-ранните ограничения и е предназначен да направи тестване от край до край по-лесно.

с TestNG Можете да генерирате подходящ отчет и веднага да видите колко теста са преминали, неуспешни или са били пропуснати. Можете също така да изпълните отново само неуспешните случаи.

Например:

  • Да предположим, че имате пет тестови случая, всеки със собствен метод, написани без TestNGТрите преминават; четвъртият се проваля. След като поправите четвъртия, искате да изпълните отново само него, тъй като първите три вече са преминали. Това е трудно да се направи с обикновен код на метода main().
  • TestNG осигурява testng-failed.xml файл в test-output папка. Изпълнението на този XML файл изпълнява повторно само неуспешните случаи.

Освен това, ще научите предимствата на TestNG, как да пишете тестови методи с анотации @Test и как да конвертирате класовете си в набор от тестове, които се изпълняват от Eclipse или командния ред.

Защо да използвате TestNG с Selenium?

По подразбиране Selenium тестовете не дават добре форматирани резултати. С TestNG След като е включен, тестовият изпълнител генерира структуриран отчет, който можете да споделите с екипа.

мост Selenium потребителите предпочитат TestNG над JUnit поради по-широкия си набор от функции. Ключовите характеристики за Selenium са:

  • Отчети, които включват броя на изпълнените, преминатите, неуспешните и пропуснатите тестове.
  • Лесна групаping тестови случаи чрез testng.xml файл с приоритети за изпълнение.
  • Повторете теста няколко пъти без цикли, използвайки invocationCount.
  • Изпълнете множество тестове в различни браузъри — кръстосанотестване на браузър Подкрепете.
  • Плавна интеграция с Maven, Jenkinsи други инструменти за CI.
  • Readable анотации — например @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
  • Selenium WebDriver няма вградено отчитане; TestNG запълва тази празнина с изчистен HTML отчет, като този по-долу.

TestNG Примерен HTML отчет за Selenium тестове

  • TestNG опростява тестовия код. Вече не е необходим статичен main метод; анотациите решават какво се изпълнява и кога.

обичаен Java структура на тестовия клас с метод main

TestNG структура на тестовия клас с помощта на анотации

  • Неуловените изключения се обработват грациозно от TestNGТе се отчитат като неуспешни стъпки, без да се прекратява цялото изпълнение.

Предимства на TestNG над JUnit

TestNG предлага три основни предимства пред JUnit:

  • Анотациите са по-лесни за разбиране и използване.
  • Тестовите случаи могат да бъдат групирани и приоритизирани с по-малко усилия.
  • Паралелното изпълнение на тестове се поддържа веднага щом е инсталирано.

Какво е анотация в TestNG?

Анотации в TestNG са редове код, поставени над метод, за да контролират как се изпълнява. Те винаги започват със символа @. По-долу е показан прост пример.

Пример TestNG анотация над a Java метод

Анотациите са разгледани подробно в раздела „Анотации, използвани в TestNG" по-късно в този урок, така че примерът по-горе е само за задаване на очаквания. TestNG Анотациите са по-лесни за кодиране и четене от JUnit еквиваленти и са от съществено значение при провеждане на тестове върху Selenium решетка където паралелното изпълнение е от значение.

Как да пишете тестови случаи в TestNG

Писане a TestNG Тестовият случай се извършва в три стъпки:

  1. Напишете вашата бизнес логика и място TestNG анотации над всеки метод.
  2. Добавете метаданни, като например име на клас, име на група и име на пакет.
  3. Стартирайте TestNG клас от вашата IDE или от командния ред.

Създайте тестов случай, използвайки TestNG Анотации

Сега ще създадем първия си тестов случай, използвайки TestNG анотации в SeleniumПреди да напишете теста, създайте нов TestNG проект в Eclipse и го наречете ПървоTestNGПроект.

Създаване на нов TestNG Проект

Стъпка 1) Кликнете Файл > Нов > Java Проект.

Eclipse меню за създаване на ново Java проект

Стъпка 2) Въведете ПървоTestNGПроект като име на проекта и щракнете Напред.

НОВ Java съветник за проекти с име „Първо“TestNGПроект

Стъпка 3) Импортирайте TestNG библиотеки. Кликнете върху Библиотеки и след това Добавяне на библиотека….

Раздел „Библиотеки“ с опцията „Добавяне на библиотека“ в Eclipse

Стъпка 4) в Добавяне на библиотека диалогов прозорец, изберете TestNG и кликнете Напред.

Избор TestNG в диалоговия прозорец „Добавяне на библиотека“

Стъпка 5) Кликнете завършеност.

Завършване на съветника за добавяне на библиотека

TestNG вече трябва да се появи в списъка с библиотеки.

TestNG видими в списъка с библиотеки

Стъпка 6) Добавете JAR файловете, които съдържат Selenium API. Те идват от Java клиентският драйвер е изтеглен от selenium.dev/изтегляния.

Диалогов прозорец за добавяне на външни JAR файлове в Eclipse

Отидете до папката, където се намира Selenium JAR файловете се съхраняват.

Избор Selenium JAR файлове за пътя за изграждане

След добавяне на външните JAR файлове, екранът трябва да изглежда така.

Selenium JAR файловете са добавени към списъка с библиотеки

Стъпка 7) Кликнете завършеност. Новата ПървоTestNGПроект се появява в Package Explorer.

ПървоTestNGПроектът е видим в Package Explorer

Как да създадете нов TestNG Тестови файл

След като проектът е готов, създайте нов TestNG файл.

Стъпка 1) Щракнете с десния бутон върху src папка и изберете Ново > Друго….

Ново меню „Други“ от папката src в Eclipse

Стъпка 2) Разширете TestNG папка, изберете TestNG клас, и кликнете Напред.

TestNG опция за клас в съветника за създаване

Стъпка 3) Въведете показаните по-долу стойности и щракнете завършеност, Най- Java файлът е именуван ПървоTestNGдосие.

TestNG класен магьосник с FirstTestNGСтойности на файловете

Стъпка 4) Eclipse генерира TestNG шаблон, показан по-долу.

Генериран TestNG шаблон за клас в Eclipse редактор

Програмиране на първо място TestNG Тестов случай

Създайте първия тестов случай което потвърждава заглавието на Mercury Начална страница на Tours.

package firsttestngpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;

    @Test
    public void verifyHomepageTitle() {
        System.out.println("launching firefox browser");
        // Selenium 4 ships Selenium Manager, so the driver path is no longer required.
        driver = new FirefoxDriver();
        driver.get(baseUrl);
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = driver.getTitle();
        Assert.assertEquals(actualTitle, expectedTitle);
        driver.quit();
    }
}

Неща, които трябва да се забележат:

  • TestNG не се нуждае от main() метод.
  • Методите не е необходимо да бъдат статични.
  • - @Тест маркировки за анотации verifyHomepageTitle() като тестов случай.
  • Анотациите са налични в org.testng.annotations.* пакет.
  • - твърдя клас от org.testng.Assert води до проверки.

Може да имате няколко анотации @Test в една TestNG файл. Ще разгледаме това в „Анотации, използвани в TestNG" раздел.

Изпълнение на теста

Щракнете с десния бутон върху файла и го стартирайте като TestNG тест. Eclipse произвежда два изхода — текстов резултат в прозореца на конзолата и графичен резултат в TestNG Прозорец с резултати.

TestNG Прозорец с резултати с резултата от теста

Eclipse Конзолен прозорец с TestNG текстов изход

Проверка на отчети, създадени от TestNG

Прозорецът на конзолата предоставя текстово обобщение, докато TestNG Прозорецът с резултати показва графичен изглед.

Текст срещу графика TestNG сравнение на резултатите

Генериране на HTML отчети

TestNG може също да генерира пълни HTML отчети.

Стъпка 1) След бягане ПървоTestNGдосие, щракнете с десния бутон върху проекта и изберете Обновяване.

Опция за обновяване за TestNG проект в Eclipse

Стъпка 2) A тестов изход ще се появи папката. Разгънете я и намерете index.html — HTML отчетът за най-скорошното изпълнение.

папка test-output с маркиран index.html

Стъпка 3) Double- щракнете index.html да го отвориш отвътре Eclipseбраузъра на . Натиснете F5, за да обновите след бъдещи изпълнения.

TestNG HTML индексен отчет, рендиран в Eclipse

Анотации, използвани в TestNG

Вече видяхте анотацията @Test. Останалата част от този раздел обхваща най-полезните разширени анотации.

Множество тестови случаи

Сингъл TestNG Файлът може да съдържа множество @Test анотации. По подразбиране методите, анотирани с @Test, се изпълняват по азбучен ред. В кода по-долу, методите c_test, a_test, и b_test се изпълняват по азбучен ред, независимо от реда на източника.

Няколко @Test метода в един TestNG клас

Изпълнете кода и отворете index.html. Щракнете Хронологичен изглед.

Хронологичен изглед на множество TestNG методи

параметри

За да отмените подредбата по подразбиране, използвайте priority параметър. Параметрите са ключови думи, които променят поведението на анотацията.

  • Присвояване на стойност с =.
  • Затворете параметрите в скоби, поставени непосредствено след анотацията, както е показано по-долу.

TestNG анотация със синтаксис на параметри и стойности

TestNG изпълнява @Test анотации от най-ниската стойност на приоритета до най-високата. Числата на приоритета не е необходимо да са последователни.

Пълен код с параметри на приоритет @Test

HTML отчетът потвърждава, че методите са изпълнени във възходящ ред на приоритет.

TestNG отчет, показващ методите, изпълнявани по възходящ приоритет

Множество параметри

Освен това priority, @Test приема alwaysRun параметър (вярно или невярно). За да използвате два или повече параметъра в една анотация, разделете ги със запетая:

@Test(priority = 0, alwaysRun = true)

Пример за множество параметри в анотация @Test

@BeforeTest и @AfterTest

@BeforeTest Методите под тази анотация се изпълняват преди първия тестов случай в TestNG досие.
@AfterTest Методите под тази анотация се изпълняват след всички тестови случаи в TestNG завършване на файла.

Разгледайте кода по-долу.

package firsttestngpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;

    @BeforeTest
    public void launchBrowser() {
        System.out.println("launching firefox browser");
        driver = new FirefoxDriver();
        driver.get(baseUrl);
    }

    @Test
    public void verifyHomepageTitle() {
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = driver.getTitle();
        Assert.assertEquals(actualTitle, expectedTitle);
    }

    @AfterTest
    public void terminateBrowser() {
        driver.quit();
    }
}

От таблицата и кода можем да предвидим, че последователността ще бъде:

  • 1-ви — launchBrowser()
  • 2-ри — verifyHomepageTitle()
  • 3-ти — terminateBrowser()

Разположението на анотационните блокове в изходния файл не влияе на реда на тяхното изпълнение. Опитайте да разместите методите, както е показано по-долу.

package firsttestngpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;

    @AfterTest                              // Jumbled
    public void terminateBrowser() {
        driver.quit();
    }

    @BeforeTest                             // Jumbled
    public void launchBrowser() {
        System.out.println("launching firefox browser");
        driver = new FirefoxDriver();
        driver.get(baseUrl);
    }

    @Test                                   // Jumbled
    public void verifyHomepageTitle() {
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = driver.getTitle();
        Assert.assertEquals(actualTitle, expectedTitle);
    }
}

Изпълнете кода и проверете резултата.

TestNG резултатът потвърждава поръчката въпреки обърканите анотации

@BeforeMethod и @AfterMethod

@BeforeMethod Методите под тази анотация се изпълняват преди всеки метод на изпитване.
@AfterMethod Методите под тази анотация се изпълняват след всеки метод на изпитване.

In Mercury Да предположим, че искаме да проверим заглавията на две целеви страници, до които се стига от началната страница.

Три връзки от Mercury Начална страница на Tours

Ходът на теста е:

  • Отворете началната страница и проверете нейното заглавие.
  • Щракнете върху РЕГИСТРАЦИЯ и проверете заглавието на целевата страница.
  • Върнете се на началната страница и проверете заглавието.
  • Щракнете върху ПОДДРЪЖКА и проверете заглавието на целевата страница.
  • Върнете се на началната страница и проверете отново заглавието.

Кодът по-долу показва как @BeforeMethod и @AfterMethod обработват повтарящите се стъпки.

package firsttestngpackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;
    public String expected = null;
    public String actual = null;

    @BeforeTest
    public void launchBrowser() {
        System.out.println("launching firefox browser");
        driver = new FirefoxDriver();
        driver.get(baseUrl);
    }

    @BeforeMethod
    public void verifyHomepageTitle() {
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = driver.getTitle();
        Assert.assertEquals(actualTitle, expectedTitle);
    }

    @Test(priority = 0)
    public void register() {
        driver.findElement(By.linkText("REGISTER")).click();
        expected = "Register: Mercury Tours";
        actual = driver.getTitle();
        Assert.assertEquals(actual, expected);
    }

    @Test(priority = 1)
    public void support() {
        driver.findElement(By.linkText("SUPPORT")).click();
        expected = "Under Construction: Mercury Tours";
        actual = driver.getTitle();
        Assert.assertEquals(actual, expected);
    }

    @AfterMethod
    public void goBackToHomepage() {
        driver.findElement(By.linkText("Home")).click();
    }

    @AfterTest
    public void terminateBrowser() {
        driver.quit();
    }
}

След провеждане на теста, TestNG докладва последователността по-долу.

TestNG докладване на последователност, използвайки BeforeMethod и AfterMethod

Накратко: поставете стъпките за настройка вътре @BeforeMethod и почистване или нулиране на навигацията вътре @AfterMethod така че всеки тестов случай започва и завършва в известно състояние.

Резюме на TestNG Анотации

  • @BeforeSuite: изпълнява се преди всички тестове в пакета.
  • @AfterSuite: изпълнява се след всички тестове в пакета.
  • @ПредиТест: изпълнява се преди всеки тестов метод, принадлежащ към класовете вътре в етикет.
  • @СледТест: изпълнява се след всички тестови методи, принадлежащи на класовете вътре в етикет.
  • @BeforeGroups: изпълнява се малко преди първия метод за тестване, който принадлежи към която и да е от изброените групи.
  • @AfterGroups: изпълнява се малко след последния метод за тестване, който принадлежи към която и да е от изброените групи.
  • @BeforeClass: изпълнява се преди първия тестов метод в текущия клас.
  • @AfterClass: изпълнява се след всички тестови методи в текущия клас.
  • @BeforeMethod: изпълнява се преди всеки метод на тестване.
  • @AfterMethod: изпълнява се след всеки метод на тестване.
  • @Тест: маркира метода като тестов случай.

Въпроси и Отговори

JUnit 5 модернизирани JUnit с Jupiter API и модела на разширение. TestNG все още води при паралелно изпълнение, група на ниво пакетping, dependsOn и DataProvider. Много Selenium отбори избират TestNG за цялостни апартаменти и JUnit 5 за модулни тестове.

Добавете parallel=”methods” или parallel=”classes” плюс атрибут за брой нишки към таг вътре в testng.xml. TestNG след това разпределя методите за тестване по нишки, идеално за Selenium Работи между браузъри в мрежа или облак.

@DataProvider захранва множество набори от данни в един метод @Test. Всеки ред в доставчика е едно изпълнение. Това е стандартният шаблон за базирани на данни Selenium тестове срещу формуляри, полета за търсене или екрани за вход.

Да. AI асистентите по кодиране генерират TestNG скелети, анотиране на @Test методи, изграждане на класове Page Object и създаване на масиви DataProvider от примерни CSV файлове, което значително намалява времето за изграждане на скелета.

Генеративният изкуствен интелект (ИИ) приема лог файлове от testng-results.xml и Surefire, клъстерира подобни грешки, предлага вероятни първопричини и изготвя Jira заявки. Това съкращава времето за сортиране на нестабилни тестове и помага на QA ръководителите да приоритизират корекциите на непрекъсваемата интеграция.

Обобщете тази публикация с: