Grupy w TestNG
โก Inteligentne podsumowanie
Grupy w TestNG Umoลผliwiajฤ oznaczanie metod testowych logicznymi etykietami, a nastฤpnie uwzglฤdnianie lub wykluczanie ich za pomocฤ pakietu XML. Takie podejลcie upraszcza testy dymne, regresjฤ i testy zaleลผne od zaleลผnoลci bez koniecznoลci ponownego pisania kodu. Java kod.
TestNG jest strukturฤ testowฤ obejmujฤ cฤ testy jednostkowe, funkcjonalne, kompleksowe, interfejsu uลผytkownika i integracyjne Java projektรณw.
Moลผesz uruchomiฤ pojedynczy pakiet lub wiele pakietรณw (pakiet hermetyzuje powiฤ zane klasy w zdefiniowanym ukลadzie katalogรณw), tworzฤ c zestaw XML i uruchamiajฤ c go za pomocฤ Maven.
TestNG Grupy z przykลadem
Uลผywasz grup w TestNG kiedy:
- Nie chcesz rozpraszaฤ metod testowych w wielu klasach wyลฤ cznie wedลug obszaru funkcjonalnego,
- Chcesz pominฤ ฤ (nie wykonaฤ) wybrane przypadki testowe, tak jakby nie istniaลy w bazie kodu.
- Aby osiฤ gnฤ ฤ oba cele, naleลผy tagowaฤ metody, dzielฤ c je na logiczne grupy. TestNG nastฤpnie uwzglฤdnia filtry โincludeโ i โexcludeโ zadeklarowane w pakiecie XML.
Poniลผszy fragment kodu przedstawia skลadniฤ tagowania grup uลผytฤ w metodzie testowej.
Tutaj uลผyto dwรณch nazw grup, mianowicie bonding oraz strong_tiesSฤ
to logiczne etykiety, ktรณrym moลผesz nadaฤ nazwฤ dostosowanฤ
do Twojego projektu.
<groups> tag oznacza poczฤ
tek filtrรณw grupowych wewnฤ
trz pakietu XML.
Nastฤpnie dostosowujesz kod XML, aby wybraฤ grupฤ spoลrรณd oznaczonych klas. Poniลผszy przykลad pokazuje skลadniฤ deklaracji grupy.
<biegaฤ>
<zawieraฤ Nazwa=โwiฤ zanieโ />
</biegaฤ>
</grupy>
Zaลรณลผmy, ลผe pojedyncza klasa zawiera 10 metod testowych.
Spoลrรณd tych metod:
- 6 metody niosฤ
ze sobฤ
bondinggrupa i - 4 metody niosฤ
ze sobฤ
strong_tiesgrupa.
Nastฤpnie skonfiguruj Maven i Java ลcieลผki i uลผyj Eclipse IDE do demonstracji korzystania z grupy za pomocฤ plikรณw XML w Java- oparty na Maven projekt.
Utwรณrz XML dla TestNG z tagami
- Plik XML (Extensible Markup Language) w ลrodowisku Maven przechowuje konfiguracjฤ jednego lub wiฤkszej liczby testรณw zadeklarowanych w pliku etykietka.
- Kaลผdy wpis testowy jest zawiniฤty w etykieta i moลผe pomieลciฤ jeden lub wiฤcej TestNG Klasy.
- A Java klasa z jednym lub wiฤcej @Test adnotacje dotyczฤ ce jego metod sฤ traktowane jako TestNG class.
W celu utworzenia dziaลajฤ cego pliku testng.xml pojawiajฤ siฤ kolejno wielokrotne znaczniki, a mianowicie , , I .
- tag zawiera nazwฤ na poziomie pakietu uลผywanฤ w TestNG raporty podsumowujฤ ce wykonanie.
- <test name=โGuru 99 Demo testu dymnegoโ> Tag zawiera logicznฤ nazwฤ testu; raport uลผywa jej do okreลlania liczby zaliczonych, niezaliczonych i pominiฤtych testรณw, a takลผe caลkowitego czasu wykonania i metadanych grupy.
- znacznik wskazuje na klasฤ testowฤ
, gdzie
com.group.guru99jest pakietem iTC_Class1jest nazwฤ klasy.
<!DOCTYP apartament SYSTEM โhttp://testng.org/testng-1.0.dtdโ>
<apartament Nazwa="Apartament">
<test Nazwa="Guru 99 Demo testu dymnegoโ>
<grupy>
<biegaฤ>
<zawieraฤ Nazwa=โsilne_wiฤziโ />
</biegaฤ>
</grupy>
<Klasy>
<klasa Nazwa=โcom.group.guru99.TC_Class1โ />
</Klasy>
</test>
</apartament>
Do tej konfiguracji XML odnoszฤ siฤ filmy instruktaลผowe w kolejnych sekcjach.
โwykluczโ lub โwลฤ czโ w testowym formacie XML
Jeลli mechanizm grupowy wydaje siฤ zbyt ciฤลผki w przypadku maลego filtra, pakiet testng.xml umoลผliwia rรณwnieลผ wykluczanie lub uwzglฤdnianie poszczegรณlnych metod testowych wedลug nazwy.
Doลฤ cz tag:Skลadnia znacznika includezawieraฤ Nazwa=โ${TEST_CASE_NAME}โ />
Uwaga: Moลผna uwzglฤdniฤ lub wykluczyฤ wiele przypadkรณw testowych w jednym przebiegu. Ta sama skลadnia dotyczy filtrรณw grup.
Korzystanie z dependOnGroups w celu wykonania w kolejnoลci uporzฤ dkowanej
Poza prostym wลฤ
czeniem, TestNG pozwala jednej grupie polegaฤ na drugiej, korzystajฤ
c dependsOnGroups Atrybut. Runner zapewnia, ลผe โโkaลผda metoda w grupie nadrzฤdnej zakoลczy siฤ przed uruchomieniem jakiejkolwiek metody zaleลผnej, co zapewnia niezawodnoลฤ warunkรณw wstฤpnych.
- Najpierw zaloguj siฤ, potem transakcje: Oznacz metody logowania tagiem
group = "auth"i testy transferu tagรณw zdependsOnGroups = {"auth"}Testy transferu zostanฤ uruchomione dopiero po pomyลlnym zalogowaniu. - Pomiล w przypadku niepowodzenia: Jeลผeli metoda w grupie nadrzฤdnej zawiedzie, TestNG oznacza metody zaleลผne jako pominiฤte zamiast od razu je odrzucaฤ, co zapewnia uczciwoลฤ raportรณw.
- Poลฤ
cz z alwaysRun: Naleลผy ustawiฤ metody czyszczenia
alwaysRun = truewiฤc demontaลผ nadal trwa, nawet jeลli grupa nadrzฤdna zawiedzie.
Ten wzorzec jest powszechny w przypadku kompleksowych pakietรณw, w ktรณrych konfiguracja interfejsu API musi zostaฤ ukoลczona przed rozpoczฤciem obsลugi interfejsu uลผytkownika.
Uruchom TestNG Grupuj, doลฤ czaj, wykluczaj kod (pokaz wideo)
Poniลผej znajduje siฤ opis przejลcia Java kod i pakiet XML, ktรณry napฤdza grupowaฤ, wykluczaฤ i uwzglฤdniaฤ zachowanie.
Scenariusz testowy: Uruchom Guru99 witryna demonstracyjna banku, sprawdลบ kilka elementรณw na stronie logowania, wprowadลบ dane logowania i ponownie zweryfikuj kilka pozycji na pulpicie po zalogowaniu.
Uwaga: Kaลผdy krok znajduje siฤ w osobnej metodzie, ale w czasie wykonywania kolejnoลฤ zaleลผy od wpisรณw w pakiecie XML.
- Metoda 1: Zainicjuj przeglฤ
darkฤ i uruchom jฤ
URL (
tc01LaunchURL()). - Metoda 2: Sprawdลบ nagลรณwek strony logowania (
tc02VerifyLaunchPage()). - Metoda 3: Wprowadลบ nazwฤ uลผytkownika i hasลo w formularzu logowania (
tc03EnterCredentials()). - Metoda 4: Sprawdลบ obecnoลฤ identyfikatora menedลผera na pulpicie uลผytkownika (
tc04VerifyLoggedInPage()). - Metoda 5: Sprawdลบ dodatkowe linki na pulpicie uลผytkownika (
tc05VerifyHyperlinks()).
Code dla scenariusza:
importowaฤ java.util.concurrent.TimeUnit;
importowaฤ org.openqa.selenium.By;
importowaฤ org.openqa.selenium.WebDriver;
importowaฤ org.openqa.selenium.firefox.FirefoxKierowcy;
importowaฤ org.testng.Assert;
importowaฤ org.testng.adnotacje.Test;
Klasa publiczna TC_Class1 {
publiczny statyczny ostateczny Sterownik sieciowy webDriver = nowych FirefoxKierowca();
sznur launchPageHeading = โ//h3[tekst()='Guru99 Bank]โ;
finaล sznur element_nazwy_uลผytkownika = โ//input[@name='uid']โ, element_hasลa = โ//input[@name='hasลo']โ,
element_signIn = โ//input[@name='btnLogin']โ;
finaล sznur wartoลฤ_nazwy_uลผytkownika = โmngr28642โ, wartoลฤ_hasลa = โydAnateโ;
finaล sznur managerID = โ//td[zawiera(tekst(),'Identyfikator menedลผera')]โ;
finaล sznur nowyKlient = โ//a[@href='addcustomerpage.php']โ, transfer ลrodkรณw = โ//a[@href='FundTransInput.php']โ;
/** Ten przypadek testowy inicjuje webDriver */
@Test(grupy = { โwiฤ
zanieโ, โsilne_wiฤziโ })
publiczna niewaลผnoลฤ tc01LaunchURL() {
webDriver.manage().window().maximize();
webDriver.manage().timeouts().implicitlyWait(20, JednostkaCzasu.SEKUNDY);
webDriver.get(โhttps://www.demo.guru99.com/V4/โ);
}
/** Sprawdza obecnoลฤ nagลรณwka na stronie logowania */
@Test(grupy = { โwiฤ
zanieโ })
publiczna niewaลผnoลฤ tc02VerifyLaunchPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
โNagลรณwek strony gลรณwnej nie jest wyลwietlanyโ);
System.out.println(โWyลwietlany jest nagลรณwek strony gลรณwnejโ);
}
/** Wprowadza nazwฤ uลผytkownika, hasลo, a nastฤpnie klika zaloguj siฤ */
@Test(grupy = { โwiฤ
zanieโ, โsilne_wiฤziโ })
publiczna niewaลผnoลฤ tc03EnterCredentials() {
webDriver.findElement(By.xpath(element_nazwy_uลผytkownika)).sendKeys(wartoลฤ_nazwy_uลผytkownika);
webDriver.findElement(By.xpath(element_hasลa)).sendKeys(wartoลฤ_hasลa);
webDriver.findElement(By.xpath(signIn_element)).click();
}
/** Weryfikuje identyfikator menedลผera na pulpicie */
@Test(grupy = { โsilne_wiฤziโ })
publiczna niewaลผnoลฤ tc04ZweryfikujZalogowanฤ
Stronฤ() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
โEtykieta ID menedลผera nie jest wyลwietlanaโ);
System.out.println(โWyลwietlana jest etykieta identyfikatora menedลผeraโ);
}
/** Sprawdza link โNowy klientโ i link โPrzelew ลrodkรณwโ na pulpicie nawigacyjnym */
@Test(grupy = { โwiฤ
zanieโ })
publiczna niewaลผnoลฤ tc05Zweryfikuj hiperลฤ
cza() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
โNowy link klienta nie jest wyลwietlanyโ);
System.out.println(โWyลwietlany jest nowy link klientaโ);
Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
โHiperlink do przelewu ลrodkรณw nie jest wyลwietlanyโ);
System.out.println(โWyลwietlany jest hiperลฤ
cze do przelewu ลrodkรณwโ);
}
}
Naleลผy pamiฤtaฤ: dane uwierzytelniajฤ ce do konta demonstracyjnego pozostajฤ waลผne przez okoลo 20 dni, wiฤc po upลywie tego okresu przy prรณbie uruchomienia konta lokalnego moลผe pojawiฤ siฤ bลฤ d โnieprawidลowe dane uwierzytelniajฤ ceโ.
Wyjaลnienie kodu:
Piฤฤ metod testowych, po jednej na dziaลanie, kaลผda niesie ze sobฤ
groups atrybut na @Test adnotacja.
Dwie logiczne etykiety grupowe to strong_ties oraz bonding.
- Pierwsza i trzecia metoda niosฤ
ze sobฤ
oba
bondingorazstrong_ties, wiฤc uruchamiajฤ siฤ zawsze, gdy ktรณraล z grup jest w pakiecie. Jest to typowy wzorzec dla wspรณลdzielonych walizka testowa kroki. - Druga metoda jest oznaczona tylko tagiem
bonding, wiฤc dziaลa tylko wtedy, gdybondinggrupa jest uwzglฤdniona. - Czwarta metoda jest oznaczona tylko tagiem
strong_ties, wiฤc dziaลa tylko wtedy, gdy ta grupa jest uwzglฤdniona. - Piฤ
ta metoda jest oznaczona tylko tagiem
bonding, wiฤc dziaลa tylko wtedy, gdybondinggrupa jest uwzglฤdniona.
Poniลผej przedstawiono cztery scenariusze realizacji:
Scenariusz 1: Uruchom kaลผdฤ
metodฤ testowฤ
niezaleลผnie od grupy. Usuล <groups> blok z uruchomionego pliku XML.
Scenariusz 2: Uruchamiaj tylko metody powiฤ
zane z wybranฤ
grupฤ
, mianowicie strong_ties or bondingProszฤ obejrzeฤ poniลผszy film.
- W pierwszej czฤลci filmu
<groups>blok jest zakomentowany, wiฤc kaลผda metoda testowa jest uruchamiana. - W drugiej czฤลci przywrรณcony zostaje filtr grupy i uruchomione zostanฤ tylko pasujฤ ce metody.
Scenariusz 3: Zastosuj filtr wykluczeล, aby pominฤ ฤ wybrane przypadki testowe. Obejrzyj film.
- Wersja demonstracyjna nie obejmuje
tc02wedลug nazwy w dziaลajฤ cym pliku XML, a raport wynikรณw potwierdza, ลผe โโwykluczona metoda nie zostanie uruchomiona.
Scenariusz 4: Zastosuj filtr โuwzglฤdnijโ, aby uruchomiฤ tylko tc01LaunchURL, tc03EnterCredentials, tc05VerifyHyperlinks. Proszฤ obejrzeฤ film.
W tym przebiegu wykonywane sฤ tylko metody wymienione w filtrze include, dokลadnie tak, jak je skonfigurowano.
Pobierz przykลadowy projekt, klikajฤ c poniลผszy link.
Wniosek
Grupy w TestNG wnieลฤ strukturฤ do duลผego Selenium i pakietรณw jednostek poprzez zastฤ pienie jednorazowych podziaลรณw klas deklaratywnymi filtrami XML.
Oznacz swoje metody tagami @Test(groups = {...}), a nastฤpnie uลผyj <include>, <exclude>, dependsOnGroups aby wywoลaฤ dym, regresjฤ i kompleksowe przebiegi z tego samego projektu Maven TestNG 7.x.


