TestNG Klavuz
โก Akฤฑllฤฑ รzet
TestNG Yeni nesildir Java test รงerรงevesi ile eลleลir Selenium Yapฤฑlandฤฑrฤฑlmฤฑล otomasyon, zengin raporlama ve paralel yรผrรผtme iรงin. Bu eฤitim, temel ek aรงฤฑklamalarฤฑ ve proje kurulumunu kapsamaktadฤฑr. Eclipseฤฐlk test senaryosunun yazฤฑlmasฤฑ, HTML raporlarฤฑ ve geliลmiล parametre kullanฤฑmฤฑ.

Nedir? TestNG?
TestNG NG, "Yeni Nesil" anlamฤฑna gelen "Next Generation" kฤฑsaltmasฤฑyla tanฤฑmlanan bir otomasyon test รงerรงevesidir. TestNG esinlenmiลtir JUnit ve kullanฤฑr Java Test akฤฑลฤฑnฤฑ kontrol etmek iรงin kullanฤฑlan ek aรงฤฑklamalar (@). Bu, ลu sorunlarฤฑn รผstesinden gelir: JUnit'ฤฑn รถnceki sฤฑnฤฑrlamalarฤฑnฤฑ ortadan kaldฤฑrmak ve onu daha kullanฤฑลlฤฑ hale getirmek iรงin tasarlanmฤฑลtฤฑr. uรงtan uca test kolay.
ฤฐle TestNG Doฤru bir rapor oluลturabilir ve kaรง testin geรงtiฤini, baลarฤฑsฤฑz olduฤunu veya atlandฤฑฤฤฑnฤฑ anฤฑnda gรถrebilirsiniz. Ayrฤฑca yalnฤฑzca baลarฤฑsฤฑz olan durumlarฤฑ yeniden รงalฤฑลtฤฑrabilirsiniz.
รrneฤin:
- Diyelim ki, her biri kendi metodunda yazฤฑlmฤฑล, beล farklฤฑ test senaryonuz var. TestNGรรง tanesi baลarฤฑlฤฑ; dรถrdรผncรผsรผ baลarฤฑsฤฑz. Dรถrdรผncรผsรผnรผ dรผzelttikten sonra, ilk รผรงรผ zaten baลarฤฑlฤฑ olduฤu iรงin sadece onu tekrar รงalฤฑลtฤฑrmak istiyorsunuz. Bunu dรผz main() metodu koduyla yapmak zordur.
- TestNG Bir saฤlar
testng-failed.xmliรงindeki dosyayฤฑtest-outputKlasรถr. Bu XML dosyasฤฑnฤฑ รงalฤฑลtฤฑrmak yalnฤฑzca baลarฤฑsฤฑz olan durumlarฤฑ yeniden yรผrรผtรผr.
Bunun รถtesinde, ลu avantajlarฤฑ รถฤreneceksiniz: TestNG@Test ek aรงฤฑklamalarฤฑyla test metotlarฤฑ nasฤฑl yazฤฑlฤฑr ve sฤฑnฤฑflarฤฑnฤฑzฤฑ, รงalฤฑลtฤฑrฤฑlabilen bir test paketine nasฤฑl dรถnรผลtรผrรผrsรผnรผz gibi konularฤฑ ele alฤฑyoruz. Eclipse veya komut satฤฑrฤฑ.
Neden kullan TestNG 'da Selenium?
Varsayฤฑlan olarak, Selenium Testler dรผzgรผn biรงimlendirilmiล sonuรงlar รผretmiyor. TestNG Test รงalฤฑลtฤฑrฤฑcฤฑsฤฑ baฤlandฤฑฤฤฑnda, ekiple paylaลabileceฤiniz yapฤฑlandฤฑrฤฑlmฤฑล bir rapor oluลturur.
kรถprรผ Selenium kullanฤฑcฤฑlar tercih eder TestNG tekrar JUnit Daha geniล รถzellik yelpazesi nedeniyle. Baลlฤฑca รถzellikleri ลunlardฤฑr: Selenium ลunlardฤฑr:
- รalฤฑลtฤฑrฤฑlan, baลarฤฑlฤฑ, baลarฤฑsฤฑz ve atlanan test senaryolarฤฑnฤฑn sayฤฑsฤฑnฤฑ iรงeren raporlar.
- Kolay grupping test senaryolarฤฑnฤฑn bir aracฤฑlฤฑฤฤฑyla
testng.xmlYรผrรผtme รถncelikleriyle birlikte dosya. - Dรถngรผ kullanmadan bir testi birden fazla kez tekrarlayฤฑn.
invocationCount. - Birden fazla tarayฤฑcฤฑda birden fazla test รงalฤฑลtฤฑrฤฑn โ รงapraztarayฤฑcฤฑ testi destekler.
- Maven ile sorunsuz entegrasyon, Jenkinsve diฤer CI araรงlarฤฑ.
- Readable Ek aรงฤฑklamalar โ รถrneฤin, @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
- Selenium WebDriver'ฤฑn yerleลik bir raporlama รถzelliฤi yok; TestNG Bu boลluฤu aลaฤฤฑdaki gibi temiz bir HTML raporuyla dolduruyor.
- TestNG Test kodunu basitleลtirir. Artฤฑk statik bir main metoduna ihtiyacฤฑnฤฑz yok; ek aรงฤฑklamalar neyin ne zaman รงalฤฑลacaฤฤฑna karar verir.
- Yakalanmayan istisnalar, dรผzgรผn bir ลekilde ele alฤฑnฤฑr. TestNGBu adฤฑmlar, tรผm รงalฤฑลtฤฑrma sonlandฤฑrฤฑlmadan baลarฤฑsฤฑz adฤฑmlar olarak rapor edilir.
Avantajlarฤฑ TestNG tekrar JUnit
TestNG รผรง รถnemli avantaj sunmaktadฤฑr JUnit:
- Ek aรงฤฑklamalarฤฑn anlaลฤฑlmasฤฑ ve kullanฤฑmฤฑ daha kolaydฤฑr.
- Test senaryolarฤฑ daha az รงabayla gruplandฤฑrฤฑlabilir ve รถnceliklendirilebilir.
- Paralel test yรผrรผtme รถzelliฤi varsayฤฑlan olarak desteklenmektedir.
Ek aรงฤฑklama (annotation) nedir? TestNG?
Ek aรงฤฑklamalar TestNG Bir metodun รผzerine yerleลtirilen ve o metodun nasฤฑl yรผrรผtรผleceฤini kontrol eden kod satฤฑrlarฤฑdฤฑr. Bunlar her zaman @ sembolรผyle baลlar. Aลaฤฤฑda basit bir รถrnek gรถsterilmiลtir.
Aรงฤฑklamalar bu bรถlรผmde ayrฤฑntฤฑlฤฑ olarak ele alฤฑnmฤฑลtฤฑr. โKullanฤฑlan Ek Aรงฤฑklamalarโ TestNGbaลlฤฑklฤฑ bir kฤฑlavuz yayฤฑnladฤฑ Bu eฤitimde daha sonra ele alฤฑnacak, bu nedenle yukarฤฑdaki รถrnek sadece beklentileri belirlemek iรงindir. TestNG Ek aรงฤฑklamalarฤฑn kodlanmasฤฑ ve okunmasฤฑ, diฤer yรถntemlere gรถre daha kolaydฤฑr. JUnit eลdeฤerleri ve bunlar testler yรผrรผtรผlรผrken รงok รถnemlidir. Selenium Grid Paralel yรผrรผtmenin รถnemli olduฤu yerlerde.
Test Senaryolarฤฑ Nasฤฑl Yazฤฑlฤฑr? TestNG
Bir ... Yazmak TestNG Test senaryosu รผรง aลamadan oluลur:
- ฤฐล mantฤฑฤฤฑnฤฑzฤฑ yazฤฑn ve yerleลtirin. TestNG Her yรถntemin รผstรผndeki aรงฤฑklamalar.
- Sฤฑnฤฑf adฤฑ, grup adฤฑ ve paket adฤฑ gibi meta verileri ekleyin.
- รalฤฑลtฤฑr TestNG IDE'nizden veya komut satฤฑrฤฑndan sฤฑnฤฑfฤฑ รงalฤฑลtฤฑrฤฑn.
Bir test senaryosu oluลturmak iรงin ลunu kullanฤฑn: TestNG Aรงฤฑklamalar
ลimdi ilk test senaryomuzu oluลturacaฤฤฑz. TestNG ek aรงฤฑklamalarda SeleniumTesti yazmadan รถnce yeni bir kurulum yapฤฑn. TestNG projede Eclipse ve onu รงaฤฤฑr AdTestNGProje.
Yeni Bir Kurulum TestNG Proje
) 1 Adฤฑm Tฤฑkla Dosya > Yeni > Java Proje.
) 2 Adฤฑm Keลfet AdTestNGProje proje adฤฑ olarak ve tฤฑklayฤฑn Sonraki.
) 3 Adฤฑm iรงe aktar TestNG Kรผtรผphaneler. Tฤฑklayฤฑn. Kรผtรผphaneler sekmesini ve ardฤฑndan Kรผtรผphane Ekleโฆ.
) 4 Adฤฑm iรงinde Kitaplฤฑk ekle diyalog seรง TestNG ve tฤฑklayฤฑn Sonraki.
) 5 Adฤฑm Tฤฑkla Bitiล.
TestNG Artฤฑk Kรผtรผphaneler listesinde gรถrรผnmelidir.
) 6 Adฤฑm ฤฐรงerdikleri JAR dosyalarฤฑnฤฑ ekleyin. Selenium Bunlar API'den geliyor. Java istemci sรผrรผcรผsรผ indirildi selenium.dev/indirmeler.
Dosyanฤฑn bulunduฤu klasรถre gidin Selenium JAR dosyalarฤฑ saklanฤฑr.
Harici JAR dosyalarฤฑnฤฑ ekledikten sonra ekran ลu ลekilde gรถrรผnmelidir.
) 7 Adฤฑm Tฤฑkla Bitiล. Yeni AdTestNGProje Paket Gezgini'nde gรถrรผnรผr.
Yeni Nasฤฑl Oluลturulur TestNG Test Dosyasฤฑ
Proje hazฤฑr olduฤunda, yeni bir tane oluลturun. TestNG dosyasฤฑ.
) 1 Adฤฑm Saฤ tฤฑklayฤฑn. src klasรถr ve seรงin Yeni > Diฤerโฆ.
) 2 Adฤฑm geniลletmek TestNG klasรถr seรงin TestNG sฤฑnฤฑfVe tฤฑklama Sonraki.
) 3 Adฤฑm Aลaฤฤฑda gรถsterilen deฤerleri girin ve tฤฑklayฤฑn. Bitiล. Java dosyanฤฑn adฤฑ AdTestNGfileto.
) 4 Adฤฑm Eclipse รผretir TestNG Aลaฤฤฑda ลablon gรถsterilmiลtir.
ฤฐlk Kodlama Deneyiminizi TestNG Test Durumu
ฤฐlkini oluลturun test durumu unvanฤฑn doฤruluฤunu teyit eden Mercury Turlar ana sayfasฤฑ.
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();
}
}
Dikkat edilmesi gerekenler:
- TestNG ihtiyacฤฑ yok
main()yรถntemi. - Metotlarฤฑn statik olmasฤฑ gerekmez.
- MKS @รlรงek aรงฤฑklama iลaretleri
verifyHomepageTitle()Bir test vakasฤฑ olarak. - Ek aรงฤฑklamalar ลurada yer almaktadฤฑr:
org.testng.annotations.*paketi. - MKS ileri sรผrmek sฤฑnฤฑftan
org.testng.AssertSรผrรผcรผ doฤrulamalarฤฑnฤฑ.
Tek bir kod bloฤunda birden fazla @Test ek aรงฤฑklamasฤฑna sahip olabilirsiniz. TestNG Dosyada bunu ele alฤฑyoruz. โKullanฤฑlan Ek Aรงฤฑklamalarโ TestNGbaลlฤฑklฤฑ bir kฤฑlavuz yayฤฑnladฤฑ Bรถlรผm.
Testi รalฤฑลtฤฑrma
Dosyaya saฤ tฤฑklayฤฑn ve ลu ลekilde รงalฤฑลtฤฑrฤฑn: TestNG testi. Eclipse Bu komut iki รงฤฑktฤฑ รผretir: Konsol penceresinde metinsel bir sonuรง ve grafiksel bir sonuรง. TestNG Sonuรงlar penceresi.
Tarafฤฑndan Oluลturulan Raporlar Kontrol Ediliyor TestNG
Konsol penceresi metin tabanlฤฑ bir รถzet sunarken, TestNG Sonuรงlar penceresi grafiksel bir gรถrรผnรผm sunar.
HTML Raporlarฤฑ Oluลturma
TestNG Ayrฤฑca tam HTML raporlarฤฑ da oluลturabilir.
) 1 Adฤฑm Koลu sonrasฤฑ AdTestNGfiletoProjeye saฤ tฤฑklayฤฑn ve seรงin. Yenile.
) 2 Adฤฑm A test-รงฤฑktฤฑsฤฑ Klasรถr gรถrรผnecektir. Klasรถrรผ geniลletin ve bulun. index.html โ En son รงalฤฑลtฤฑrmaya ait HTML raporu.
) 3 Adฤฑm Double-Tฤฑklayฤฑn index.html iรงeriden aรงmak iรงin EclipseTarayฤฑcฤฑnฤฑzda. Sonraki รงalฤฑลtฤฑrmalarda yenilemek iรงin F5 tuลuna basฤฑn.
Kullanฤฑlan Aรงฤฑklamalar TestNG
@Test ek aรงฤฑklamasฤฑnฤฑ daha รถnce gรถrdรผnรผz. Bu bรถlรผmรผn geri kalanฤฑ, en kullanฤฑลlฤฑ geliลmiล ek aรงฤฑklamalarฤฑ kapsamaktadฤฑr.
รoklu Test Durumlarฤฑ
Tek TestNG Dosya birden fazla @Test ek aรงฤฑklamasฤฑ iรงerebilir. Varsayฤฑlan olarak, @Test ile iลaretlenmiล yรถntemler alfabetik sฤฑrayla yรผrรผtรผlรผr. Aลaฤฤฑdaki kodda, yรถntemler c_test, a_test, ve b_test Kaynak sฤฑrasฤฑna bakฤฑlmaksฤฑzฤฑn alfabetik olarak รงalฤฑลtฤฑrฤฑn.
Kodu รงalฤฑลtฤฑrฤฑn ve aรงฤฑn. index.html. tฤฑklayฤฑn Kronolojik gรถrรผnรผm.
Parametreler
Varsayฤฑlan sฤฑralamayฤฑ geรงersiz kฤฑlmak iรงin ลunu kullanฤฑn: priority parametre. Parametreler, bir aรงฤฑklamanฤฑn davranฤฑลฤฑnฤฑ deฤiลtiren anahtar kelimelerdir.
- Bir deฤer atayฤฑn
=. - Aลaฤฤฑda gรถsterildiฤi gibi, parametreleri aรงฤฑklamanฤฑn hemen ardฤฑndan yer alan parantez iรงine alฤฑn.
TestNG @Test ek aรงฤฑklamalarฤฑnฤฑ en dรผลรผk รถncelik deฤerinden en yรผksek รถncelik deฤerine doฤru yรผrรผtรผr. รncelik numaralarฤฑnฤฑn ardฤฑลฤฑk olmasฤฑ gerekmez.
HTML raporu, yรถntemlerin artan รถncelik sฤฑrasฤฑna gรถre yรผrรผtรผldรผฤรผnรผ doฤrulamaktadฤฑr.
รoklu Parametreler
Dฤฑลฤฑnda priority@Test kabul eder alwaysRun parametre (doฤru veya yanlฤฑล). Tek bir aรงฤฑklamada iki veya daha fazla parametre kullanmak iรงin, bunlarฤฑ virgรผlle ayฤฑrฤฑn:
@Test(priority = 0, alwaysRun = true)
@BeforeTest ve @AfterTest
| @รnceTest | Bu aรงฤฑklama altฤฑnda yer alan yรถntemler รงalฤฑลtฤฑrฤฑlฤฑr. ilk test senaryosundan รถnce TestNG dosya. |
| @SonraTest | Bu aรงฤฑklama altฤฑnda yer alan yรถntemler รงalฤฑลtฤฑrฤฑlฤฑr. tรผm test senaryolarฤฑndan sonra TestNG dosya tamamlandฤฑ. |
Aลaฤฤฑdaki kodu gรถz รถnรผnde bulundurun.
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();
}
}
Tablo ve koddan, dizinin ลu ลekilde olacaฤฤฑnฤฑ tahmin edebiliriz:
- 1. โ
launchBrowser() - 2. โ
verifyHomepageTitle() - 3. โ
terminateBrowser()
Kaynak dosyadaki aรงฤฑklama bloklarฤฑnฤฑn yerleลimi, bunlarฤฑn yรผrรผtรผlme sฤฑrasฤฑnฤฑ etkilemez. Aลaฤฤฑda gรถsterildiฤi gibi yรถntemleri yeniden dรผzenlemeyi deneyin.
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);
}
}
Kodu รงalฤฑลtฤฑrฤฑn ve sonucu doฤrulayฤฑn.
@BeforeMethod ve @AfterMethod
| @BeforeMethod | Bu aรงฤฑklama altฤฑnda yer alan yรถntemler รงalฤฑลtฤฑrฤฑlฤฑr. her test yรถnteminden รถnce. |
| @AfterMethod | Bu aรงฤฑklama altฤฑnda yer alan yรถntemler รงalฤฑลtฤฑrฤฑlฤฑr. her test yรถnteminden sonra. |
In Mercury รrneฤin, ana sayfadan ulaลฤฑlan iki hedef sayfanฤฑn baลlฤฑklarฤฑnฤฑ doฤrulamak istediฤimizi varsayalฤฑm.
Testin akฤฑลฤฑ ลu ลekildedir:
- Ana sayfayฤฑ aรงฤฑn ve baลlฤฑฤฤฑnฤฑ doฤrulayฤฑn.
- KAYDOLUN'a tฤฑklayฤฑn ve hedef sayfanฤฑn baลlฤฑฤฤฑnฤฑ doฤrulayฤฑn.
- Ana sayfaya geri dรถnรผn ve baลlฤฑฤฤฑ doฤrulayฤฑn.
- DESTEK'e tฤฑklayฤฑn ve hedef sayfanฤฑn baลlฤฑฤฤฑnฤฑ doฤrulayฤฑn.
- Ana sayfaya geri dรถnรผn ve baลlฤฑฤฤฑ tekrar doฤrulayฤฑn.
Aลaฤฤฑdaki kod, @BeforeMethod ve @AfterMethod'un tekrarlanan adฤฑmlarฤฑ nasฤฑl ele aldฤฑฤฤฑnฤฑ gรถstermektedir.
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();
}
}
Testi รงalฤฑลtฤฑrdฤฑktan sonra, TestNG Aลaฤฤฑdaki sฤฑralamayฤฑ rapor eder.
รzetle: kurulum adฤฑmlarฤฑnฤฑ iรงeriye yerleลtirin. @BeforeMethod ve temizleme veya gezinme sฤฑfฤฑrlama iลlemleri iรงeride @AfterMethod Dolayฤฑsฤฑyla her test senaryosu bilinen bir durumda baลlar ve biter.
รzeti TestNG Aรงฤฑklamalar
- @BeforeSuite: Test paketindeki tรผm testlerden รถnce รงalฤฑลฤฑr.
- @AfterSuite: Test paketindeki tรผm testler tamamlandฤฑktan sonra รงalฤฑลฤฑr.
- @BeforeTest: Bir sฤฑnฤฑfฤฑn iรงindeki herhangi bir test yรถnteminden รถnce รงalฤฑลฤฑr. etiket.
- @TestSonrasฤฑ: Bir sฤฑnฤฑfฤฑn iรงindeki tรผm test metotlarฤฑndan sonra รงalฤฑลฤฑr. etiket.
- @BeforeGroups: Listelenen gruplardan herhangi birine ait ilk test yรถnteminden kฤฑsa bir sรผre รถnce รงalฤฑลฤฑr.
- @AfterGroups: Listelenen gruplardan herhangi birine ait olan son test yรถnteminden kฤฑsa bir sรผre sonra รงalฤฑลฤฑr.
- @Dersรncesi: Geรงerli sฤฑnฤฑftaki ilk test metodundan รถnce รงalฤฑลฤฑr.
- @AfterClass: Geรงerli sฤฑnฤฑftaki tรผm test metotlarฤฑndan sonra รงalฤฑลฤฑr.
- @BeforeMethod: Her test yรถnteminden รถnce รงalฤฑลtฤฑrฤฑlฤฑr.
- @AfterMethod: Her test yรถnteminden sonra รงalฤฑลฤฑr.
- @Test: Bu yรถntem, test senaryosu olarak iลaretlenir.

































