Групи в 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 кода, за да изберете избрана група от маркираните класове. Примерът по-долу показва синтаксиса на декларацията на група.

<групи>
<тичам>
<include име=„свързване“ />
</тичам>
</групи>

Да приемем, че един клас съдържа 10 метода за тестване.

От тези методи:

  • 6 метода извършват bonding група и
  • 4 метода извършват strong_ties група.

След това настройвате Maven и Java пътеки и използвайте Eclipse IDE за демонстриране на групово използване чрез XML файлове вътре в Java-базиран Maven проект.

Създайте XML за TestNG с етикети

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

Няколко тагове се появяват последователно, за да се изгради работещ файл testng.xml, а именно , и .

  • - тагът съдържа името на ниво пакет, използвано в TestNG отчети за обобщения на изпълнението.
  • - <test name=”Guru 99 Демонстрация на тест за дим“> Тагът съдържа логическо име на теста; отчетът го използва за броя на успешните, неуспешните и пропуснатите тестове, както и за общото време за изпълнение и метаданните на групата.
  • - тагът сочи към тестовия клас, където com.group.guru99 е пакетът и TC_Class1 е името на класа.

<!DOCTYPE апартамент СИСТЕМА „http://testng.org/testng-1.0.dtd“>
<апартамент име=„Апартамент“>
<тест име="Guru 99 Демонстрация на тест за дим>
<групи>
<тичам>
<include име=„силни_връзки“ />
</тичам>
</групи>
<класове>
<клас име=„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 {
публичен статичен финал уебдрайвер уебДрайвер = на нови Firefoxдрайвер();

Низ launchPageHeading = „//h3[текст()='“Guru99 Банка];
окончателен Низ userName_elemment = „//вход[@name='uid']“, елемент_на_парола = „//вход[@име='парола']“,
елемент_за_вход = „//вход[@name='btnLogin']“;
окончателен Низ стойност_на_потребител = „mngr28642“, стойност_на_парола = „йдАнат“;
окончателен Низ ИД на мениджър = „//td[съдържа(текст(),'Идентификатор на мениджър')]“;
окончателен Низ новКлиент = „//a[@href='addcustomerpage.php']“, превод на средства = „//a[@href='FundTransInput.php']“;

/** Този тестов случай инициализира webDriver */
@Тест(групи = { „свързване“, „силни_връзки“ })
публична празнота 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(„Показва се заглавието на началната страница“);
}

/** Въвежда потребителско име, парола и след това кликва върху „Вход“ */
@Тест(групи = { „свързване“, „силни_връзки“ })
публична празнота 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 маркира зависимия метод като пропуснат, а не като неуспешен.

Да. Най- groups атрибутът приема масив, така че @Test(groups = {"smoke", "regression"}) поставя по един метод и в двете групи. TestNG изпълнява този метод винаги, когато някоя от групите е включена в пакета, което запазва споделените стъпки НЕАКТУАЛНИ.

TestNG 7.x е поддържаната линия, с издания под org.testng:testng Maven coordinate. Поддържа групите, паралелното изпълнение и слушателите напълно съвместими със съвременните Selenium 4 и JDK 17 проекти.

Инструментите за тестване на въздействието на изкуствения интелект анализират разликите в кода, след което съпоставят променените класове с групите, които ги покриват. Конвейерът изпълнява само маркираните групи при всяка заявка за изтегляне, като същевременно намалява времето за обратна връзка.ping рисковани пътища под изпитание.

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

Обобщете тази публикация с: