TestNG oppitunti
โก รlykรคs yhteenveto
TestNG on seuraavan sukupolven Java testauskehys, joka yhdistรครค Selenium jรคsenneltyรค automatisointia, monipuolista raportointia ja rinnakkaista suoritusta varten. Tรคmรค opetusohjelma kattaa keskeiset merkinnรคt, projektin mรครคrityksen Eclipse, ensimmรคisen testitapauksen kirjoittaminen, HTML-raportit ja edistyneet parametrien kรคyttรถohjeet.

Mikรค on TestNG?
TestNG on automaatiotestauskehys, jossa โNGโ tarkoittaa โNext Generationโ -menetelmรครค. TestNG on inspiroinut JUnit ja kรคyttรครค Java merkinnรคt (@) testikulun ohjaamiseksi. Se voittaa JUnitaiemmat rajoitukset ja se on suunniteltu tekemรครคn end-to-end-testaus helpompaa.
Kanssa TestNG Voit luoda asianmukaisen raportin ja nรคhdรค heti, kuinka monta testiรค lรคpรคisi, epรคonnistui tai ohitettiin. Voit myรถs suorittaa uudelleen vain epรคonnistuneet tapaukset.
Esimerkiksi:
- Oletetaan, ettรค sinulla on viisi testitapausta, jokainen omalla metodillaan, kirjoitettu ilman TestNGKolme onnistuu; neljรคs epรคonnistuu. Neljรคnnen korjaamisen jรคlkeen haluat suorittaa uudelleen vain sen, koska kolme ensimmรคistรค on jo onnistunut. Tรคtรค on vaikea tehdรค pelkรคllรค main()-metodilla.
- TestNG tarjoaa a
testng-failed.xmlTiedostotest-outputkansio. Kyseisen XML:n suorittaminen suorittaa uudelleen vain epรคonnistuneet tapaukset.
Sen lisรคksi opit sen edut TestNG, kuinka kirjoittaa testimetodeja @Test-annotaatioiden avulla ja kuinka muuntaa luokat testipaketiksi, joka toimii Eclipse tai komentoriviltรค.
Miksi kรคyttรครค TestNG Selenium?
Oletusarvoisesti Selenium testit eivรคt tuota kauniisti muotoiltuja tuloksia. TestNG Kun testiajo suoritetaan verkkoon, se tuottaa jรคsennellyn raportin, jonka voit jakaa tiimin kanssa.
bridge Selenium kรคyttรคjรคt suosivat TestNG yli JUnit laajemman ominaisuusvalikoimansa ansiosta. Tรคrkeimmรคt ominaisuudet Selenium ovat:
- Raportit, jotka sisรคltรคvรคt suoritettujen, hyvรคksyttyjen, hylรคttyjen ja ohitettujen testitapausten mรครคrรคn.
- Helppo uraping testitapauksista a:n kautta
testng.xmltiedosto, suoritusprioriteeteilla. - Toista testi useita kertoja ilman silmukoita kรคyttรคmรคllรค
invocationCount. - Suorita useita testejรค useilla selaimilla โ ristiinselaimen testaus Tukea.
- Saumaton integrointi Mavenin kanssa, Jenkinsja muut CI-tyรถkalut.
- Readable merkinnรคt โ esimerkiksi @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
- Selenium WebDriverilla ei ole natiivia raportointia; TestNG tรคyttรครค aukon puhtaalla HTML-raportilla, kuten alla olevalla.
- TestNG yksinkertaistaa testikoodia. Et enรครค tarvitse staattista pรครคmetodia; merkinnรคt pรครคttรคvรคt, mitรค suoritetaan ja milloin.
- Havaittamattomat poikkeukset kรคsitellรครคn tyylikkรครคsti TestNGNe raportoidaan epรคonnistuneina vaiheina keskeyttรคmรคttรค koko suoritusta.
Edut TestNG yli JUnit
TestNG tarjoaa kolme merkittรคvรครค etua verrattuna JUnit:
- Merkintรถjรค on helpompi ymmรคrtรครค ja kรคyttรครค.
- Testitapaukset voidaan ryhmitellรค ja priorisoida vรคhemmรคllรค vaivalla.
- Rinnakkaisten testien suorittamista tuetaan suoraan pakkauksesta.
Mikรค on annotaatio TestNG?
Huomautukset sisรครคn TestNG ovat metodin ylรคpuolelle sijoitettuja koodirivejรค, jotka ohjaavat sen suoritusta. Ne alkavat aina @-symbolilla. Yksinkertainen esimerkki on esitetty alla.
Merkintรถjรค kรคsitellรครคn yksityiskohtaisesti osiossa "Kรคytetyt merkinnรคt" TestNG" myรถhemmin tรคssรค opetusohjelmassa, joten yllรค oleva esimerkki on vain odotusten asettamista varten. TestNG merkintรถjรค on helpompi koodata ja lukea kuin JUnit vastineita, ja ne ovat vรคlttรคmรคttรถmiรค testejรค suoritettaessa Selenium ruudukko missรค rinnakkaissuorituksella on merkitystรค.
Kuinka kirjoittaa testitapauksia TestNG
Kirjoittaminen a TestNG Testitapaus koostuu kolmesta vaiheesta:
- Kirjoita liiketoimintalogiikkasi ja sijoita TestNG merkinnรคt kunkin menetelmรคn ylรคpuolella.
- Lisรครค metatietoja, kuten luokan nimi, ryhmรคn nimi ja paketin nimi.
- Suorita TestNG luokka IDE:stรคsi tai komentoriviltรค.
Luo testitapaus kรคyttรคmรคllรค TestNG Merkinnรคt
Nyt luomme ensimmรคisen testitapauksemme kรคyttรคmรคllรค TestNG merkintรถjรค SeleniumEnnen testin kirjoittamista, mรครคritรค uusi TestNG projekti vuonna Eclipse ja soita sille EtunimiTestNGprojekti.
Uuden perustaminen TestNG projekti
Vaihe 1) Napauta Tiedosto > Uusi > Java projekti.
Vaihe 2) enter EtunimiTestNGprojekti projektin nimeksi ja napsauta seuraava.
Vaihe 3) Tuo TestNG kirjastot. Napsauta kirjastot vรคlilehti ja sitten Lisรครค kirjastoโฆ.
Vaihe 4) In Lisรครค kirjasto valintaikkuna, valitse TestNG ja valitse seuraava.
Vaihe 5) Napauta Suorittaa loppuun.
TestNG pitรคisi nyt nรคkyรค Kirjastot-luettelossa.
Vaihe 6) Lisรครค JAR-tiedostot, jotka sisรคltรคvรคt Selenium API. Nรคmรค tulevat Java asiakasohjain ladattu osoitteesta selenium.dev/lataukset.
Siirry kansioon, jossa Selenium JAR-tiedostot tallennetaan.
Ulkoisten JAR-tiedostojen lisรครคmisen jรคlkeen nรคytรถn pitรคisi nรคyttรครค tรคltรค.
Vaihe 7) Napauta Suorittaa loppuun. Uuden EtunimiTestNGprojekti nรคkyy pakettien hallinnassa.
Kuinka luoda uusi TestNG Testitiedosto
Kun projekti on valmis, luo uusi TestNG tiedosto.
Vaihe 1) Napsauta hiiren oikealla painikkeella src kansio ja valitse Uusi > Muuโฆ.
Vaihe 2) Laajenna TestNG kansio, valitse TestNG luokka, ja napsauta seuraava.
Vaihe 3) Syรถtรค alla nรคkyvรคt arvot ja napsauta Suorittaa loppuun. Java tiedosto on nimetty EtunimiTestNGfilee.
Vaihe 4) Eclipse generoi TestNG alla olevaa mallia.
Ensimmรคisen koodauskokemuksesi TestNG Testitapaus
Luo ensimmรคinen testitapaus joka vahvistaa otsikon Mercury Tours kotisivut.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@Test
public void verifyHomepageTitle() {
System.out.println("launching firefox browser");
// Selenium 4 ships Selenium Manager, so the driver path is no longer required.
driver = new FirefoxDriver();
driver.get(baseUrl);
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
driver.quit();
}
}
Huomioitavaa:
- TestNG ei tarvitse a
main()menetelmรคllรค. - Metodien ei tarvitse olla staattisia.
- @Testata merkintรคmerkit
verifyHomepageTitle()testitapauksena. - Merkinnรคt ovat tallennettuina
org.testng.annotations.*paketti. - assert luokasta alkaen
org.testng.Assertajaa tarkistuksia.
Sinulla voi olla useita @Test-merkintรถjรค yhdessรค TestNG tiedosto. Kรคsittelemme sitรค tรคssรค "Kรคytetyt merkinnรคt" TestNG" osiossa.
Testin suorittaminen
Napsauta tiedostoa hiiren kakkospainikkeella ja suorita se nimellรค TestNG testiรค. Eclipse tuottaa kaksi tulostetta โ tekstituloksen konsoli-ikkunassa ja graafisen tuloksen TestNG Tulosikkuna.
Raporttien tarkistaminen Luonut TestNG
Konsoli-ikkuna tarjoaa tekstipohjaisen yhteenvedon, kun taas TestNG Tulosikkuna nรคyttรครค graafisen nรคkymรคn.
HTML-raporttien luominen
TestNG voi myรถs luoda tรคydellisiรค HTML-raportteja.
Vaihe 1) Juoksun jรคlkeen EtunimiTestNGfilee, napsauta projektia hiiren kakkospainikkeella ja valitse virkistรครค.
Vaihe 2) A testituloste kansio tulee nรคkyviin. Laajenna se ja etsi index.html โ viimeisimmรคn ajokerran HTML-raportti.
Vaihe 3) Double-klikkaus index.html avata sen sisรคltรค Eclipseselaimessa. Paina F5 pรคivittรครคksesi sivun tulevien suoritusten jรคlkeen.
Kรคytetyt merkinnรคt TestNG
Olet jo nรคhnyt @Test-annotaation. Tรคmรคn osion loppuosa kรคsittelee hyรถdyllisimpiรค edistyneitรค annotaatioita.
Useita testitapauksia
Yksi TestNG tiedosto voi sisรคltรครค useita @Test-annotaatioita. Oletusarvoisesti @Test-annotaatiolla varustetut metodit suoritetaan aakkosjรคrjestyksessรค. Alla olevassa koodissa metodit c_test, a_testja b_test aakkosjรคrjestyksessรค lรคhdejรคrjestyksestรค riippumatta.
Suorita koodi ja avaa index.html. Klikkaus Kronologinen nรคkymรค.
parametrit
Voit ohittaa oletusjรคrjestyksen kรคyttรคmรคllรค priority parametri. Parametrit ovat avainsanoja, jotka muokkaavat merkinnรคn toimintaa.
- Anna arvo kรคyttรคmรคllรค
=. - Rivitรค parametrit sulkeisiin, jotka on sijoitettu vรคlittรถmรคsti merkinnรคn jรคlkeen, kuten alla on esitetty.
TestNG Suorittaa @Test-annot pienimmรคstรค prioriteettiarvosta suurimpaan. Prioriteettinumeroiden ei tarvitse olla perรคkkรคisiรค.
HTML-raportti vahvistaa, ettรค metodit suoritettiin nousevassa prioriteettijรคrjestyksessรค.
Useita parametreja
Lisรคksi priority, @Test hyvรคksyy alwaysRun parametri (tosi tai epรคtosi). Jos haluat kรคyttรครค kahta tai useampaa parametria yhdessรค merkinnรคssรค, erota ne pilkulla:
@Test(priority = 0, alwaysRun = true)
@BeforeTest ja @AfterTest
| @BeforeTest | Tรคmรคn annotaatioajon menetelmรคt ennen ensimmรคistรค testitapausta TestNG tiedosto. |
| @AfterTest | Tรคmรคn annotaatioajon menetelmรคt kaikkien testitapausten jรคlkeen TestNG viilan viimeistely. |
Harkitse alla olevaa koodia.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@AfterTest
public void terminateBrowser() {
driver.quit();
}
}
Taulukosta ja koodista voimme ennustaa, ettรค sekvenssi on:
- 1. pรคivรค โ
launchBrowser() - 2. pรคivรค โ
verifyHomepageTitle() - 3. pรคivรค โ
terminateBrowser()
Annotaatiolohkojen sijoittelu lรคhdetiedostossa ei vaikuta niiden suoritusjรคrjestykseen. Kokeile jรคrjestรครค menetelmรคt uudelleen alla olevan kuvan mukaisesti.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@AfterTest // Jumbled
public void terminateBrowser() {
driver.quit();
}
@BeforeTest // Jumbled
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test // Jumbled
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
}
Suorita koodi ja tarkista tulos.
@BeforeMethod ja @AfterMethod
| @BeforeMethod | Tรคmรคn annotaatioajon menetelmรคt ennen jokaista testimenetelmรครค. |
| @AfterMethod | Tรคmรคn annotaatioajon menetelmรคt jokaisen testimenetelmรคn jรคlkeen. |
In Mercury Kierrokset, oletetaan ettรค haluamme tarkistaa kahden kotisivulta saavutetun kohdesivun otsikot.
Testin kulku on:
- Avaa kotisivu ja tarkista sen otsikko.
- Napsauta REKISTERรIDY ja vahvista kohdesivun otsikko.
- Palaa kotisivulle ja tarkista otsikko.
- Napsauta TUKI ja vahvista kohdesivun otsikko.
- Palaa kotisivulle ja tarkista otsikko uudelleen.
Alla oleva koodi nรคyttรครค, miten @BeforeMethod ja @AfterMethod kรคsittelevรคt toistuvat vaiheet.
package firsttestngpackage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
public String expected = null;
public String actual = null;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@BeforeMethod
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@Test(priority = 0)
public void register() {
driver.findElement(By.linkText("REGISTER")).click();
expected = "Register: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@Test(priority = 1)
public void support() {
driver.findElement(By.linkText("SUPPORT")).click();
expected = "Under Construction: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@AfterMethod
public void goBackToHomepage() {
driver.findElement(By.linkText("Home")).click();
}
@AfterTest
public void terminateBrowser() {
driver.quit();
}
}
Testin suorittamisen jรคlkeen TestNG raportoi alla olevan jรคrjestyksen.
Lyhyesti sanottuna: aseta asennusvaiheet sisรคpuolelle @BeforeMethod ja siivous tai navigoinnin nollaus sisรคllรค @AfterMethod joten jokainen testitapaus alkaa ja pรครคttyy tunnettuun tilaan.
Yhteenveto TestNG Merkinnรคt
- @BeforeSuite: suoritetaan ennen kaikkia sarjan testejรค.
- @AfterSuite: suoritetaan kaikkien sviitissรค tehtyjen testien jรคlkeen.
- @EnnenTestiรค: suoritetaan ennen kuin mikรครคn testimetodi kuuluu luokkiin tag.
- @Jรคlkitesti: suoritetaan kaikkien luokkiin kuuluvien testimetodien jรคlkeen tag.
- @BeforeGroups: suoritetaan vรคhรคn ennen ensimmรคistรค testimenetelmรครค, joka kuuluu mihin tahansa lueteltuun ryhmรครคn.
- @AfterGroups: suoritetaan pian viimeisen lueteltuun ryhmรครคn kuuluvan testimenetelmรคn jรคlkeen.
- @EnnenLuokkaa: suoritetaan ennen nykyisen luokan ensimmรคistรค testimetodia.
- @AfterClass: suoritetaan kaikkien nykyisen luokan testimetodien jรคlkeen.
- @BeforeMethod: suoritetaan ennen jokaista testimenetelmรครค.
- @AfterMethod: suoritetaan jokaisen testimenetelmรคn jรคlkeen.
- @Testata: merkitsee metodin testitapaukseksi.

































