Uvod u TestNG

1. Pregled

U ovom ćemo članku predstaviti okvir testiranja TestNG.

Usredotočit ćemo se na: postavljanje okvira, pisanje jednostavnog test slučaja i konfiguraciju, izvršavanje testa, generiranje izvještaja o testiranju i istovremeno izvršavanje testa.

2. Postavljanje

Počnimo dodavanjem ovisnosti Maven u naš pom.xml datoteka:

 org.testng testng 7.1.0 test 

Najnoviju verziju možete pronaći u spremištu Maven.

Kada koristite Eclipse, dodatak TestNG može se preuzeti i instalirati s Eclipse Marketplace.

3. Pisanje test slučaja

Da bismo napisali test pomoću TestNG-a, samo trebamo označiti metodu testiranja sa org.testng.annotations.Test napomena:

@Test javna praznina givenNumber_whenEven_thenTrue () {assertTrue (broj% 2 == 0); }

4. Test konfiguracije

Dok pišemo test slučajeve, često moramo izvršiti neke upute za konfiguraciju ili inicijalizaciju prije izvršavanja testa, a također i neko čišćenje nakon završetka testova. TestNG pruža brojne značajke inicijalizacije i čišćenja na razini metode, klase, grupe i paketa:

@BeforeClass public void setup () {broj = 12; } @AfterClass public void tearDown () {broj = 0; }

The postaviti() metoda označena sa @BeforeClass napomene će se pozivati ​​prije izvođenja bilo koje metode te testne klase, i srušiti() nakon izvršavanja svih metoda klase testa.

Slično tome, možemo koristiti @BeforeMethod, @AfterMethod, @ Before / AfterGroup, @ Before / AfterTest i @ Pre / AfterSuite napomene za bilo koju konfiguraciju na razini metode, grupe, testa i paketa.

5. Izvršenje testa

Test slučajeve možemo pokrenuti s Mavenovom naredbom "test", izvršit će sve test slučajeve označene s @Test stavljajući ih u zadani testni paket. Također možemo pokrenuti test slučajeve iz XML datoteka TestNG test suite pomoću maven-surefire-plugin:

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

Imajte na umu da ako imamo više XML datoteka, koje pokrivaju sve testove, možemo ih sve dodati u suiteXmlFiles označiti:

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

Da bismo pokrenuli samostalni test, trebamo imati knjižnicu TestNG u stazi klase i kompajliranu test klasu zajedno s XML konfiguracijskom datotekom:

java org.testng.TestNG test_suite.xml

6. Grupiranje testova

Testovi se mogu izvoditi u skupinama, na primjer od 50 testnih slučajeva 15 se može grupirati i izvršiti, a ostali ostaju takvi kakvi jesu.

U TestNG grupiranju testovi u paketima rade se pomoću XML datoteke:

Primijetite to, obje ispitne klase RegistrationTest, SignInTest sada pripada istom paketu i kad se paket izvrši, izvršit će se test slučajevi u ovoj klasi.

Osim ispitnih paketa, možemo stvoriti i testne skupine u TestNG-u, gdje su umjesto klasa testova metode grupirane zajedno. Da biste to učinili, dodajte skupine parametar u @Test napomena:

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

Upotrijebimo XML za izvršavanje grupa:

Ovo će izvršiti test metodu označenu s grupom regresija, u SummationServiceTest razred.

7. Parametarska ispitivanja

Parametrizirani jedinični testovi koriste se za ispitivanje istog koda pod nekoliko uvjeta. Uz pomoć parametriziranih jediničnih testova možemo postaviti metodu ispitivanja koja podatke dobiva iz nekog izvora podataka. Glavna ideja je učiniti metodu jediničnog ispitivanja ponovnom uporabom i testirati s različitim skupom ulaza.

U TestNG-u možemo parametrizirati testove pomoću @Parametar ili @DataProvider bilješka. Dok koristite XML datoteku, test metodu označite s @Parametar:

@Test @Parameters ({"value", "isEven"}) javna praznina givenNumberFromXML_ifEvenCheckOK_thenCorrect (int vrijednost, boolean isEven) {assertEquals (isEven, vrijednost% 2 == 0); }
I dostavite podatke pomoću XML datoteke:

Korištenje podataka iz XML datoteke korisno je, ali često su nam potrebni složeniji podaci. @DataProvider anotacija se koristi za obradu ovih scenarija, koji se mogu koristiti za mapiranje složenih tipova parametara za metode ispitivanja.@DataProvider za primitivne tipove podataka:

