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ı.

  • 🧱 Temel Çerçeve: TestNG uzanır JUnit Açıklamalı fikirler, gruppingve paralel test yürütme için Selenium süitler.
  • ???? ️ Açıklamalar İş Akışını Yönlendirir: @Test, @BeforeMethod, @AfterMethod, @BeforeTest ve @AfterTest sırasıyla kurulum, test ve kaldırma işlemlerini gerçekleştirir.
  • 🗂️ Eclipse Kurmak: Bir Yapı TestNG projeye ekle TestNG kütüphane ve Selenium JAR dosyalarını oluşturun, ardından sihirbazdan test sınıfları oluşturun.
  • 📊 Raporlama: TestNG Test çıktısı klasöründe kronolojik görünümler de dahil olmak üzere metin, grafik ve HTML raporları oluşturur.
  • ⚙️ Parametreler: Testlerin yürütülme sırasını kontrol etmek ve testlere veri sağlamak için priority, alwaysRun ve dataProvider özelliklerini kullanın.
  • 🤖 Yapay Zeka Desteği: Yapay zekâ kodlama asistanları hızlandırıyor TestNG Sınıf oluşturma, konum belirleyici güncellemeleri ve veri sağlayıcı iskeleti oluşturma.

TestNG Klavuz

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.xml içindeki dosyayı test-output Klasö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.xml Yü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 HTML rapor örneği Selenium testleri

  • 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.

Olağan Java Ana metoda sahip test sınıfı yapısı

TestNG Ek açıklamalar kullanarak test sınıfı yapısı

  • 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.

Örnek E-posta TestNG yukarıdaki açıklama Java yöntem

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:

  1. İş mantığınızı yazın ve yerleştirin. TestNG Her yöntemin üstündeki açıklamalar.
  2. Sınıf adı, grup adı ve paket adı gibi meta verileri ekleyin.
  3. Ç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.

Eclipse yeni bir menü oluşturmak için Java proje

) 2 Adım Keşfet AdTestNGProje proje adı olarak ve tıklayın Sonraki.

Yeni Java Adı First olan proje sihirbazıTestNGProje

) 3 Adım içe aktar TestNG Kütüphaneler. Tıklayın. Kütüphaneler sekmesini ve ardından Kütüphane Ekle….

Kütüphaneler sekmesinde Kütüphane Ekle seçeneği bulunmaktadır. Eclipse

) 4 Adım içinde Kitaplık ekle diyalog seç TestNG ve tıklayın Sonraki.

Seçilmesi TestNG Kitaplık Ekle iletişim kutusunda

) 5 Adım Tıkla Bitiş.

Kütüphane Ekle sihirbazını tamamlama

TestNG Artık Kütüphaneler listesinde görünmelidir.

TestNG Kütüphaneler listesinde görünür

) 6 Adım İçerdikleri JAR dosyalarını ekleyin. Selenium Bunlar API'den geliyor. Java istemci sürücüsü indirildi selenium.dev/indirmeler.

Harici JAR'ları Ekle iletişim kutusunda Eclipse

Dosyanın bulunduğu klasöre gidin Selenium JAR dosyaları saklanır.

Seçilmesi Selenium Derleme yolu için JAR dosyaları

Harici JAR dosyalarını ekledikten sonra ekran şu şekilde görünmelidir.

Selenium Kütüphaneler listesine JAR dosyaları eklendi.

) 7 Adım Tıkla Bitiş. Yeni AdTestNGProje Paket Gezgini'nde görünür.

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….

src klasöründen Yeni Diğer menüsü Eclipse

) 2 Adım genişletmek TestNG klasör seçin TestNG sınıfVe tıklama Sonraki.

TestNG Yeni sihirbazdaki sınıf seçeneği

) 3 Adım Aşağıda gösterilen değerleri girin ve tıklayın. Bitiş. Java dosyanın adı AdTestNGfileto.

TestNG Birinci sınıf sihirbazıTestNGDosya değerleri

) 4 Adım Eclipse üretir TestNG Aşağıda şablon gösterilmiştir.

oluşturulan TestNG sınıf şablonunda Eclipse editör

İ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.Assert Sü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.

TestNG Test sonucunu gösteren sonuç penceresi

Eclipse Konsol penceresi ile TestNG metin çıktısı

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.

Metin mi yoksa grafik mi? TestNG sonuç karşılaştırması

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.

Yenileme seçeneği için TestNG projede Eclipse

) 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.

test-output klasörü, index.html dosyası vurgulanmış şekilde.

) 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.

TestNG HTML dizin raporu şu şekilde oluşturuldu: Eclipse

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.

Tek bir yöntem içinde birden fazla @Test metodu TestNG sınıf

Kodu çalıştırın ve açın. index.html. tıklayın Kronolojik görünüm.

Birden fazla öğenin kronolojik görünümü TestNG yöntemleri

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 Parametre ve değer sözdizimiyle açıklama

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.

@Test öncelik parametreleriyle birlikte tam kod.

HTML raporu, yöntemlerin artan öncelik sırasına göre yürütüldüğünü doğrulamaktadır.

TestNG Öncelik sırasına göre çalıştırılan yöntemleri gösteren rapor.

Ç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)

@Test ek açıklaması içinde birden fazla parametre örneği

@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.

TestNG Karışık açıklamalara rağmen sonucun siparişi doğruluyor.

@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.

Üç bağlantıdan Mercury Turlar ana sayfası

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.

TestNG BeforeMethod ve AfterMethod kullanılarak rapor dizisi

Ö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.

SSS

JUnit 5 modernize edilmiş JUnit Jupiter API ve uzantı modeli ile. TestNG paralel yürütme ve paket düzeyinde gruplama konusunda hala lider konumda.ping, dependsOn ve DataProvider. Birçok Selenium takımlar seçiyor TestNG uçtan uca süitler için ve JUnit Birim testleri için 5 adet.

`parallel="methods"` veya `parallel="classes"` ifadesini ve `thread-count` özelliğini ekleyin. testng.xml dosyasının içindeki etiket. TestNG Ardından test yöntemlerini iş parçacıkları arasında dağıtır, bu da şu amaçlar için idealdir: Selenium Grid veya bulut tabanlı, tarayıcılar arası çalıştırma.

@DataProvider, birden fazla veri kümesini tek bir @Test metoduna besler. Sağlayıcıdaki her satır bir çalıştırmayı temsil eder. Veri odaklı yaklaşımlar için standart bir kalıptır. Selenium Formlara, arama kutularına veya giriş ekranlarına karşı yapılan testler.

Evet. AI kodlama asistanları üretir TestNG İskeletler oluşturun, @Test yöntemlerine açıklama ekleyin, Page Object sınıfları oluşturun ve örnek CSV dosyalarından DataProvider dizileri taslak haline getirin; bu sayede iskelet oluşturma süresini önemli ölçüde azaltın.

Üretken yapay zeka, testng-results.xml ve Surefire günlüklerini alır, benzer hataları kümelendirir, olası temel nedenleri önerir ve Jira biletleri oluşturur. Bu, kararsız testlerin sınıflandırılmasını kısaltır ve QA liderlerinin CI düzeltmelerini önceliklendirmesine yardımcı olur.

Bu yazıyı şu şekilde özetleyin: