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

Какво е 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 опростява тестовия код. Вече не е необходим статичен main метод; анотациите решават какво се изпълнява и кога.
- Неуловените изключения се обработват грациозно от TestNGТе се отчитат като неуспешни стъпки, без да се прекратява цялото изпълнение.
Предимства на TestNG над JUnit
TestNG предлага три основни предимства пред JUnit:
- Анотациите са по-лесни за разбиране и използване.
- Тестовите случаи могат да бъдат групирани и приоритизирани с по-малко усилия.
- Паралелното изпълнение на тестове се поддържа веднага щом е инсталирано.
Какво е анотация в TestNG?
Анотации в TestNG са редове код, поставени над метод, за да контролират как се изпълнява. Те винаги започват със символа @. По-долу е показан прост пример.
Анотациите са разгледани подробно в раздела „Анотации, използвани в TestNG" по-късно в този урок, така че примерът по-горе е само за задаване на очаквания. TestNG Анотациите са по-лесни за кодиране и четене от JUnit еквиваленти и са от съществено значение при провеждане на тестове върху Selenium решетка където паралелното изпълнение е от значение.
Как да пишете тестови случаи в TestNG
Писане a TestNG Тестовият случай се извършва в три стъпки:
- Напишете вашата бизнес логика и място TestNG анотации над всеки метод.
- Добавете метаданни, като например име на клас, име на група и име на пакет.
- Стартирайте TestNG клас от вашата IDE или от командния ред.
Създайте тестов случай, използвайки TestNG Анотации
Сега ще създадем първия си тестов случай, използвайки TestNG анотации в SeleniumПреди да напишете теста, създайте нов TestNG проект в Eclipse и го наречете ПървоTestNGПроект.
Създаване на нов TestNG Проект
Стъпка 1) Кликнете Файл > Нов > Java Проект.
Стъпка 2) Въведете ПървоTestNGПроект като име на проекта и щракнете Напред.
Стъпка 3) Импортирайте TestNG библиотеки. Кликнете върху Библиотеки и след това Добавяне на библиотека….
Стъпка 4) в Добавяне на библиотека диалогов прозорец, изберете TestNG и кликнете Напред.
Стъпка 5) Кликнете завършеност.
TestNG вече трябва да се появи в списъка с библиотеки.
Стъпка 6) Добавете JAR файловете, които съдържат Selenium API. Те идват от Java клиентският драйвер е изтеглен от selenium.dev/изтегляния.
Отидете до папката, където се намира Selenium JAR файловете се съхраняват.
След добавяне на външните JAR файлове, екранът трябва да изглежда така.
Стъпка 7) Кликнете завършеност. Новата ПървоTestNGПроект се появява в Package Explorer.
Как да създадете нов TestNG Тестови файл
След като проектът е готов, създайте нов TestNG файл.
Стъпка 1) Щракнете с десния бутон върху src папка и изберете Ново > Друго….
Стъпка 2) Разширете TestNG папка, изберете TestNG клас, и кликнете Напред.
Стъпка 3) Въведете показаните по-долу стойности и щракнете завършеност, Най- Java файлът е именуван ПървоTestNGдосие.
Стъпка 4) Eclipse генерира TestNG шаблон, показан по-долу.
Програмиране на първо място 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
Прозорецът на конзолата предоставя текстово обобщение, докато TestNG Прозорецът с резултати показва графичен изглед.
Генериране на HTML отчети
TestNG може също да генерира пълни HTML отчети.
Стъпка 1) След бягане ПървоTestNGдосие, щракнете с десния бутон върху проекта и изберете Обновяване.
Стъпка 2) A тестов изход ще се появи папката. Разгънете я и намерете index.html — HTML отчетът за най-скорошното изпълнение.
Стъпка 3) Double- щракнете index.html да го отвориш отвътре Eclipseбраузъра на . Натиснете F5, за да обновите след бъдещи изпълнения.
Анотации, използвани в TestNG
Вече видяхте анотацията @Test. Останалата част от този раздел обхваща най-полезните разширени анотации.
Множество тестови случаи
Сингъл TestNG Файлът може да съдържа множество @Test анотации. По подразбиране методите, анотирани с @Test, се изпълняват по азбучен ред. В кода по-долу, методите c_test, a_test, и b_test се изпълняват по азбучен ред, независимо от реда на източника.
Изпълнете кода и отворете index.html. Щракнете Хронологичен изглед.
параметри
За да отмените подредбата по подразбиране, използвайте priority параметър. Параметрите са ключови думи, които променят поведението на анотацията.
- Присвояване на стойност с
=. - Затворете параметрите в скоби, поставени непосредствено след анотацията, както е показано по-долу.
TestNG изпълнява @Test анотации от най-ниската стойност на приоритета до най-високата. Числата на приоритета не е необходимо да са последователни.
HTML отчетът потвърждава, че методите са изпълнени във възходящ ред на приоритет.
Множество параметри
Освен това priority, @Test приема alwaysRun параметър (вярно или невярно). За да използвате два или повече параметъра в една анотация, разделете ги със запетая:
@Test(priority = 0, alwaysRun = true)
@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);
}
}
Изпълнете кода и проверете резултата.
@BeforeMethod и @AfterMethod
| @BeforeMethod | Методите под тази анотация се изпълняват преди всеки метод на изпитване. |
| @AfterMethod | Методите под тази анотация се изпълняват след всеки метод на изпитване. |
In Mercury Да предположим, че искаме да проверим заглавията на две целеви страници, до които се стига от началната страница.
Ходът на теста е:
- Отворете началната страница и проверете нейното заглавие.
- Щракнете върху РЕГИСТРАЦИЯ и проверете заглавието на целевата страница.
- Върнете се на началната страница и проверете заглавието.
- Щракнете върху ПОДДРЪЖКА и проверете заглавието на целевата страница.
- Върнете се на началната страница и проверете отново заглавието.
Кодът по-долу показва как @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 докладва последователността по-долу.
Накратко: поставете стъпките за настройка вътре @BeforeMethod и почистване или нулиране на навигацията вътре @AfterMethod така че всеки тестов случай започва и завършва в известно състояние.
Резюме на TestNG Анотации
- @BeforeSuite: изпълнява се преди всички тестове в пакета.
- @AfterSuite: изпълнява се след всички тестове в пакета.
- @ПредиТест: изпълнява се преди всеки тестов метод, принадлежащ към класовете вътре в етикет.
- @СледТест: изпълнява се след всички тестови методи, принадлежащи на класовете вътре в етикет.
- @BeforeGroups: изпълнява се малко преди първия метод за тестване, който принадлежи към която и да е от изброените групи.
- @AfterGroups: изпълнява се малко след последния метод за тестване, който принадлежи към която и да е от изброените групи.
- @BeforeClass: изпълнява се преди първия тестов метод в текущия клас.
- @AfterClass: изпълнява се след всички тестови методи в текущия клас.
- @BeforeMethod: изпълнява се преди всеки метод на тестване.
- @AfterMethod: изпълнява се след всеки метод на тестване.
- @Тест: маркира метода като тестов случай.

































