Групи в TestNG
⚡ Розумний підсумок
Групи в TestNG дозволяють позначати методи тестування логічними мітками, а потім включати або виключати їх за допомогою набору XML. Такий підхід спрощує запуски, керовані димом, регресією та залежностями, без переписування. Java Код.
TestNG це фреймворк для тестування, який охоплює модульні, функціональні, наскрізні, інтерфейсні та інтеграційні тести для Java проектів.
Ви можете запустити один пакет або багато пакетів (пакет інкапсулює пов'язані класи у визначеному макеті каталогів), створивши XML-набір та запустивши його через Maven.
TestNG Групи з прикладом
Ви використовуєте групи в TestNG коли:
- Ви ж не хочете розпорошувати методи тестування по багатьох класах виключно за функціональною областю, і
- Ви хочете пропустити (не виконати) вибрані тестові випадки, ніби вони відсутні в кодовій базі.
- Щоб досягти обох цілей, ви об'єднуєте методи в логічні групи. TestNG потім враховує фільтри «включити» та «виключити», заявлені в наборі XML.
Фрагмент нижче показує синтаксис групового тегування, який використовується в тестовому методі.
Тут використовуються дві назви груп, а саме bonding та strong_tiesЦе логічні мітки, які ви можете перейменувати відповідно до вашого проєкту.
Команда <groups> Тег позначає початок групових фільтрів у наборі XML.
Потім ви налаштовуєте XML, щоб вибрати обрану групу з позначених тегами класів. У наведеному нижче прикладі показано синтаксис оголошення групи.
<пробіг>
<включати ім'я=«зв'язування» />
</пробіг>
</групи>
Припустимо, що один клас містить 10 методів тестування.
З цих методів:
- 6 методи перенесення
bondingгрупа, і - 4 методи перенесення
strong_tiesгрупа.
Далі ви налаштовуєте Maven та Java шляхи та використовуйте Eclipse IDE для демонстрації використання груп через XML-файли всередині Java-проект на основі Maven.
Створіть XML для TestNG з тегами
- Файл XML (розширювана мова розмітки) у фреймворку Maven зберігає конфігурацію для одного або кількох тестів, оголошених усередині бирка.
- Кожен тестовий запис загорнутий у мітку та може містити одну або декілька TestNG класи.
- A Java клас з одним або кількома @Тест анотації до його методів розглядаються як TestNG клас.
Кілька тегів послідовно з’являються для створення робочого файлу testng.xml, а саме , , та .
- Команда Тег містить назву рівня набору, яка використовується в TestNG звіти для зведень про виконання.
- Команда <test name=”Guru 99 Демонстрація тесту на дим Тег містить логічну назву тесту; звіт використовує її для підрахунку кількості успішних, неуспішних та пропущених тестів, а також загального часу виконання та метаданих групи.
- Команда тег вказує на тестовий клас, де
com.group.guru99це пакет іTC_Class1це назва класу.
<!DOCTYPE набір SYSTEM «http://testng.org/testng-1.0.dtd»>
<набір ім'я=«Люкс»>
<тест ім'я="Guru 99 Демонстрація тесту на дим>
<групи>
<пробіг>
<включати ім'я=«Сильні зв'язки» />
</пробіг>
</групи>
<класів>
<клас ім'я=«com.group.guru99.TC_Class1» />
</класів>
</тест>
</набір>
Ця конфігурація XML згадується у відеоінструкціях у наступних розділах.
«виключити» або «включити» в тестовий XML
Якщо механізм групування здається занадто складним для невеликого фільтра, пакет testng.xml також дозволяє виключати або включати окремі методи тестування за назвою.
Включити тегСинтаксис тегу includeвключати ім'я=«${TEST_CASE_NAME}» />
Примітка: Ви можете включити або виключити багато тестових випадків за один прогін, і той самий синтаксис застосовується до групових фільтрів.
Використання dependsOnGroups для впорядкованого виконання
Окрім простого включення, TestNG дозволяє одній групі залежати від іншої, використовуючи dependsOnGroups атрибут. Виконавець гарантує, що кожен метод у батьківській групі завершиться до запуску будь-якого залежного методу, що забезпечує надійність попередніх умов.
- Спочатку вхід, потім транзакції: Позначте методи входу за допомогою
group = "auth", та тести на перенесення тегів за допомогоюdependsOnGroups = {"auth"}Тести перенесення запускаються лише після успішного входу в систему. - Пропустити у разі невдачі: Якщо метод у батьківській групі не спрацьовує, TestNG позначає залежні методи як пропущені, замість того, щоб повністю їх провалити, що забезпечує чесність звітів.
- Поєднати з alwaysRun: Методи очищення повинні бути встановлені
alwaysRun = trueтому демонтаж все ще виконується навіть у разі виходу з ладу групи вище за течією.
Ця схема є поширеною для комплексних пакетів, де налаштування API має бути завершено до початку тверджень інтерфейсу користувача.
прогін TestNG Групувати, включати, виключати код (демонстрація відео)
Нижче наведено покроковий посібник з Java код та набір XML, що керують групувати, виключати та включати поведінка.
Тестовий сценарій: Запустити Guru99 демо-версія банківського сайту, перевірте кілька елементів на сторінці входу, введіть облікові дані та повторно перевірте кілька елементів на панелі інструментів після входу.
Примітка: Кожен крок знаходиться у власному методі, але під час виконання порядок залежить від записів у наборі XML.
- Метод 1: Ініціалізуйте браузер та запустіть URL (
tc01LaunchURL()). - Метод 2: Перевірте заголовок сторінки входу (
tc02VerifyLaunchPage()). - Метод 3: Введіть ім'я користувача та пароль у формі входу (
tc03EnterCredentials()). - Метод 4: Перевірте наявність ідентифікатора менеджера на панелі керування користувача (
tc04VerifyLoggedInPage()). - Метод 5: Перевірте додаткові посилання на панелі керування користувача (
tc05VerifyHyperlinks()).
Code для сценарію:
імпорт java.util.concurrent.TimeUnit;
імпорт org.openqa.selenium.By;
імпорт org.openqa.selenium.WebDriver;
імпорт org.openqa.selenium.firefox.FirefoxВодій;
імпорт org.testng.Assert;
імпорт org.testng.annotations.Тест;
громадський клас TC_Class1 {
публічний статичний фінал веб-драйвер вебДрайвер = new FirefoxВодій();
рядок Заголовок сторінки запуску = «//h3[текст()='»Guru99 Банк]”;
остаточний рядок userName_element = «//вхід[@назва='uid']», елемент_пароля = «//введення[@ім'я='пароль']»,
елемент_входу = «//вхід[@назва='кнопкаВхід']»;
остаточний рядок userName_value = «mngr28642», значення_пароля = «ЙдАнат»;
остаточний рядок Ідентифікатор менеджера = «//td[містить(текст(),'Ідентифікатор менеджера')]»;
остаточний рядок новийКлієнт = «//a[@href='addcustomerpage.php']», Переказ коштів = «//a[@href='FundTransInput.php']»;
/** Цей тестовий випадок ініціалізує webDriver */
@Тест(групи = { «зв'язування», «Сильні зв'язки» })
публічна порожнеча tc01ЗапускURL() {
webDriver.manage().window().maximize();
webDriver.manage().timeouts().implicitlyWait(20, Одиниця часу.СЕКУНДИ);
webDriver.get(“https://www.demo.guru99.com/V4/”);
}
/** Перевіряє наявність заголовка на сторінці входу */
@Тест(групи = { «зв'язування» })
публічна порожнеча tc02VerifyLaunchPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
«Заголовок головної сторінки не відображається»);
System.out.println («Відображається заголовок головної сторінки»);
}
/** Вводить ім'я користувача, пароль, а потім натискає кнопку «Вхід» */
@Тест(групи = { «зв'язування», «Сильні зв'язки» })
публічна порожнеча tc03EnterCredentials() {
webDriver.findElement(By.xpath(елемент_ім'я_користувача)).sendKeys(значення_ім'я_користувача);
webDriver.findElement(By.xpath(елемент_пароля)).sendKeys(значення_пароля);
webDriver.findElement(By.xpath(signIn_element)).click();
}
/** Перевіряє ідентифікатор менеджера на інформаційній панелі */
@Тест(групи = { «Сильні зв'язки» })
публічна порожнеча tc04VerifyLoggedInPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
«Мітка ідентифікатора менеджера не відображається»);
System.out.println («Відображається мітка ідентифікатора менеджера»);
}
/** Перевіряє посилання «Новий клієнт» та посилання «Переказ коштів» на інформаційній панелі */
@Тест(групи = { «зв'язування» })
публічна порожнеча tc05VerifyHyperlinks() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
«Гіперпосилання нового клієнта не відображається»);
System.out.println («Відображається гіперпосилання нового клієнта»);
Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
«Гіперпосилання на переказ коштів не відображається»);
System.out.println («Відображається гіперпосилання на переказ коштів»);
}
}
Зверніть увагу: демо-банківські облікові дані залишаються дійсними приблизно 20 днів, тому локальний запуск може показати помилку «недійсні облікові дані» після закінчення цього вікна.
Пояснення коду:
П'ять методів випробувань, по одному на кожну дію, кожен з яких має groups атрибут на @Test анотація
Дві логічні мітки груп – це strong_ties та bonding.
- Перший і третій методи виконують обидва
bondingтаstrong_ties, тому вони запускаються щоразу, коли будь-яка з груп включена до набору. Це поширена схема для спільних тестовий випадок кроки. - Другий метод позначено лише за допомогою
bonding, тому він працює лише тоді, колиbondingгрупа включена. - Четвертий метод позначено лише тегом
strong_ties, тому він запускається лише тоді, коли ця група включена. - П'ятий метод позначено лише тегом
bonding, тому він працює лише тоді, колиbondingгрупа включена.
Далі наведено чотири сценарії виконання:
Сценарій 1: Виконайте кожен метод тестування незалежно від групи. Видаліть <groups> блок із запущеного XML.
Сценарій 2: Запускати лише методи, пов'язані з вибраною групою, а саме strong_ties or bondingБудь ласка, зверніться до відео нижче.
- У першій частині відео,
<groups>блок закоментовано, тому кожен метод тестування виконується. - У другій частині груповий фільтр відновлюється, і запускаються лише відповідні методи.
Сценарій 3: Застосуйте фільтр виключення, щоб пропустити вибрані тестові випадки. Перегляньте відео.
- Демоверсія виключає
tc02за назвою у запущеному XML-файлі, а звіт про результати підтверджує, що виключений метод не виконується.
Сценарій 4: Застосуйте фільтр включення лише для запуску tc01LaunchURL, tc03EnterCredentials та tc05VerifyHyperlinksБудь ласка, зверніться до відео.
У цьому запуску виконуються лише методи, перелічені у фільтрі включення, точно так, як налаштовано.
Завантажте зразок проекту за посиланням нижче.
Висновок
Групи в TestNG розширити структуру Selenium та набори одиниць, замінивши одноразові поділки на класи декларативними XML-фільтрами.
Позначте свої методи за допомогою @Test(groups = {...}), потім використовуйте <include>, <exclude> та dependsOnGroups для керування димом, регресією та наскрізними прогонами з того самого проєкту Maven на TestNG 7.x.


