TestNG Nedir ?

Merhaba arkadaşlar, Mobilhanem.com üzerinde Selenium ile Test Otomasyonu Geliştirme serimizin on ikinci dersinde TestNG konusuna değineceğim. Bir önceki dersimizde Cucumber ile Behaviour Driven Development (BDD) konusunu ele almıştık. Bu dersimizde TestNG nedir, projelerimiz de nasıl kullanabiliriz ve avantajı nelerdir gibi konulara değinmeye çalışacağım.

TestNG Nedir ?

TestNG (Next Generation), JUnit ve NUnit test frameworklerinin zayıf yönlerinden etkilenmiş ve  bunların ortadan kaldırılması amaçlanarak Cedric Beust tarafından geliştirilen açık kaynaklı bir test frameworküdür. TestNG, JUnit ve NUnit test frameworklerinin eksiklerini kapatmak haricinde kullanımı da kolay ve esnek hale getirmesi hedeflenmiştir.

TestNG kullanarak uygun bir rapor oluşturabilir ve rapor sonucunda kaç test senaryosunun başarılı ve başarısız olduğunu görebiliriz. Ayrıca başarısız olan test senaryolarını ayrı ayrı da yürütebilmeye sahibiz. Burayı daha iyi anlamak için şu şekilde bir örnek üzerinde duralım.

Örneğin 6 tane mevcut bir test senaryomuz bulunmaktadır. Bu test senaryolarını koşturmaya başladığımızda 4 senaryonun başarılı olduğunu 5. Senaryoda hata verip durduğunu düşünelim. 5. Senaryoda ki mevcut hataları düzeltip yalnızca 5.senaryodan testimizi koşturmaya başlayalım çünkü ilk dört senaryonun zaten başarılı olduğunu görmüştük. En baştan testlerimizi koşturmaya gerek yoktur. TestNG kullanmadan bu şekilde testi çalıştırmamız da mümkün değildir.

TestNG , başarız olan testleri tuttuğu bir testng-failed isimli bir xml oluşturmaktadır.  Yalnızca başarısız olan testleri çalıştırmak istediğimiz aslında sadece testNG tarafından oluşturulmuş xml çalışmaktadır.

TestNG Avantajlı Özellikleri : 

  • Notasyonlar,
  • Annotationlar,
  • Testlerin ilgili Thread’lerde koşabilmesi,
  • Multi thread (Çoklu Akış) test desteği,
  • @DataProvider notasyonu sayesinde Data Driven Test,
  • Esnek test konfigürasyonu,
  • Esneklik için BeanShell desteği,
  • Kendi içerisinde loglama desteği,
  • Nesne yönelimli geliştirme,
  • Bağımlılık testi desteği gibi özellikler yer almaktadır.

Neden Selenium ile TestNG beraber kullanılmalıdır ?

Selenium testleri, test sonuçları için uygun bir format oluşturmaz bu neden ile TestNG kullanılarak test sonuçları üretebiliriz. Selenium ile derslerimizin çoğunda JUnit kullanarak test senaryolarımızı gerçekleştirmiştik fakat çoğu test otomasyon geliştiricileri TestNG kullanarak geliştirmelerini yapmaktadır.

Selenium ile TestNG beraber kullanıldıklarında ;

  • Koşturulan test senaryolarının sonucunda oluşturulmuş rapor da test senaryo sayısı, başarısız test senaryo sayısı ve atlanan test senaryo sayıları uygun biçimde raporlanır.
  • Birden çok test durumu, testng.xml dosyasında gruplandırılarak yazılmıştır. Hangi test senaryosuna öncelik vereceğinizi ayarlayabilirsiniz.
  • Aynı test durumu ‘invocation count’ (çağırma sayısı) anahtar sözcüğü kullanılarak bir çok kez yürütülebilir.
  • TestNG kullanılarak, birden fazla tarayıcıda yani çapraz tarayıcı testinde birden fazla test durumu yürütebilirsiniz.
  • Maven, Jenkins vb. Araçlar ile kolayca entegre edebilirsiniz.
  • WebDriver’ın rapor oluşturmak için bir yapısı bulunmamaktadır. TestNG, raporu aşağıda ki görselde gösterildiği gibi oluşturabilmektedir.

TestNG Nedir

 

 

 

 

  • TestNG, testlerimizin kodlanmasını basitleştirir ve bunun için statik bir ana metod kullanmamıza gerek yoktur.

Örnek Kod Yapısı Karşılaştırması ; 

TestNG Nedir
TestNG Kod Yapısı Karşılaştırması
TestNG Nedir
TestNG Kod Yapısı Karşılaştırması

 

 

 

 

 

 

 

 

 

 

 

 

  • Test koşturma sırasında fırlatılan hatalar (exceptions)  testi durdurmaz ve test koşulmasına devam eder.  Hatalar raporda başarısız adım olarak bildirilir.

TestNG’ nin JUnit’e karşı avantajları :

  • Annotationslar daha anlaşılabilirdir,
  • Test senaryoları kolay bir şekilde gruplandırılabilir,
  • Paralel test yapılması mümkündür.

İntellijIdea ile TestNG Örneği

Öncelikle ide’yi açtıktan sonra yeni bir maven projesi oluşturalım. Oluşturduktan sonra karşımıza pom.xml dosyası açılacaktır ve ilgili kütüphaneleri eklememiz gerekmektedir. Kullanılan pom.xml aşağıda yer almaktadır. Projenize ekleyebilirsiniz.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>TestNGBasicExample</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.0.0</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.48.2</version>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
                <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
                <plugin>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>3.7.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-project-info-reports-plugin</artifactId>
                    <version>3.0.0</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>


</project>

Ardından test klasörüne sağ tıklayarak yeni bir class oluşturalım. Class içerisinde basit bir header kontrolü yapacağız.

package TestNGExample;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.*;

import static java.util.concurrent.TimeUnit.SECONDS;

public class FirstTestNGExample {
    public String baseUrl = "https://test.mobilhanem.com.tr/";
    String home = System.getProperty("user.home");
    String driverPath = home+"/Downloads/chromedriver";
    public WebDriver driver ;

    @Test
    public void verifyHomepageTitle() {
        System.out.println("Tarayıcı başlatılıyor....");
        System.setProperty("webdriver.chrome.driver", driverPath);

        driver = new ChromeDriver();
        driver.get(baseUrl);

        driver.manage().timeouts().implicitlyWait(10, SECONDS);
        driver.manage().timeouts().pageLoadTimeout(200, SECONDS);
        driver.manage().window().maximize();

        String expectedTitle = "Test Mobilhanem";
        String actualTitle = driver.getTitle();
        Assert.assertEquals(actualTitle, expectedTitle);
        driver.close();
    }

}

Class’daki düzenlemeleri yaptıktan sonra sağ tıklayıp run yapmamız gerekmektedir. İlgili class çalıştıktan sonra otomatik oluşan target klasörünü göreceğiz. Burada testNG ile ilgili bahsetmiş olduğumuz dosyalara yer verildiğini göreceğiz.

Mobilhanem.com da Selenium ile Test Otomasyonu Geliştirme serisinin bu dersinde  dersimizin sonuna geldik. Eksik ya da yanlış gördüğünüz veya anlamadığınız yerler için çekinmeden ulaşabilirsiniz.

Tüm Selenium derslerimiz için tıklayınız.

Faydalanılan Kaynaklar :

5

Sevde Aybüke Kaleli

DevOps Engineer at Evam, M.Sc.

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?