TestNG Підручник: що таке анотації та фреймворк Selenium
Що таке TestNG?
TestNG це платформа автоматизованого тестування, у якій NG означає «Наступне покоління». TestNG натхненний JUnit який використовує анотації (@). TestNG долає недоліки JUnit і призначений для створення наскрізне тестування легко.
використання TestNG, ви можете створити належний звіт і легко дізнатися, скільки тестів пройдено, невдало та пропущено. Ви можете виконати невдалі тести окремо.
Наприклад:
- Припустимо, у вас є п'ять тестів, для кожного тесту написаний один метод (припустимо, що програма написана з використанням основного методу без використання testNG). Коли ви запускаєте цю програму спочатку, три методи виконуються успішно, а четвертий метод не виконується. Потім виправте помилки, наявні в четвертому методі, тепер ви хочете запустити лише четвертий метод, оскільки перші три методи все одно виконуються успішно. Це неможливо без використання TestNG.
- Команда TestNG in Selenium надає опцію, тобто файл testng-failed.xml у папці test-output. Якщо ви хочете запускати лише невдалі тести, це означає, що ви запускаєте цей файл XML. Він виконуватиме лише невдалі тести.
Окрім вищезазначеної концепції, ви дізнаєтесь більше про TestNG, наприклад, які переваги TestNG, як створити методи тестування за допомогою анотацій @test, як перетворити ці класи у файл тестового пакету та виконати через eclipse, а також із командного рядка.
Навіщо використовувати TestNG з Selenium?
дефолт Selenium тести не генерують належний формат для результатів тесту. Використання TestNG in Selenium, ми можемо створити результати тестування.
міст Selenium користувачі використовують це більше ніж Юніт через його переваги. Є так багато особливостей TestNG, але ми зосередимося лише на найважливіших, які ми можемо використовувати в Selenium. Нижче наведено основні характеристики Selenium TestNG:
- Згенеруйте звіт у належному форматі, включно з кількістю запущених тестів, кількістю пройдених тестів, кількістю невдалих і пропущених тестів.
- Кілька тестів можна легше згрупувати, перетворивши їх у файл testng.xml. У якому ви можете встановити пріоритети, який тестовий приклад має бути виконаний першим.
- Той самий тестовий приклад можна виконати кілька разів без циклів, просто використовуючи ключове слово під назвою «підрахунок викликів».
- Використовуючи testng, ви можете виконувати кілька тестів у кількох браузерах, тобто перехресно тестування браузера.
- Команда TestNG рамку можна легко інтегрувати з такими інструментами, як TestNG Мейвен, Дженкінс тощо.
- Анотації, які використовуються під час тестування, дуже легко зрозуміти, наприклад: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
- WebDriver не має вбудованого механізму для створення звітів. TestNG може створити звіт у зручному для читання форматі, як показано нижче.
- TestNG спрощує кодування тестів. У наших тестах більше немає потреби в статичному основному методі. Послідовність дій регулюється простими для розуміння анотаціями, які не вимагають статичності методів.
- Неперехоплені винятки автоматично обробляються TestNG без передчасного припинення тесту. Ці винятки позначаються у звіті як невдалі кроки.
Переваги TestNG над JUnit
Є три основні переваги TestNG над JUnit:
- Анотації легше зрозуміти
- Тестові випадки можна легше згрупувати
- Можливе паралельне тестування
У чому полягає анотація TestNG?
Анотації в TestNG це рядки коду, які можуть керувати виконанням методу під ними. Їм завжди передує символ @. Дуже рано і швидко TestNG Прикладом є показаний нижче.
Анотації будуть розглянуті пізніше в розділі під назвою «Анотації, які використовуються в TestNG"тому це цілком нормально, якщо ви не розумієте вищесказане TestNG Приклад поки що. Наразі важливо лише зауважити, що анотації в TestNG легше кодувати та розуміти, ніж у JUnit.
Можливість паралельного запуску тестів доступна в TestNG але не в JUnit, Так що TestNG фреймворк є кращим для використання тестувальниками Selenium Сітка.
Як писати тестові приклади TestNG?
Крок 1) Напишіть свою бізнес-логіку та вставте TestNG анотації у вашому коді.
Крок 2) Додайте більше інформації, як-от назву класу, назву групи, назву пакета тощо
Крок 3) Запустіть TestNG.
Створити тестовий приклад за допомогою TestNG Анотації
Тепер ми навчимося створювати наш перший тестовий приклад за допомогою TestNG Анотації в Selenium:
Перш ніж ми створимо тестовий приклад, ми повинні спочатку налаштувати новий TestNG Проект в Eclipse і назвіть його як «ПершийTestNGДемонструвати".
Налаштування нового TestNG Проекти
Крок 1: Натисніть Файл > Створити > Java Проекти
Крок 2: Введіть «ПершийTestNGProject» як назву проекту, а потім натисніть «Далі».
Крок 3: Тепер ми почнемо імпортувати TestNG Бібліотеки на наш проект. Натисніть вкладку «Бібліотеки», а потім «Додати бібліотеку…»
Крок 4: У діалоговому вікні «Додати бібліотеку» виберіть «TestNG»І натисніть Далі.
Крок 5: Натисніть "Готово".
Ви повинні це помітити TestNG включено до списку бібліотек.
Крок 6: Тепер ми додамо файли JAR, які містять Selenium API. Ці файли знаходяться в Java клієнтський драйвер, з якого ми завантажили https://www.selenium.dev/downloads/ коли ми встановлювали Selenium та Eclipse у попередніх розділах.
Потім перейдіть до місця, де ви розмістили Selenium файли JAR.
Після додавання зовнішніх файлів JAR ваш екран має виглядати так.
Крок 7: Натисніть «Готово» та переконайтеся, що наш FirstTestNGПроект видно на EclipseВікно Package Explorer.
Як створити новий TestNG Тестовий файл
Тепер, коли ми закінчили налаштування нашого проекту в цьому TestNG навчальний посібник, давайте створимо новий TestNG файлу.
Крок 1: Натисніть «src» і виберіть інше.
Клацніть правою кнопкою миші папку пакета «src», а потім виберіть «Новий» > «Інше…».
Крок 2: Виберіть TestNG клас.
Натисніть на TestNG папку та виберіть «TestNG клас». Натисніть Далі.
Крок 3: Введіть значення.
Введіть вказані нижче значення у відповідні поля введення та натисніть «Готово». Зверніть увагу, що ми назвали наш Java файл як «ПершийTestNGФайл».
Крок 4: Шаблон створено.
Eclipse повинен автоматично створити шаблон для нашого TestNG файл, показаний нижче.
Кодування нашого Першого TestNG Приклад тестового випадку
Давайте тепер створимо наш перший Тестовий випадок що перевірить, чи Mercury Домашня сторінка Tours правильна. Введіть свій код, як показано нижче TestNG приклад:
package firsttestngpackage; import org.openqa.selenium.*; 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/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @Test public void verifyHomepageTitle() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); driver.close(); } }
Зверніть увагу на наступне.
- TestNG не вимагає наявності методу main().
- Методи не повинні бути статичними.
- Ми використали анотацію @Test. @Test використовується, щоб сказати, що метод під ним є тестовим випадком. У цьому випадку ми встановили метод verifyHomepageTitle() як наш тестовий випадок, тому розмістили над ним анотацію «@Test».
- Оскільки ми використовуємо анотації в TestNG, нам потрібно було імпортувати пакет org.testng.annotations.*.
- Ми використовували клас Assert. Клас Assert використовується для виконання операцій перевірки TestNG. Щоб використовувати його, нам потрібно імпортувати пакет org.testng.Assert.
У вас може бути кілька тестів (отже, кілька анотацій @Test) в одному TestNG файл. Це буде розглянуто більш детально пізніше в розділі «Анотації, які використовуються в TestNG».
Виконання тесту
Щоб запустити тест, просто запустіть файл Eclipse як ти зазвичай робиш. Eclipse надасть два виходи – один у вікні консолі, а інший у TestNG Вікно результатів.
Перевірка створених звітів TestNG
Вікно консолі в Eclipse надає текстовий звіт про результати наших тестів, тоді як TestNG Вікно результатів дає нам графічне зображення.
Створення HTML звітів
TestNG має можливість генерувати звіти у форматі HTML.
Крок 1: Після запуску нашого ПершогоTestNGФайл, який ми створили в попередньому розділі, клацніть правою кнопкою миші назву проекту (FirstTestNGProject) у вікні Project Explorer, а потім натисніть опцію «Оновити».
Крок 2: Зверніть увагу, що була створена папка «test-output». Розгорніть його та знайдіть файл index.html. Цей файл HTML є звітом про результати останнього тестового запуску.
Крок 3: Double-клацніть файл index.html, щоб відкрити його Eclipseвбудований веб-браузер. Ви можете оновити цю сторінку будь-коли після повторного запуску тесту, просто натиснувши клавішу F5, як у звичайних веб-переглядачах.
Анотації, використані в TestNG
У попередньому розділі ви познайомилися з анотацією @Test. Тепер ми вивчатимемо більш розширені анотації та їх використання.
Кілька тестів
Ми можемо використовувати кілька анотацій @Test в одній TestNG файл. За замовчуванням методи, анотовані @Test, виконуються в алфавітному порядку. Перегляньте код нижче. Хоча методи c_test, a_test і b_test не розташовані в алфавітному порядку в коді, вони будуть виконані як такі.
Запустіть цей код і на згенерованій сторінці index.html натисніть «Хронологічний перегляд».
параметри
Якщо ви хочете, щоб методи виконувалися в іншому порядку, використовуйте параметр «пріоритет». Параметри – це ключові слова, які змінюють функцію анотації.
- Для параметрів потрібно призначити значення. Ви робите це, розміщуючи «=» поруч із ними, а потім значення.
- Параметри укладено в пару круглих дужок, які розміщуються відразу після анотації, як у фрагменті коду, показаному нижче.
TestNG виконає анотацію @Test із найнижчим значенням пріоритету до найбільшого. Немає необхідності, щоб ваші пріоритетні значення були послідовними.
Команда TestNG HTML-звіт підтвердить, що методи були виконані на основі зростаючого значення пріоритету.
Кілька параметрів
Окрім «пріоритету», @Test має інший параметр під назвою «alwaysRun», який можна встановити лише як «true» або «false». Щоб використовувати два або більше параметрів в одній анотації, розділіть їх комою як показано нижче.
@Test(priority = 0, alwaysRun = true)
@BeforeTest і @AfterTest
@BeforeTest | будуть виконані методи під цією анотацією до першого тестового випадку в TestNG файл. |
@AfterTest | будуть виконані методи під цією анотацією після всіх тестових випадків у TestNG файл виконується. |
Розглянемо код нижче.
package firsttestngpackage; import org.openqa.selenium.*; 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/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @BeforeTest public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); 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.close(); } }
Застосовуючи логіку, наведену в таблиці та коді вище, ми можемо передбачити, що послідовність, у якій виконуватимуться методи, така:
- 1st – launchBrowser()
- 2nd – verifyHomepageTitle()
- 3rd – terminateBrowser()
Розміщення блоків анотацій можна міняти місцями, не впливаючи на хронологічний порядок, у якому вони виконуватимуться. Розберемося з а TestNG Зробіть приклад і спробуйте змінити розташування блоків анотацій таким чином, щоб ваш код виглядав схожим на наведений нижче.
package firsttestngpackage; import org.openqa.selenium.*; 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/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @AfterTest //Jumbled public void terminateBrowser(){ driver.close(); } @BeforeTest //Jumbled public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); 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.*; 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/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver; public String expected = null; public String actual = null; @BeforeTest public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); 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.close(); } }
Після виконання цього тесту ваш TestNG повинні повідомити наступну послідовність.
Простіше кажучи, @BeforeMethod має містити методи, які вам потрібно запустити перед тим кожен тестовий приклад, тоді як @AfterMethod має містити методи, які вам потрібно запустити після кожен тестовий приклад.
Резюме TestNG Анотації
@BeforeSuite: анотований метод буде запущено до виконання всіх тестів у цьому пакеті.
@AfterSuite: анотований метод буде запущено після виконання всіх тестів у цьому пакеті.
@BeforeTest: Анотований метод буде запущено перед тим, як буде запущено будь-який тестовий метод, що належить до класів усередині тегу.
@AfterTest: Анотований метод буде запущено після виконання всіх тестових методів, що належать до класів усередині тегу.
@BeforeGroups: список груп, які цей метод конфігурації запускатиме раніше. Цей метод гарантовано запуститься незадовго до виклику першого тестового методу, який належить до будь-якої з цих груп.
@AfterGroups: список груп, після яких запускатиметься цей метод налаштування. Цей метод гарантовано запуститься незабаром після виклику останнього тестового методу, який належить до будь-якої з цих груп.
@BeforeClass: Анотований метод буде запущено перед викликом першого тестового методу в поточному класі.
@Після занять: Анотований метод буде запущено після виконання всіх тестових методів у поточному класі.
@BeforeMethod: анотований метод запускатиметься перед кожним тестовим методом.
@AfterMethod: Анотований метод запускатиметься після кожного тестового методу.
@Тест: Анотований метод є частиною тесту
Висновок
- TestNG це Тестування каркас, який здатний створити Selenium тести легші для розуміння та створення звітів, які легко зрозуміти.
- Основні переваги TestNG над JUnit є наступні.
- Анотації простіше використовувати та розуміти.
- Тестові випадки можна легше згрупувати.
- TestNG дозволяє нам створювати паралельні тести.
- Вікно консолі в Eclipse генерує текстовий результат, а TestNG Вікно більш корисне, оскільки воно дає нам графічні виводи результатів тесту та інші важливі деталі, такі як:
- Час виконання кожного методу.
- Хронологічний порядок виконання методів
- TestNG здатний генерувати звіти на основі HTML.
- Анотації можуть використовувати параметри, як і звичайні Java TestNG методи
- TestNG Dataprovider — це спосіб передачі параметрів у тестову функцію, яка передає різні значення в тестових випадках під час одного виконання.