@DataProvider (name = "numbers") javni statički objekt [] [] evenNumbers () {return new Object [] [] {{1, false}, {2, true}, {4, true}}; } @Test (dataProvider = "numbers") javna praznina givenNumberFromDataProvider_ifEvenCheckOK_thenCorrect (cijeli broj, očekuje se logička vrijednost) {assertEquals (očekuje se, broj% 2 == 0); }

@DataProviderza objekte:

@Test (dataProvider = "numbersObject") javna praznina 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 Parni broj (4, istina)}}; }

Koristeći ovo, bilo koji objekt koji treba testirati može se stvoriti i koristiti u testu. To je uglavnom korisno za integracijske testove.

8. Zanemarivanje test slučajeva

Ponekad želimo ne izvršiti određeni test slučaj, privremeno tijekom procesa razvoja. To se može učiniti dodavanjem omogućeno= lažno, u @Test napomena:

@Test (omogućeno = netačno) javna praznina givenNumbers_sumEquals_thenCorrect () {int sum = numbers.stream.reduce (0, Integer :: sum); assertEquals (6, zbroj); }

9. Ovisni testovi

Razmotrimo scenarij u kojem bi, ako početni test ne uspije, svi sljedeći testni slučajevi trebali biti izvršeni i radije označeni kao preskočeni. TestNG pruža ovu značajku s zavisiOnMethods parametar @Test napomena:

@Test javna praznina givenEmail_ifValid_thenTrue () {boolean valid = email.contains ("@"); assertEquals (valjano, točno); } @Test (zavisiOnMethods = {"givenEmail_ifValid_thenTrue"}) javna praznina givenValidEmail_whenLoggedIn_thenTrue () {LOGGER.info ("Email {} valjana >> prijava", e-pošta); }

Primijetite da test prijave ovisi o testnom slučaju provjere valjanosti e-pošte. Dakle, ako provjera valjanosti e-pošte ne uspije, test prijave će se preskočiti.

10. Istodobno izvršavanje testa

TestNG omogućuje da se testovi izvode paralelno ili u višenitnom načinu, pružajući tako način za testiranje tih višenitnih dijelova koda.

Možete konfigurirati da se metode, klase i paketi izvode u vlastitim nitima, smanjujući ukupno vrijeme izvršavanja.

10.1. Nastava i metode u paraleli

Da biste paralelno izvodili ispitne satove, spomenite paralelno atribut u svita oznaka u XML datoteci s vrijednostima klase:

Imajte na umu da, ako imamo višestruke test oznake u XML datoteci, ovi testovi se također mogu izvoditi paralelno, spominjanjem paralelno = "testovi". Također za paralelno izvršavanje pojedinih metoda, spomenite paralelno = "metode".

10.2. Izvođenje metode ispitivanja s više navoja

Recimo da moramo testirati ponašanje koda kada se izvodi u više niti. TestNG omogućuje pokretanje metode ispitivanja u više niti:

javna klasa MultiThreadedTests {@Test (threadPoolSize = 5, invocationCount = 10, timeOut = 1000) javna praznina givenMethod_whenRunInThreads_thenCorrect () {int count = Thread.activeCount (); assertTrue (count> 1); }}

The threadPoolSize označava da će se metoda pokrenuti n broj niti kao što je spomenuto. The invocationCount i pauza naznačite da će se test izvršiti više puta i neće uspjeti ako je potrebno više vremena.

11. Funkcionalno ispitivanje

TestNG dolazi sa značajkama koje se mogu koristiti i za funkcionalno testiranje. Zajedno sa Selenijem, može se koristiti za testiranje funkcionalnosti web aplikacija ili za testiranje web usluga s HttpClientom.

Više detalja o funkcionalnom ispitivanju pomoću selena i TestNG-a dostupno je ovdje. Također još nekoliko stvari o integracijskom testiranju u ovom članku.

12. Zaključak

U ovom smo članku kratko pogledali kako postaviti TestNG i izvršiti jednostavan testni slučaj, generirati izvješća, istovremeno izvršavanje testnih slučajeva, a također i malo o funkcionalnom programiranju. Za više značajki poput ovisnih testova, ignoriranja test slučajeva, test grupa i apartmana ovdje možete pogledati naš članak JUnit vs TestNG.

Provedbu svih isječaka koda možete pronaći na Githubu.