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.