Bevezetés a TestNG-be

1. Áttekintés

Ebben a cikkben bemutatjuk a TestNG tesztelési keretrendszert.

A következőkre fogunk összpontosítani: a keretrendszer beállítására, az egyszerű teszteset és konfiguráció megírására, a tesztfuttatásra, a tesztjelentések létrehozására és az egyidejű tesztfuttatásra.

2. Beállítás

Kezdjük azzal, hogy hozzáadjuk a Maven-függőséget pom.xml fájl:

 org.testng testng 7.1.0 teszt 

A legújabb verzió megtalálható a Maven tárházban.

Az Eclipse használatakor a TestNG bővítmény letölthető és telepíthető az Eclipse piactérről.

3. Teszteset írása

Ha tesztet akarunk írni a TestNG használatával, akkor csak fel kell tüntetnünk a tesztmódszert org.testng.annotations.Test kommentár:

@Test public void givenNumber_whenEven_thenTrue () {assertTrue (% 2 == 0 szám); }

4. Tesztelje a konfigurációkat

Tesztesetek írása közben gyakran végrehajtani kell néhány konfigurációs vagy inicializálási utasítást a tesztfuttatások előtt, és némi tisztítást is a tesztek befejezése után. A TestNG számos inicializálási és tisztítási szolgáltatást nyújt módszer, osztály, csoport és csomag szintjén:

@BeforeClass public void setup () {szám = 12; } @AfterClass public void tearDown () {szám = 0; }

A beállít() metódussal kiegészítve @Óra előtt - az adott tesztosztály bármely metódusának végrehajtása előtt megjegyzéseket hívunk meg, és - tearDown () végrehajtás után a tesztosztály összes módszere.

Hasonlóképpen használhatjuk a @BeforeMethod, @AfterMethod, @ Before / AfterGroup, @ Before / AfterTest és @ Before / AfterSuite jelölések bármilyen konfigurációhoz módszer, csoport, teszt és csomag szinteken.

5. Teszt végrehajtása

A teszteseteket Maven „teszt” paranccsal futtathatjuk, és az összes tesztesetet végrehajtja @Teszt alapértelmezett tesztcsomagba helyezi őket. A TestNG tesztcsomag XML fájljaiból is futtathatunk teszteseteket a maven-surefire-plugin:

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

Ne feledje, hogy ha több, minden tesztesetet lefedő XML fájl áll rendelkezésünkre, akkor mindegyiket felvehetjük a suiteXmlFiles címke:

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

A teszt önálló futtatásához rendelkeznünk kell a TestNG könyvtárral az osztályúton és az összeállított tesztosztályban, az XML konfigurációs fájl mellett:

java org.testng.TestNG test_suite.xml

6. A tesztek csoportosítása

A teszteket csoportosan lehet lefuttatni, például 50 tesztesetből 15 csoportosítható és kivitelezhető, így mások úgy maradnak.

A TestNG csoportosításában a csomagok tesztelése XML fájl segítségével történik:

Figyelje meg, hogy mindkét tesztosztály RegistrationTest, SignInTest most ugyanahhoz a csomaghoz tartozik, és amint a csomag végrehajtásra kerül, az osztály tesztesetei végrehajtásra kerülnek.

A tesztcsomagok mellett tesztcsoportokat is létrehozhatunk a TestNG-ben, ahol a tesztosztályok helyett a módszereket csoportosítják. Ehhez adja hozzá a csoportok paraméter a @Teszt kommentár:

@Test (groups = "regresszió") public void givenNegativeNumber_sumLessthanZero_thenCorrect () {int összeg = számok.folyam (). Csökkent (0, Egész szám :: összeg); assertTrue (összeg <0); }

Használjunk XML-t a csoportok végrehajtásához:

Ez végrehajtja a csoporthoz címkézett vizsgálati módszert regresszió, ban,-ben SummationServiceTest osztály.

7. Paraméteres tesztek

Paraméterezett egységteszteket használnak ugyanazon kód tesztelésére több feltétel mellett. A paraméterezett egységtesztek segítségével felállíthatunk egy vizsgálati módszert, amely valamilyen adatforrásból nyeri az adatokat. A fő gondolat az, hogy az egység tesztmódszerét újrafelhasználhatóvá tegye, és más bemeneti készlettel teszteljen.

A TestNG-ben a @ segítségével paraméterezhetjük a teszteketParaméter vagy @DataProvider annotáció. Az XML fájl használata közben jelölje meg a vizsgálati módszert @ -valParaméter:

@Test @Parameters ({"value", "isEven"}) public void givenNumberFromXML_ifEvenCheckOK_thenCorrect (int érték, logikai isEven) {assertEquals (isEven, érték% 2 == 0); }
És adja meg az adatokat XML fájl segítségével:

