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а также другие инструменты непрерывной интеграции.
- Readable аннотации — например, @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
- Selenium WebDriver не имеет встроенной функции формирования отчетов; TestNG Заполняет этот пробел, предоставляя понятный HTML-отчет, подобный приведенному ниже.
- TestNG Упрощает тестовый код. Вам больше не нужен статический метод main; аннотации определяют, что и когда будет выполняться.
- Необработанные исключения корректно обрабатываются системой. TestNGОни регистрируются как неудачные шаги, но при этом выполнение программы полностью не прерывается.
Преимущества TestNG за JUnit
TestNG предлагает три основных преимущества по сравнению с JUnit:
- Аннотации проще понимать и использовать.
- Тестовые случаи можно группировать и расставлять по приоритетам с меньшими усилиями.
- Параллельное выполнение тестов поддерживается по умолчанию.
Что такое аннотация в TestNG?
Аннотации в TestNG Это строки кода, размещенные над методом для управления его выполнением. Они всегда начинаются с символа @. Простой пример показан ниже.
Аннотации подробно описаны в соответствующем разделе. «Аннотации, используемые в TestNG Далее в этом уроке, поэтому приведенный выше пример служит лишь для того, чтобы обозначить ожидания. TestNG Аннотации проще кодировать и читать, чем JUnit эквиваленты, и они необходимы при проведении тестов на Selenium сетка где параллельное выполнение имеет значение.
Как писать тестовые случаи в TestNG
Написание TestNG Тестовый пример состоит из трех шагов:
- Напишите свою бизнес-логику и разместите её. TestNG Примечания над каждым методом.
- Добавьте метаданные, такие как имя класса, имя группы и имя пакета.
- Запустите TestNG Создайте класс в своей IDE или в командной строке.
Создайте тестовый случай, используя TestNG Аннотации
Теперь мы создадим наш первый тестовый пример, используя TestNG аннотации в SeleniumПеред написанием теста создайте новый TestNG проекта в Eclipse и назовите его ИмяTestNGПроект.
Настройка нового TestNG Проект
Шаг 1) Нажмите Файл > Создать > Java Проект.
Шаг 2) Enter ИмяTestNGПроект в качестве названия проекта и нажмите Следующая.
Шаг 3) Импортируйте TestNG библиотеки. Нажмите на Библиотеки и затем Добавить библиотеку….
Шаг 4) В Добавить библиотеку диалога, выберите TestNG и нажмите Следующая.
Шаг 5) Нажмите Завершить.
TestNG Теперь они должны отображаться в списке библиотек.
Шаг 6) Добавьте JAR-файлы, содержащие Selenium API. Они поступают из Java драйвер клиента загружен из selenium.dev/downloads.
Перейдите в папку, в которой находится Selenium JAR-файлы хранятся.
После добавления внешних JAR-файлов экран должен выглядеть примерно так.
Шаг 7) Нажмите Завершить. Новые ИмяTestNGПроект Отображается в обозревателе пакетов.
Как создать новый TestNG Тестовый файл
Когда проект будет готов, создайте новый TestNG .
Шаг 1) Щелкните правой кнопкой мыши src папку и выберите Новое > Другое….
Шаг 2) Развернуть TestNG папку, выберите TestNG класси нажмите Следующая.
Шаг 3) Введите значения, указанные ниже, и нажмите кнопку. Завершить, Java файл назван ИмяTestNGФайл.
Шаг 4) Eclipse генерирует TestNG Шаблон показан ниже.
Ваше первое знакомство с программированием TestNG Тестовый кейс
Создайте первый прецедент что подтверждает название Mercury Домашняя страница туров.
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: Запускается после всех тестов в наборе.
- @BeforeTest: выполняется перед любым методом тестирования, принадлежащим классам внутри ярлык.
- @AfterTest: выполняется после всех методов тестирования, принадлежащих классам внутри ярлык.
- @BeforeGroups: выполняется незадолго до первого метода тестирования, принадлежащего к любой из перечисленных групп.
- @AfterGroups: выполняется вскоре после последнего метода тестирования, принадлежащего к любой из перечисленных групп.
- @BeforeClass: выполняется перед первым методом тестирования в текущем классе.
- @AfterClass: Выполняется после всех методов тестирования в текущем классе.
- @BeforeMethod: выполняется перед каждым методом тестирования.
- @AfterMethod: выполняется после каждого метода тестирования.
- @Тест: Этот метод помечается как тестовый пример.

































