Групи в TestNG
⚡ Умно обобщение
Групи в TestNG позволява ви да маркирате тестови методи с логически етикети, след което да ги включвате или изключвате чрез XML пакет. Този подход опростява изпълненията, базирани на дим, регресия и зависимости, без да е необходимо пренаписване. Java код.

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 ви позволява също да изключвате или включвате отделни методи за тестване по име.
Включване на етикетСинтаксис за етикет за включване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 {
публичен статичен финал уебдрайвер уебДрайвер = на нови 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Моля, вижте видеото.
В това изпълнение се изпълняват само методите, изброени във филтъра за включване, точно както са конфигурирани.
Изтеглете примерния проект от линка по-долу.
Заключение
Групи в TestNG разшири структурата Selenium и пакети от единици чрез заместване на еднократните разделяния на класове с декларативни XML филтри.
Маркирайте методите си с @Test(groups = {...}), след това използвайте <include>, <exclude>, и dependsOnGroups да се управляват димни, регресионни и цялостни изпълнения от един и същ Maven проект на TestNG 7.x.

