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.

  • ๐Ÿท๏ธ Skล‚adnia adnotacji: Zastosowanie @Test(groups = {"smoke","regression"}) aby oznaczyฤ‡ dowolnฤ… metodฤ™ jednฤ… lub wieloma logicznymi nazwami grup.
  • ๐Ÿ“œ Kontrolka XML: <groups><run><include> oraz <exclude> Tagi wewnฤ…trz pliku testng.xml decydujฤ…, ktรณre oznaczone metody faktycznie zostanฤ… wykonane.
  • ๐Ÿ”— Zaleลผnoล›ci: dependsOnGroups Atrybut wymusza kolejnoล›ฤ‡, wiฤ™c grupy warunkรณw wstฤ™pnych zawsze koล„czฤ… siฤ™ przed rozpoczฤ™ciem testรณw zaleลผnych.
  • ๐Ÿค– Wybรณr AI: Narzฤ™dzia do badania wpล‚ywu testรณw AI mapujฤ… zmiany w kodzie na odpowiednie grupy, dziฤ™ki czemu przy kaลผdym zatwierdzeniu uruchamiane sฤ… tylko pakiety, ktรณrych dotyczฤ… zmiany.
  • ๐Ÿงช TestNG 7.x: Nowoczesne wersje zapewniajฤ… peล‚nฤ… zgodnoล›ฤ‡ grup z wykonywaniem rรณwnolegล‚ym, obiektami nasล‚uchujฤ…cymi i potokami Maven Surefire.

Grupy w TestNG

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.

@Test (grupy = { โ€žwiฤ…zanieโ€, โ€žsilne_wiฤ™ziโ€ })

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.

<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ฤ… bonding grupa i
  • 4 metody niosฤ… ze sobฤ… strong_ties grupa.

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.guru99 jest pakietem i TC_Class1 jest 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.

Wyklucz tag:Skล‚adnia dla znacznika wykluczajฤ…cegowykluczaฤ‡ Nazwa=โ€œ${TEST_CASE_NAME}โ€ />
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 z dependsOnGroups = {"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 = true wiฤ™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.

Uruchom TestNG Grupuj, uwzglฤ™dniaj, wykluczaj Code

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:

pakiet com.group.guru99;

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 bonding oraz strong_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, gdy bonding grupa 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, gdy bonding grupa 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 tc02 wedล‚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.

Pobierz powyลผsze Code

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.

FAQ

Grupa to logiczna etykieta doล‚ฤ…czona do metody testowej za pomocฤ… groups atrybut na @TestNastฤ™pnie pakiet XML wybiera grupy za pomocฤ… filtrรณw include i exclude, dziฤ™ki czemu w czasie wykonywania moลผesz zdecydowaฤ‡, ktรณre oznaczone metody zostanฤ… wykonane.

Wewnฤ…trz <groups><run>The <include name="..."> oznaczanie grup na biaล‚ej liล›cie do uruchomienia i <exclude name="..."> blokuje je. TestNG stosuje wykluczenia po doล‚ฤ…czeniach, wiฤ™c wykluczona grupa jest zawsze pomijana, nawet jeล›li jest rรณwnieลผ uwzglฤ™dniona w doล‚ฤ…czeniu.

dependsOnGroups atrybut na @Test wojska TestNG aby uruchomiฤ‡ kaลผdฤ… metodฤ™ z wymienionej grupy przed uruchomieniem metody zaleลผnej. Jeล›li ktรณrakolwiek z wymaganych metod zawiedzie, TestNG oznacza metodฤ™ zaleลผnฤ… jako pominiฤ™tฤ…, a nie nieudanฤ….

Tak. groups atrybut akceptuje tablicฤ™, wiฤ™c @Test(groups = {"smoke", "regression"}) umieszcza jednฤ… metodฤ™ w obu grupach. TestNG uruchamia tฤ™ metodฤ™ zawsze, gdy ktรณraล› z grup jest uwzglฤ™dniona w pakiecie, co sprawia, ลผe โ€‹โ€‹wspรณล‚dzielone kroki pozostajฤ… suche.

TestNG Wersja 7.x jest liniฤ… utrzymanฤ…, z wydaniami pod org.testng:testng Maven Coordinate. Zapewnia peล‚nฤ… zgodnoล›ฤ‡ grup, wykonywania rรณwnolegล‚ego i programรณw nasล‚uchujฤ…cych z nowoczesnymi Selenium Projekty JDK 4 i JDK 17.

Narzฤ™dzia AI do analizy wpล‚ywu testรณw analizujฤ… rรณลผnice w kodzie, a nastฤ™pnie mapujฤ… zmienione klasy na grupy, ktรณre je obejmujฤ…. Potok uruchamia tylko te oznaczone grupy w kaลผdym ลผฤ…daniu ล›ciฤ…gniฤ™cia, skracajฤ…c czas odpowiedzi i zachowujฤ…cโ€ฆping ryzykowne ล›cieลผki poddawane testom.

Tak. Algorytmy klastrowania AI odczytujฤ… historyczne dzienniki awarii, oznaczajฤ… niestabilne testy i proponujฤ… stabilny podzbiรณr oznaczony jako regression. Nastฤ™pnie inลผynierowie zatwierdzajฤ… listฤ™ TestNG uruchamia tฤ™ grupฤ™ kaลผdej nocy, co sprawia, ลผe โ€‹โ€‹pakiet jest spรณjny, a jednoczeล›nie nie tracimy zasiฤ™gu.

Podsumuj ten post nastฤ™pujฤ…co: