TestNG nedir?
TestNG , NG'nin "Yeni Nesil" anlamına geldiği bir otomasyon test çerçevesidir. TestNG, ek açıklamaları (@) kullanan JUnit'ten esinlenmiştir. TestNG, JUnit'in dezavantajlarının üstesinden gelir ve uçtan uca testi kolaylaştırmak için tasarlanmıştır.
TestNG'yi kullanarak uygun bir rapor oluşturabilir ve kaç test olayının geçtiğini, kaldığını ve atlandığını kolayca öğrenebilirsiniz. Başarısız test senaryolarını ayrı ayrı yürütebilirsiniz.
Örneğin:
- Diyelim ki, beş test vakanız var, her test senaryosu için bir yöntem yazılıyor (Programın testNG kullanılmadan ana yöntem kullanılarak yazıldığını varsayın). Bu programı ilk çalıştırdığınızda, üç yöntem başarıyla yürütülür ve dördüncü yöntem başarısız olur. Sonra dördüncü yöntemde bulunan hataları düzeltin, şimdi yalnızca dördüncü yöntemi çalıştırmak istiyorsunuz çünkü ilk üç yöntem yine de başarıyla yürütülüyor. TestNG kullanılmadan bu mümkün değildir.
- Selenium'daki TestNG, bir seçenek sunar, yani test-output klasöründeki testng-fail.xml dosyası. Yalnızca başarısız test olaylarını çalıştırmak istiyorsanız, bu XML dosyasını çalıştırdığınız anlamına gelir. Yalnızca başarısız test durumlarını yürütür.
Yukarıdaki kavramın yanı sıra, TestNG'nin Avantajları, @test notlarını kullanarak test yöntemlerinin nasıl oluşturulacağı, bu sınıfların test paketi dosyasına nasıl dönüştürüleceği ve komut satırının yanı sıra tutulma yoluyla nasıl çalıştırılacağı gibi TestNG hakkında daha fazla bilgi edineceksiniz. .
Bu TestNG eğitiminde öğreneceksiniz
- Neden Selenium ile TestNG Kullanılmalı?
- TestNG'nin JUnit'e Göre Avantajları
- TestNG Ek Açıklamalarını Kullanarak Test Olayı Oluşturun
- Yeni Bir TestNG Test Dosyası Nasıl Oluşturulur
- İlk TestNG Test Durumumuzun Kodlanması Örneğimiz
- Testi Çalıştırmak
- TestNG tarafından oluşturulan raporları kontrol etme
- TestNG'de kullanılan ek açıklamalar
- Çoklu Test Durumları
- Parametreler
- Çoklu Parametreler
- TestNG Ek Açıklamalarının Özeti
Neden Selenium ile TestNG Kullanılmalı?
Varsayılan Selenyum testleri, test sonuçları için uygun bir format oluşturmaz. Selenium'da TestNG kullanarak test sonuçları oluşturabiliriz.
Çoğu Selenium kullanıcısı, avantajları nedeniyle bunu Junit'ten daha fazla kullanır. TestNG'nin pek çok özelliği var ama biz sadece Selenium'da kullanabileceğimiz en önemli özelliklere odaklanacağız. Selenium TestNG'nin temel özellikleri şunlardır:
- Raporu bir dizi test çalışması, geçilen test senaryosu sayısı, başarısız test senaryosu sayısı ve atlanan test senaryosu sayısı dahil olmak üzere uygun bir formatta oluşturun.
- Birden çok test durumu, testng.xml dosyasına dönüştürülerek daha kolay gruplanabilir. Öncelikle hangi test senaryosunun yürütülmesi gerektiğini belirleyebilirsiniz.
- Aynı test senaryosu, yalnızca 'çağrı sayısı' adı verilen anahtar sözcük kullanılarak döngüler olmadan birden çok kez yürütülebilir.
- Testng kullanarak, birden çok tarayıcıda birden çok test senaryosu, yani tarayıcılar arası test yürütebilirsiniz.
- TestNG çerçevesi, TestNG Maven, Jenkins vb. Araçlarla kolayca entegre edilebilir.
- Testte kullanılan ek açıklamaların anlaşılması çok kolaydır, örn: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
- WebDriver, rapor oluşturmak için yerel bir mekanizmaya sahip değildir. TestNG, raporu aşağıda gösterildiği gibi okunabilir bir formatta oluşturabilir.
- TestNG, testlerin kodlanma şeklini basitleştirir. Testlerimizde artık statik bir ana yönteme ihtiyaç yoktur. Eylemlerin sırası, yöntemlerin statik olmasını gerektirmeyen, anlaşılması kolay ek açıklamalarla düzenlenir.
- Yakalanmayan istisnalar, testi erken sonlandırmadan TestNG tarafından otomatik olarak ele alınır. Bu istisnalar, raporda başarısız adımlar olarak rapor edilir.
TestNG'nin JUnit'e Göre Avantajları
TestNG'nin JUnit'e göre üç büyük avantajı vardır:
- Ek açıklamaların anlaşılması daha kolay
- Test senaryoları daha kolay gruplanabilir
- Paralel test mümkündür
TestNG'deki ek açıklamalar, aşağıdaki yöntemin nasıl yürütüleceğini kontrol edebilen kod satırlarıdır . Her zaman @ sembolünden önce gelirler. Çok erken ve hızlı bir TestNG Örneği aşağıda gösterilen örnektir.
Ek açıklamalar, "TestNG'de kullanılan Ek Açıklamalar" adlı bölümde daha sonra tartışılacaktır, bu nedenle, yukarıdaki TestNG Örneğini henüz anlamadıysanız, tamamıyla sorun değil. Şimdilik, TestNG'deki ek açıklamaların JUnit'e göre kodlanmasının ve anlaşılmasının daha kolay olduğuna dikkat etmek önemlidir.
Testleri paralel olarak çalıştırma yeteneği TestNG'de mevcuttur ancak JUnit'te yoktur, bu nedenle TestNG çerçevesi Selenium Grid kullanan test kullanıcıları için daha çok tercih edilir.
TestNG Ek Açıklamalarını Kullanarak Test Olayı Oluşturun
Şimdi, Selenium'da TestNG Ek Açıklamalarını kullanarak ilk test senaryomuzu nasıl oluşturacağımızı öğreneceğiz:
Bir test senaryosu oluşturmadan önce, Eclipse'de yeni bir TestNG Projesi kurmalı ve bunu "FirstTestNGProject" olarak adlandırmalıyız.
Yeni bir TestNG Projesi kurma
Adım 1: Dosya> Yeni> Java Projesi'ne tıklayın
Adım 2: Proje Adı olarak "FirstTestNGProject" yazın ve ardından İleri'ye tıklayın.
Adım 3: Şimdi TestNG Kitaplıklarını projemize aktarmaya başlayacağız. "Kitaplıklar" sekmesine ve ardından "Kitaplık Ekle" ye tıklayın
… "Adım 4: Kitaplık Ekle iletişim kutusunda "TestNG" yi seçin ve İleri'ye tıklayın.
Adım 5: Bitir'e tıklayın.
TestNG'nin Kitaplıklar listesine dahil edildiğini fark etmelisiniz.
Adım 6: Şimdi Selenium API içeren JAR dosyalarını ekleyeceğiz. Bu dosyalar, önceki bölümlerde Selenium ve Eclipse'i kurarken http://docs.seleniumhq.org/download/ adresinden indirdiğimiz Java istemci sürücüsünde bulunur.
Ardından Selenium JAR dosyalarını yerleştirdiğiniz yere gidin.
Harici JAR'ları ekledikten sonra, ekranınız böyle görünmelidir.
Adım 7: Bitir'e tıklayın ve FirstTestNGProject'imizin Eclipse'in Paket Gezgini penceresinde göründüğünü doğrulayın.
Yeni Bir TestNG Test Dosyası Nasıl Oluşturulur
Artık bu TestNG eğitiminde projemizi kurmayı bitirdiğimize göre, yeni bir TestNG dosyası oluşturalım.
Adım 1: "src" paket klasörünü sağ tıklayın ve ardından Yeni> Diğer'i seçin
…Adım 2: TestNG klasörünü tıklayın ve "TestNG sınıfı" seçeneğini seçin. Sonrakine tıkla.
Adım 3: Aşağıda belirtilen değerleri uygun giriş kutularına yazın ve Bitir'e tıklayın. Java dosyamızı "FirstTestNGFile" olarak adlandırdığımıza dikkat edin.
Eclipse, aşağıda gösterilen TestNG dosyamız için şablonu otomatik olarak oluşturmalıdır.
İlk TestNG Test Durumumuzun Kodlanması Örneğimiz
Şimdi, Mercury Tours'un ana sayfasının doğru olup olmadığını kontrol edecek ilk Test Durumumuzu oluşturalım. Kodunuzu aşağıdaki TestNG Örneğinde gösterildiği gibi yazın:
package firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";genel WebDriver sürücüsü;@Ölçekgenel void validHomepageTitle () {System.out.println ("firefox tarayıcısı başlatılıyor");System.setProperty ("webdriver.gecko.driver", driverPath);sürücü = yeni FirefoxDriver ();driver.get (baseUrl);String beklenenTitle = "Hoş Geldiniz: Merkür Turları";String actualTitle = driver.getTitle ();Assert.assertEquals (gerçekTitle, BeklenenTitle);driver.close ();}}
Aşağıdakilere dikkat edin.
- TestNG, main () yönteminizin olmasını gerektirmez.
- Yöntemlerin statik olması gerekmez.
- @Test ek açıklamasını kullandık. @Test, altındaki yöntemin bir test durumu olduğunu söylemek için kullanılır . Bu durumda, validHomepageTitle () yöntemini test örneğimiz olacak şekilde ayarladık, bu nedenle üzerine bir '@Test' ek açıklaması yerleştirdik.
- TestNG'de ek açıklamalar kullandığımız için, org.testng.annotations. * Paketini içe aktarmamız gerekiyordu.
- Assert sınıfını kullandık. Assert sınıfı, TestNG'de doğrulama işlemlerini yürütmek için kullanılır . Kullanmak için org.testng.Assert paketini içe aktarmamız gerekiyor.
Tek bir TestNG dosyasında birden çok test olayınız (bu nedenle birden çok @Test ek açıklaması) olabilir. Bu konu, "TestNG'de kullanılan ek açıklamalar" bölümünde daha ayrıntılı olarak ele alınacaktır.
Testi Çalıştırmak
Testi çalıştırmak için normalde yaptığınız gibi dosyayı Eclipse'de çalıştırın. Eclipse, biri Konsol penceresinde, diğeri de TestNG Sonuçları penceresinde olmak üzere iki çıkış sağlayacaktır.
TestNG tarafından oluşturulan raporları kontrol etme
Eclipse'deki Konsol penceresi, test senaryosu sonuçlarımızın metin tabanlı raporunu verirken, TestNG Sonuçları penceresi bize grafiksel bir rapor verir.
HTML Raporları Oluşturma
TestNG, HTML formatında raporlar oluşturma yeteneğine sahiptir.
Adım 1: Önceki bölümde oluşturduğumuz FirstTestNGFile'ımızı çalıştırdıktan sonra, Project Explorer penceresinde proje adına (FirstTestNGProject) sağ tıklayın ve ardından "Yenile" seçeneğine tıklayın.
Adım 2: Bir "test-çıktı" klasörünün oluşturulduğuna dikkat edin. Genişletin ve bir index.html dosyası arayın. Bu HTML dosyası, en son test çalıştırmasının sonuçlarının bir raporudur.
Adım 3: Eclipse'in yerleşik web tarayıcısında açmak için bu index.html dosyasına çift tıklayın. Bu sayfayı, normal web tarayıcılarında olduğu gibi, testinizi yeniden çalıştırdıktan sonra istediğiniz zaman F5'e basarak yenileyebilirsiniz.
TestNG'de kullanılan ek açıklamalar
Önceki bölümde, @Test ek açıklamasıyla tanışmıştınız. Şimdi, daha ileri açıklamalar ve kullanımları üzerinde çalışacağız.
Çoklu Test Durumları
Tek bir TestNG dosyasında birden fazla @Test ek açıklaması kullanabiliriz. Varsayılan olarak, @Test ile açıklanmış yöntemler alfabetik olarak yürütülür. Aşağıdaki koda bakın. C_test, a_test ve b_test yöntemleri kodda alfabetik olarak düzenlenmemiş olsa da, bu şekilde çalıştırılacaktır.
Bu kodu çalıştırın ve oluşturulan index.html sayfasında "Kronolojik görünüm" ü tıklayın.
Parametreler
Yöntemlerin farklı bir sırada yürütülmesini istiyorsanız, "öncelik" parametresini kullanın. Parametreler, ek açıklamanın işlevini değiştiren anahtar sözcüklerdir .
- Parametreler, bunlara bir değer atamanızı gerektirir. Bunu, yanlarına bir ve ardından değeri ekleyerek yaparsınız.
- Parametreler, aşağıda gösterilen kod parçacığı gibi ek açıklamanın hemen arkasına yerleştirilmiş bir çift parantez içine alınır.
TestNG, @Test ek açıklamasını en düşük öncelik değeriyle en büyüğüne kadar yürütür. Öncelik değerlerinizin ardışık olmasına gerek yoktur.
TestNG HTML raporu, yöntemlerin artan öncelik değerine göre yürütüldüğünü onaylayacaktır.
Çoklu Parametreler
"Öncelik" dışında, @Test'in "alwaysRun" adında yalnızca "true" veya "false" olarak ayarlanabilen başka bir parametresi vardır. Tek bir ek açıklamada iki veya daha fazla parametre kullanmak için, bunları aşağıda gösterilene benzer bir virgülle ayırın .
@Test (öncelik = 0, her zamanÇalıştır = doğru)
@BeforeTest ve @AfterTest
@Evleneceksen |
bu açıklama altındaki yöntemler , TestNG dosyasındaki ilk test senaryosundan önce yürütülecektir . |
@FterTest |
bu açıklama altındaki yöntemler , TestNG dosyasındaki tüm test senaryoları yürütüldükten sonra yürütülecektir . |
Aşağıdaki kodu inceleyin.
package firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";genel WebDriver sürücüsü;@Evleneceksenpublic void launchBrowser () {System.out.println ("firefox tarayıcısı başlatılıyor");System.setProperty ("webdriver.gecko.driver", driverPath);sürücü = yeni FirefoxDriver ();driver.get (baseUrl);}@Ölçekgenel void validHomepageTitle () {String beklenenTitle = "Hoş Geldiniz: Merkür Turları";String actualTitle = driver.getTitle ();Assert.assertEquals (gerçekTitle, BeklenenTitle);}@FterTestpublic void terminateBrowser () {driver.close ();}}
Tablonun sunduğu mantığı ve yukarıdaki kodu uygulayarak, yöntemlerin çalıştırılacağı sıranın şöyle olacağını tahmin edebiliriz:
- 1 st - launchBrowser ()
- 2 nci - verifyHomepageTitle ()
- 3. rd - tarayıcıyı sonlandır ()
Açıklama bloklarının yerleştirilmesi, yürütülecekleri kronolojik sırayı etkilemeden değiştirilebilir . Bir TestNG Örneği ile anlayalım ve açıklama bloklarını kodunuz aşağıdakine benzer görünecek şekilde yeniden düzenlemeye çalışalım.
package firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";genel WebDriver sürücüsü;@AfterTest // Karmakarışıkpublic void terminateBrowser () {driver.close ();}@BeforeTest // Karmakarışıkpublic void launchBrowser () {System.out.println ("firefox tarayıcısı başlatılıyor");System.setProperty ("webdriver.gecko.driver", driverPath);sürücü = yeni FirefoxDriver ();driver.get (baseUrl);}@Test // Karmakarışıkgenel void validHomepageTitle () {String beklenenTitle = "Hoş Geldiniz: Merkür Turları";String actualTitle = driver.getTitle ();Assert.assertEquals (gerçekTitle, BeklenenTitle);}}
Yukarıdaki kodu çalıştırın ve dikkat edin
@BeforeMethod ve @AfterMethod
@Evleneceksen |
bu açıklama altındaki yöntemler, her test durumundaki her yöntemden önce yürütülecektir . |
@AfterMethod |
bu açıklama altındaki yöntemler, her test durumundaki her yöntemden sonra yürütülecektir . |
Mercury Tours'da, aşağıdaki iki bağlantının hedef sayfalarının başlıklarını doğrulamayı sevdiğimizi varsayalım.
Testimizin akışı şöyle olacaktır:
- Ana sayfaya gidin ve başlığını doğrulayın.
- KAYDOL'a tıklayın ve hedef sayfasının başlığını doğrulayın.
- Ana sayfaya geri dönün ve hala doğru başlığa sahip olup olmadığını kontrol edin.
- DESTEK'e tıklayın ve hedef sayfasının başlığını doğrulayın.
- Ana sayfaya geri dönün ve hala doğru başlığa sahip olup olmadığını kontrol edin.
Aşağıdaki kod, @BeforeMethod ve @AfterMethod'un yukarıda bahsedilen senaryoyu verimli bir şekilde yürütmek için nasıl kullanıldığını göstermektedir.
package firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;org.testng.annotations. *;@Ölçekpublic class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";genel WebDriver sürücüsü;public String beklenen = boş;public String gerçek = boş;@Evleneceksenpublic void launchBrowser () {System.out.println ("firefox tarayıcısı başlatılıyor");System.setProperty ("webdriver.gecko.driver", driverPath);sürücü = yeni FirefoxDriver ();driver.get (baseUrl);}@Evleneceksengenel void validHomepageTitle () {String beklenenTitle = "Hoş Geldiniz: Merkür Turları";String actualTitle = driver.getTitle ();Assert.assertEquals (gerçekTitle, BeklenenTitle);}@Test (öncelik = 0)public void register () {driver.findElement (By.linkText ("REGISTER")) tıklayın ();beklenen = "Kayıt: Mercury Tours";gerçek = driver.getTitle ();Assert.assertEquals (gerçek, beklenen);}@Test (öncelik = 1)genel void desteği () {driver.findElement (By.linkText ("DESTEK")) tıklayın ();beklenen = "Yapım Aşamasında: Mercury Tours";gerçek = driver.getTitle ();Assert.assertEquals (gerçek, beklenen);}@AfterMethodpublic void goBackToHomepage () {driver.findElement (By.linkText ("Ana Sayfa")) tıklayın ();}@FterTestpublic void terminateBrowser () {driver.close ();}}
Bu testi gerçekleştirdikten sonra, TestNG'niz aşağıdaki sırayı rapor etmelidir.
Basitçe ifade etmek gerekirse, @BeforeMethod her test senaryosundan önce çalıştırmanız gereken yöntemleri içermeli, @AfterMethod ise her test olayından sonra çalıştırmanız gereken yöntemleri içermelidir .
TestNG Ek Açıklamalarının Özeti
@BeforeSuite : Ek açıklamalı yöntem, bu paketteki tüm testler çalışmadan önce çalıştırılacaktır.
@AfterSuite : Ek açıklamalı yöntem, bu paketteki tüm testler çalıştırıldıktan sonra çalıştırılacaktır.
@BeforeTest : Ek açıklamalı yöntem, etiketin içindeki sınıflara ait herhangi bir test yöntemi çalıştırılmadan önce çalıştırılacaktır.
@AfterTest : Ek açıklamalı yöntem, etiketin içindeki sınıflara ait tüm test yöntemleri çalıştırıldıktan sonra çalıştırılacaktır.
@BeforeGroups : Bu yapılandırma yönteminin daha önce çalıştıracağı grupların listesi. Bu yöntemin, bu gruplardan herhangi birine ait olan ilk test yöntemi çağrılmadan kısa bir süre önce çalışması garanti edilir.
@AfterGroups : Bu yapılandırma yönteminin daha sonra çalışacağı grupların listesi. Bu yöntemin, bu gruplardan herhangi birine ait olan son test yöntemi çağrıldıktan kısa bir süre sonra çalışması garanti edilir.
@BeforeClass : Açıklamalı yöntem, geçerli sınıftaki ilk test yöntemi çağrılmadan önce çalıştırılacaktır.
@AfterClass : Açıklamalı yöntem, geçerli sınıftaki tüm test yöntemleri çalıştırıldıktan sonra çalıştırılacaktır.
@BeforeMethod : Ek açıklamalı yöntem her test yönteminden önce çalıştırılacaktır.
@AfterMethod : Ek açıklamalı yöntem, her test yönteminden sonra çalıştırılacaktır.
@Test : Ek açıklamalı yöntem bir test senaryosunun parçasıdır
Sonuç
- TestNG, Selenium testlerinin anlaşılmasını kolaylaştıran ve anlaşılması kolay raporlar oluşturabilen bir test çerçevesidir.
- TestNG'nin JUnit'e göre ana avantajları şunlardır.
- Ek açıklamaların kullanımı ve anlaşılması daha kolaydır.
- Test senaryoları daha kolay gruplanabilir.
- TestNG, paralel testler oluşturmamızı sağlar.
- Eclipse'deki Konsol penceresi metin tabanlı bir sonuç oluştururken, TestNG penceresi daha kullanışlıdır çünkü bize test sonucunun grafik çıktısını ve aşağıdakiler gibi diğer anlamlı ayrıntıları verir:
- Her yöntemin çalışma süreleri.
- Yöntemlerin uygulandığı kronolojik sıralama
- TestNG, HTML tabanlı raporlar oluşturabilir.
- Ek açıklamalar, normal Java TestNG yöntemleri gibi parametreleri kullanabilir.
- TestNG Veri Sağlayıcısı, tek bir yürütmede test senaryolarında farklı değerler ileten test işlevine parametreleri geçirmenin bir yoludur.