Групи в TestNG

⚡ Розумний підсумок

Групи в TestNG дозволяють позначати методи тестування логічними мітками, а потім включати або виключати їх за допомогою набору XML. Такий підхід спрощує запуски, керовані димом, регресією та залежностями, без переписування. Java Код.

  • 🏷️ Синтаксис анотації: Скористайтеся кнопкою @Test(groups = {"smoke","regression"}) позначити будь-який метод однією або кількома логічними іменами груп.
  • 📜 XML-керування: Команда <groups><run><include> та <exclude> Теги всередині testng.xml визначають, які методи з тегами фактично виконуватимуться.
  • 🔗 Залежності: Команда dependsOnGroups Атрибут примусово впорядковує, щоб групи попередніх вимог завжди завершувалися раніше, ніж починалися залежні тести.
  • 🤖 Вибір ШІ: Інструменти тестування ШІ зіставляють зміни коду з відповідними групами, тому в кожному коміті запускаються лише відповідні набори.
  • 🧪 TestNG 7.x: Сучасні релізи забезпечують повну сумісність груп з паралельним виконанням, слухачами та конвеєрами Maven Surefire.

Групи в TestNG

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 також дозволяє виключати або включати окремі методи тестування за назвою.

Виключити тегСинтаксис тегу виключеннявиключати ім'я=«${TEST_CASE_NAME}» />
Включити тегСинтаксис тегу includeвключати ім'я=«${TEST_CASE_NAME}» />

Примітка: Ви можете включити або виключити багато тестових випадків за один прогін, і той самий синтаксис застосовується до групових фільтрів.

Використання dependsOnGroups для впорядкованого виконання

Окрім простого включення, TestNG дозволяє одній групі залежати від іншої, використовуючи dependsOnGroups атрибут. Виконавець гарантує, що кожен метод у батьківській групі завершиться до запуску будь-якого залежного методу, що забезпечує надійність попередніх умов.

  • Спочатку вхід, потім транзакції: Позначте методи входу за допомогою group = "auth", та тести на перенесення тегів за допомогою dependsOnGroups = {"auth"}Тести перенесення запускаються лише після успішного входу в систему.
  • Пропустити у разі невдачі: Якщо метод у батьківській групі не спрацьовує, TestNG позначає залежні методи як пропущені, замість того, щоб повністю їх провалити, що забезпечує чесність звітів.
  • Поєднати з alwaysRun: Методи очищення повинні бути встановлені alwaysRun = true тому демонтаж все ще виконується навіть у разі виходу з ладу групи вище за течією.

Ця схема є поширеною для комплексних пакетів, де налаштування API має бути завершено до початку тверджень інтерфейсу користувача.

прогін TestNG Групувати, включати, виключати код (демонстрація відео)

Нижче наведено покроковий посібник з Java код та набір XML, що керують групувати, виключати та включати поведінка.

Тестовий сценарій: Запустити Guru99 демо-версія банківського сайту, перевірте кілька елементів на сторінці входу, введіть облікові дані та повторно перевірте кілька елементів на панелі інструментів після входу.

прогін TestNG Групувати, Включати, Виключати Code

Примітка: Кожен крок знаходиться у власному методі, але під час виконання порядок залежить від записів у наборі XML.

  • Метод 1: Ініціалізуйте браузер та запустіть URL (tc01LaunchURL()).
  • Метод 2: Перевірте заголовок сторінки входу (tc02VerifyLaunchPage()).
  • Метод 3: Введіть ім'я користувача та пароль у формі входу (tc03EnterCredentials()).
  • Метод 4: Перевірте наявність ідентифікатора менеджера на панелі керування користувача (tc04VerifyLoggedInPage()).
  • Метод 5: Перевірте додаткові посилання на панелі керування користувача (tc05VerifyHyperlinks()).

Code для сценарію:

пакет com.group.guru99;

імпорт 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Будь ласка, зверніться до відео.

У цьому запуску виконуються лише методи, перелічені у фільтрі включення, точно так, як налаштовано.

Завантажте зразок проекту за посиланням нижче.

Завантажте вищезазначене Code

Висновок

Групи в TestNG розширити структуру Selenium та набори одиниць, замінивши одноразові поділки на класи декларативними XML-фільтрами.

Позначте свої методи за допомогою @Test(groups = {...}), потім використовуйте <include>, <exclude> та dependsOnGroups для керування димом, регресією та наскрізними прогонами з того самого проєкту Maven на TestNG 7.x.

Поширені запитання

Група — це логічна мітка, додана до методу тестування через groups атрибут на @TestПотім пакет XML вибирає групи за допомогою фільтрів включення та виключення, тож ви вирішуєте під час виконання, які методи з тегами виконуватимуться.

Всередині <groups><run>, <include name="..."> групи з білого списку тегів для запуску та <exclude name="..."> блокує їх. TestNG застосовує виключення після включень, тому виключена група завжди пропускається, навіть якщо вона також вказана в включенні.

Команда dependsOnGroups атрибут на @Test війська TestNG запустити кожен метод у переліченій групі перед запуском залежного методу. Якщо будь-який з попередніх методів завершиться невдачею, TestNG позначає залежний метод як пропущений, а не як невдалий.

Так. The groups атрибут приймає масив, тому @Test(groups = {"smoke", "regression"}) розміщує один метод в обох групах. TestNG запускає цей метод щоразу, коли будь-яка з груп включена до набору, що зберігає спільні кроки СУХИМИ.

TestNG 7.x — це підтримувана лінія з релізами під назвою org.testng:testng Maven coordinate. Він забезпечує повну сумісність груп, паралельного виконання та слухачів із сучасними Selenium 4 та проекти JDK 17.

Інструменти тестування впливу штучного інтелекту аналізують відмінності коду, а потім зіставляють змінені класи з групами, які їх охоплюють. Конвеєр запускає лише ті групи, що позначені тегами, у кожному запиті на зняття, скорочуючи час зворотного зв'язку та зберігаючиping ризиковані шляхи, що перебувають на випробуванні.

Так. Алгоритми кластеризації ШІ читають журнали історичних збоїв, позначають ненадійні тести та пропонують стабільну підмножину з тегом regressionІнженери затверджують список, потім TestNG щовечора запускає цю групу, що забезпечує щільне покриття без втрати зв'язку.

Підсумуйте цей пост за допомогою: