Группы в TestNG

⚡ Умное резюме

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

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

Группы в TestNG

TestNG Это фреймворк для тестирования, который охватывает модульные, функциональные, сквозные, пользовательские и интеграционные тесты для Java проектов.

Вы можете запустить один или несколько пакетов (пакет инкапсулирует связанные классы в определенной структуре каталогов), создав XML-пакет и запустив его через Maven.

TestNG Группы с примером

Группы используются в TestNG когда:

  • Не стоит разбрасывать тестовые методы по множеству классов, руководствуясь исключительно функциональной областями, и
  • Вы хотите пропустить (а не выполнить) выбранные тестовые случаи, как если бы они отсутствовали в коде.
  • Для достижения обеих целей вы объединяете методы в логические группы. TestNG затем учитывает фильтры «включить» и «исключить», объявленные в XML-пакете.

Приведённый ниже фрагмент кода демонстрирует синтаксис групповой маркировки, используемый в тестовом методе.

@Контрольная работа (группы знак равно «сближение», “strong_ties” })

Здесь используются два названия групп, а именно: bonding и strong_tiesЭто логичные метки, которые вы можете переименовать в соответствии со своим проектом.

<groups> Этот тег обозначает начало групповых фильтров внутри XML-пакета.

Затем вы настраиваете XML-код, чтобы выбрать нужную группу из помеченных классов. В приведенном ниже примере показан синтаксис объявления группы.

<группы>
<пробег>
<включают имя=«сближение» />
</пробег>
</группы>

Предположим, что один класс содержит 10 тестовых методов.

Из этих методов:

  • 6 метода обеспечивают bonding группа и
  • 4 метода обеспечивают strong_ties группа.

Далее вы настраиваете Maven и Java пути и использовать Eclipse IDE для демонстрации группового использования с помощью XML-файлов внутри JavaПроект на основе Maven.

Создать XML для TestNG с тэгами

  • В Maven XML-файл (Extensible Markup Language) хранит конфигурацию для одного или нескольких тестов, объявленных внутри файла. тег.
  • Каждая тестовая запись заключена в бирка и может вмещать одну или несколько TestNG классов.
  • A Java класс с одним или несколькими @Контрольная работа Аннотации к его методам рассматриваются как TestNG класса.

Для создания рабочего файла testng.xml последовательно отображается несколько тегов, а именно: , , и .

  • В теге указывается имя уровня пакета, используемое в TestNG отчеты для сводных данных об исполнении.
  • <test name=”Guru 99-градусная демонстрация дымоудаления В теге содержится логическое имя теста; в отчете оно используется для подсчета пройденных, не пройденных и пропущенных тестов, а также для учета общего времени выполнения и метаданных группы.
  • Тег указывает на тестовый класс, где com.group.guru99 это пакет и TC_Class1 — это название класса.

<!DOCTYPE suite СИСТЕМА “http://testng.org/testng-1.0.dtd”>
<suite имя=«Сюита»>
<тест имя= Guru Демонстрация дымоудаления на 99%>
<группы>
<пробег>
<включают имя=“strong_ties” />
</пробег>
</группы>
<классов>
<класс имя=“com.group.guru99.TC_Class1” />
</классов>
</тест>
</suite>

Данная XML-конфигурация будет рассмотрена в видеоинструкциях в следующих разделах.

«исключить» или «включить» в тестовый XML

Если механизм группировки кажется слишком сложным для небольшого фильтра, набор тестов testng.xml также позволяет исключать или включать отдельные методы тестирования по имени.

Исключить тегСинтаксис для тега исключенияисключать имя=“${TEST_CASE_NAME}” />
Включить тег: Синтаксис для тега includeвключают имя=“${TEST_CASE_NAME}” />

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

Использование dependsOnGroups для упорядоченного выполнения

Помимо простого включения, TestNG позволяет одной группе зависеть от другой, используя dependsOnGroups атрибут. Исполнитель гарантирует, что каждый метод в родительской группе завершится до начала любого зависимого метода, что обеспечивает надежность предварительных условий.

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

Такая схема характерна для комплексных тестовых пакетов, где настройка API должна завершиться до начала проверки пользовательского интерфейса.

