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.

