Az XML fájlból származó adatok használata hasznos, de gyakran összetettebb adatokra van szükségünk. @DataProvider annotációt használnak ezeknek a szcenárióknak a kezelésére, amelyek felhasználhatók komplex paramétertípusok feltérképezésére a tesztelési módszerekhez.@DataProvider primitív adattípusok esetében:

@DataProvider (név = "számok") nyilvános statikus objektum [] [] evenNumbers () {return new Object [] [] {{1, false}, {2, true}, {4, true}}; } @Test (dataProvider = "számok") public void givenNumberFromDataProvider_ifEvenCheckOK_thenCorrect (Egész szám, logikai érték várható) {assertEquals (várható,% 2 = = 0 szám); }

@DataProvidertárgyak esetében:

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

Ennek használatával bármely objektum, amelyet tesztelni kell, létrehozható és felhasználható a tesztben. Ez leginkább integrációs teszteseteknél hasznos.

8. A tesztesetek figyelmen kívül hagyása

Néha azt akarjuk, hogy egy bizonyos tesztesetet ne hajtsunk végre, ideiglenesen a fejlesztési folyamat során. Ez megtehető hozzáadással engedélyezve= hamis, ban,-ben @Teszt kommentár:

@ Teszt (engedélyezett = hamis) public void givenNumbers_sumEquals_thenCorrect () {int összeg = számok.folyam.reduce (0, Egész szám :: összeg); assertEquals (6, összeg); }

9. Függő tesztek

Vizsgáljunk meg egy olyan forgatókönyvet, ahol ha a kezdeti tesztesemény kudarcot vall, akkor minden későbbi tesztesetet végre kell hajtani, és inkább kihagyottként kell megjelölni. A TestNG ezt a funkciót biztosítja a metódusoktól függ paramétere @Teszt kommentár:

@Test public void givenEmail_ifValid_thenTrue () {logikai érték = email.contains ("@"); assertEquals (érvényes, igaz); } @Test (dependOnMethods = {"adottEmail_ifValid_thenTrue"}) public void givenValidEmail_whenLoggedIn_thenTrue () {LOGGER.info ("E-mail {} érvényes >> bejelentkezés", e-mail); }

Figyelje meg, hogy a bejelentkezési teszt esete az e-mail ellenőrzési teszt esetétől függ. Így, ha az e-mail ellenőrzés nem sikerül, a bejelentkezési teszt átugrik.

10. Egyidejű teszt végrehajtás

A TestNG lehetővé teszi a tesztek párhuzamos vagy többszálas módban történő futtatását, ezáltal lehetőséget biztosítva ezeknek a többszálú kóddaraboknak a tesztelésére.

Beállíthatja, hogy a metódusok, osztályok és csomagok saját szálakban fussanak, csökkentve ezzel a teljes végrehajtási időt.

10.1. Osztályok és módszerek párhuzamosan

A tesztosztályok párhuzamos futtatásához említse meg a párhuzamos attribútum a lakosztály címke XML konfigurációs fájlban, értékkel osztályok:

Vegye figyelembe, hogy ha több van teszt címkék az XML fájlban, ezek a tesztek párhuzamosan is futtathatók, megemlítve párhuzamos = „tesztek”. Az egyes módszerek párhuzamos végrehajtásához is említsen meg párhuzamos = ”módszerek”.

10.2. A vizsgálati módszer többszálú végrehajtása

Tegyük fel, hogy tesztelnünk kell egy kód viselkedését, amikor több szálon fut. A TestNG lehetővé teszi egy tesztmódszer futtatását több szálban:

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

A threadPoolSize azt jelzi, hogy a módszer be fog futni n az említett szálak száma. A invocationCount és időtúllépés jelezze, hogy a tesztet többször végrehajtják, és nem sikerül, ha több időbe telik.

11. Funkcionális tesztelés

A TestNG olyan funkciókkal rendelkezik, amelyek a funkcionális teszteléshez is használhatók. A Seleniummal együtt használható akár egy webalkalmazás funkcióinak tesztelésére, akár webszolgáltatások tesztelésére a HttpClient segítségével.

A szelénnel és a TestNG-vel végzett funkcionális tesztelésről további részletek itt érhetők el. Ezenkívül még néhány cikk az integrációs tesztelésről ebben a cikkben.

12. Következtetés

Ebben a cikkben gyorsan áttekintettük, hogyan állítsuk be a TestNG-t és hogyan hajtsunk végre egy egyszerű tesztesetet, jelentéseket állítsunk elő, tesztesetek egyidejű végrehajtását és egy kicsit a funkcionális programozást is. További funkciók, például a függő tesztek, a tesztesetek, a tesztcsoportok és a csomagok figyelmen kívül hagyása, itt olvashatja el a JUnit vs TestNG cikkünket.

Az összes kódrészlet megvalósítása megtalálható a Githubon.


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