Run TestNG Группировать, включать, исключать код (демо-видео)

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

Сценарий тестирования: Запустить GuruНа демонстрационном банковском сайте (99 пунктов) проверьте несколько элементов на странице входа, введите учетные данные и повторно проверьте несколько пунктов на панели управления после входа в систему.

Run 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.Test;

открытый класс TC_Class1 {
публичный статический финал Вебдрайвер webDriver = новый FirefoxВодитель();

строка launchPageHeading = “//h3[text()='Guru99 Банк']”;
окончательный строка userName_element = “//input[@name='uid']”, password_element = “//input[@name='password']”,
signIn_element = “//input[@name='btnLogin']”;
окончательный строка userName_value = “mngr28642”, password_value = “ydAnate”;
окончательный строка managerID = “//td[contains(text(),'Manger Id')]”;
окончательный строка новыйКлиент = “//a[@href='addcustomerpage.php']”, fundTransfer = “//a[@href='FundTransInput.php']”;

/** Этот тестовый пример инициализирует webDriver */
@Контрольная работа(группы знак равно «сближение», “strong_ties” })
общественная пустота tc01LaunchURL() {
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 («Отображается заголовок главной страницы»);
}

/** Вводит имя пользователя, пароль, затем нажимает кнопку "Войти" */
@Контрольная работа(группы знак равно «сближение», “strong_ties” })
общественная пустота tc03EnterCredentials() {
webDriver.findElement(By.xpath(userName_element)).sendKeys(userName_value);
webDriver.findElement(By.xpath(password_element)).sendKeys(password_value);
webDriver.findElement(By.xpath(signIn_element)).click();
}

/** Проверяет идентификатор менеджера на панели управления */
@Контрольная работа(группы знак равно “strong_ties” })
общественная пустота 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Пожалуйста, посмотрите видео.

В этом режиме выполнения выполняются только методы, перечисленные в фильтре include, в точности в соответствии с настройкой.

Скачайте пример проекта по ссылке ниже.

Загрузите вышеуказанное Code

Заключение

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

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

Часто задаваемые вопросы (FAQ)

Группа — это логическая метка, присваиваемая методу тестирования посредством groups атрибут на @TestЗатем XML-пакет выбирает группы, используя фильтры включения и исключения, поэтому вы сами решаете во время выполнения, какие помеченные методы будут выполняться.

внутри <groups><run>, <include name="..."> теги добавляют группы в белый список для запуска, и <exclude name="..."> блокирует их. TestNG Функция «исключать» применяется после функции «включать», поэтому исключаемая группа всегда пропускается, даже если она также указана в функции «включать».

dependsOnGroups атрибут на @Test сил TestNG Перед запуском зависимого метода необходимо выполнить все методы из указанной группы. Если какой-либо из необходимых методов завершится с ошибкой, TestNG Помечает зависимый метод как пропущенный, а не как неудачный.

Да. groups Атрибут принимает массив, поэтому @Test(groups = {"smoke", "regression"}) в обеих группах присутствует один и тот же метод. TestNG Этот метод выполняется всякий раз, когда любая из групп включена в набор тестов, что обеспечивает принцип DRY (Don't Repeat Yourself — не повторяйте себя).

TestNG 7.x — это поддерживаемая версия, выпуски которой выходят под этим брендом. org.testng:testng Maven coordinate. Он обеспечивает полную совместимость групп, параллельного выполнения и слушателей с современными технологиями. Selenium Проекты 4 и JDK 17.

Инструменты анализа влияния изменений на тестирование с помощью ИИ анализируют различия в коде, а затем сопоставляют измененные классы с группами, которые их охватывают. Конвейер запускает только эти помеченные группы в каждом запросе на слияние, сокращая время обратной связи и сохраняя при этомping Проводятся испытания рискованных маршрутов.

Да. Алгоритмы кластеризации на основе ИИ анализируют исторические журналы сбоев, отмечают нестабильные тесты и предлагают стабильное подмножество, помеченное как... regressionИнженеры утверждают список, затем TestNG Эта группа запускает свою работу каждую ночь, что позволяет поддерживать работу студии в ограниченном объеме без потери качества связи.

Подведем итог этой публикации следующим образом: