Úvod do TestNG

1. Prehľad

V tomto článku si predstavíme testovací rámec TestNG.

Zameriame sa na: nastavenie rámca, písanie jednoduchých testovacích prípadov a konfigurácií, vykonávanie testov, generovanie testovacích správ a súčasné vykonávanie testov.

2. Inštalácia

Začnime tým, že do našej pridáme závislosť Maven pom.xml spis:

 org.testng testng 7.1.0 test 

Najnovšiu verziu nájdete v úložisku Maven.

Ak používate Eclipse, doplnok TestNG je možné stiahnuť a nainštalovať z Eclipse Marketplace.

3. Písanie testovacieho prípadu

Ak chcete napísať test pomocou TestNG, stačí, aby ste anotovali testovaciu metódu org.testng.annotations.Test anotácia:

@Test public void givenNumber_whenEven_thenTrue () {assertTrue (číslo% 2 == 0); }

4. Testovacie konfigurácie

Pri písaní testovacích prípadov často musíme pred vykonaním testu vykonať určité pokyny na konfiguráciu alebo inicializáciu a po dokončení testov tiež nejaké vyčistenie. TestNG poskytuje množstvo inicializačných a čistiacich funkcií na úrovni metód, tried, skupín a balíkov:

@BeforeClass verejné zrušenie nastavenia () {číslo = 12; } @AfterClass public void tearDown () {číslo = 0; }

The nastaviť() metóda anotovaná s @BeforeClass pred vykonaním akýchkoľvek metód tejto testovacej triedy budú vyvolané anotácie a strhnúť() po vykonaní všetkých metód testovacej triedy.

Podobne môžeme použiť @BeforeMethod, @AfterMethod, @ Before / AfterGroup, @ Before / AfterTest a @ Pred / AfterSuite anotácie pre ľubovoľnú konfiguráciu na úrovni metód, skupín, testov a balíkov.

5. Vykonanie testu

Testovacie prípady môžeme spustiť pomocou Mavenovho príkazu „test“, vykoná všetky testovacie prípady s poznámkou @Test ich uvedenie do predvolenej testovacej sady. Môžeme tiež spustiť testovacie prípady zo súborov XML testovacej sady TestNG pomocou súboru maven-surefire-plugin:

 org.apache.maven.plugins maven-surefire-plugin 2.19.1 src \ test \ resources \ test_suite.xml 

Upozorňujeme, že ak máme viac súborov XML pokrývajúcich všetky testovacie prípady, môžeme ich všetky pridať do súboru suiteXmlFiles značka:

  src / test / resources / parametrized_test.xml src / test / resources / registration_test.xml 

Aby sme mohli spustiť samostatný test, musíme mať v triede classpath knižnicu TestNG a zostavenú testovaciu triedu spolu s konfiguračným súborom XML:

java org.testng.TestNG test_suite.xml

6. Skupinové testy

Testy je možné vykonávať v skupinách, napríklad z 50 testovacích prípadov 15 je možné zoskupiť a vykonať tak, aby ostatní zostali tak, ako sú.

V skupine TestNG sa testy v balíkoch vykonávajú pomocou súboru XML:

Všimnite si, že obe testovacie triedy RegistrationTest, SignInTest teraz patrí do rovnakej sady a po vykonaní sady sa vykonajú testovacie prípady v tejto triede.

Okrem testovacích balíkov môžeme vytvoriť aj testovacie skupiny v TestNG, kde sú namiesto testovacích tried zoskupené metódy. Za týmto účelom pridajte skupiny parameter v @Test anotácia:

@Test (groups = "regression") public void givenNegativeNumber_sumLessthanZero_thenCorrect () {int sum = numbers.stream (). Reduce (0, Integer :: sum); assertTrue (suma <0); }

Na vykonanie skupín použijeme XML:

Týmto sa vykoná testovacia metóda označená skupinou regresia, v SummationServiceTest trieda.

7. Parametrizované testy

Parametrizované jednotkové testy sa používajú na testovanie toho istého kódu za niekoľkých podmienok. Pomocou parametrizovaných jednotkových testov môžeme nastaviť testovaciu metódu, ktorá získava údaje z nejakého zdroja údajov. Hlavnou myšlienkou je urobiť testovaciu metódu jednotky znovu použiteľnou a testovať s inou sadou vstupov.

V TestNG môžeme parametrizovať testy pomocou @Parameter alebo @DataProvider anotácia. Pri použití súboru XML anotujte testovaciu metódu pomocou @Parameter:

@Test @Parameters ({"value", "isEven"}) public void givenNumberFromXML_ifEvenCheckOK_thenCorrect (hodnota int, boolean isEven) {assertEquals (isEven, hodnota% 2 == 0); }
A poskytnite údaje pomocou súboru XML:

Používanie údajov zo súboru XML je užitočné, často však potrebujeme zložitejšie údaje. @DataProvider na spracovanie týchto scenárov sa používa anotácia, ktorú je možné použiť na mapovanie zložitých typov parametrov pre testovacie metódy.@DataProvider pre primitívne dátové typy:

@DataProvider (name = "numbers") public static Object [] [] evenNumbers () {return new Object [] [] {{1, false}, {2, true}, {4, true}}; } @Test (dataProvider = "numbers") public void givenNumberFromDataProvider_ifEvenCheckOK_thenCorrect (celé číslo, očakáva sa boolean) {assertEquals (očakávané, počet% 2 == 0); }

@DataProviderpre objekty:

@Test (dataProvider = "numbersObject") public void givenNumberObjectFromDataProvider_ifEvenCheckOK_thenCorrect (EvenNumber number) {assertEquals (number.isEven (), number.getValue ()% 2 == 0); } @DataProvider (name = "numbersObject") public Object [] [] parameterProvider () {return new Object [] [] {{new EvenNumber (1, false)}, {new EvenNumber (2, true)}, {new EvenNumber (4, true)}}; }

Pomocou tohto je možné vytvoriť a použiť v teste akýkoľvek objekt, ktorý sa má testovať. To je väčšinou užitočné pre integračné testovacie prípady.

8. Ignorovanie testovacích prípadov

Niekedy chceme, aby sme určitý testovací prípad nevykonali dočasne počas procesu vývoja. To sa dá urobiť pridaním povolené= nepravda, v @Test anotácia:

@Test (enabled = false) public void givenNumbers_sumEquals_thenCorrect () {int sum = numbers.stream.reduce (0, Integer :: sum); assertEquals (6, suma); }

9. Závislé testy

Uvažujme o scenári, kde by pri zlyhaní počiatočného testovacieho prípadu mali byť vykonané všetky nasledujúce testovacie prípady a mali by byť skôr označené ako vynechané. TestNG poskytuje túto funkciu s dependOnMethods parameter parametra @Test anotácia:

@Test public void givenEmail_ifValid_thenTrue () {boolean valid = email.contains ("@"); assertEquals (platné, pravdivé); } @Test (dependsOnMethods = {"givenEmail_ifValid_thenTrue"}) verejné neplatné givenValidEmail_whenLoggedIn_thenTrue () {LOGGER.info ("E-mail {} platné >> prihlásenie", e-mail); }

Upozorňujeme, že testovací prípad prihlásenia závisí od testovacieho prípadu overenia e-mailu. Ak teda overenie e-mailu zlyhá, test prihlásenia sa preskočí.

10. Súbežné vykonávanie testu

TestNG umožňuje, aby testy prebiehali paralelne alebo vo viacvláknovom režime, čím poskytuje spôsob testovania týchto viacvláknových častí kódu.

Môžete nakonfigurovať, aby metódy, triedy a sady bežali vo vlastných vláknach, čím sa zníži celkový čas vykonania.

10.1. Triedy a metódy paralelne

Ak chcete paralelne viesť testovacie triedy, uveďte: paralelne atribút v suita značka v konfiguračnom súbore XML s hodnotou triedy:

Všimnite si, že ak ich máme viac test značiek v súbore XML, je možné spomenutím spustiť tieto testy aj paralelne paralelné = ”testy”. Uveďte tiež, aby ste paralelne vykonávali jednotlivé metódy paralelné = ”metódy”.

10.2. Viacvláknové prevedenie testovacej metódy

Povedzme, že musíme otestovať správanie sa kódu, keď je spustený vo viacerých vláknach. TestNG umožňuje spustiť testovaciu metódu vo viacerých vláknach:

public class MultiThreadedTests {@Test (threadPoolSize = 5, invocationCount = 10, timeOut = 1000) public void givenMethod_whenRunInThreads_thenCorrect () {int count = Thread.activeCount (); assertTrue (počet> 1); }}

The threadPoolSize označuje, že metóda bude bežať v n počet vlákien, ako je uvedené. The invocationCount a čas vypršal označujú, že test sa vykoná viackrát, a nevyhovujú mu, ak to trvá dlhšie.

11. Funkčné testovanie

TestNG prichádza s funkciami, ktoré je možné použiť aj na funkčné testovanie. V spojení so selénom sa dá použiť na testovanie funkčnosti webovej aplikácie alebo na testovanie webových služieb pomocou HttpClient.

Viac podrobností o funkčnom testovaní pomocou selénu a TestNG je k dispozícii tu. V tomto článku tiež niekoľko ďalších vecí o testovaní integrácie.

12. Záver

V tomto článku sme sa rýchlo pozreli na to, ako nastaviť TestNG a vykonať jednoduchý testovací prípad, generovať správy, súčasné vykonávanie testovacích prípadov a tiež niečo o funkčnom programovaní. Ďalšie funkcie, ako sú závislé testy, ignorovanie testovacích prípadov, testovacie skupiny a sady, nájdete v našom článku JUnit vs TestNG.

Implementáciu všetkých útržkov kódu nájdete na serveri Github.


$config[zx-auto] not found$config[zx-overlay] not found