Testng Nedir ?

Fırat Çelik
4 min readApr 11, 2021

--

TestNG(Next Generation)
Cédric Beust tarafından oluşturulmuştur. TestNG , JUnit ve NUnit hatlarında geliştirilen bir test çerçevesidir. JUnit ve NUnit’e göre farklı özellikleri ve sağladığı avantajlar bulunmaktadır.

Ne gibi özellikler sunar,

• Tüm testler birbirinden bağımsız şekilde koşulabilir.

• Test Raporu oluşturur.

  • Xml dosyası oluşturularak testlerin istenen şekilde çalışması sağlanabilir.
  • Paralel koşum oldukça kolaydır.

Avantajları nelerdir ?

· Multi Thread (Çoklu Akış) test desteği

· Test Senaryolarını kolay gruplama

· Parametre Kullanımı

· Esnek test konfigürasyonu

· @DataProvider ile Data Driven Test

· IDE’ler için Plugin desteği

· BeanShell desteği

· Loglama

· Entegre sınıfları test etme

· Esnek çalışma zamanı yapılandırması

· Bağımlılık testi desteği

TestNG Maven Projesine Nasıl Eklenir?

1. https://mvnrepository.com/ adresine gidilir.

2. Arama kısımına TestNG yazarak, search butonuna basılır.

3. Arama sonuçlarından TestNg ye tıklanarak aşağıdaki ekrana gidilir.

4.Son versiyon seçilir.

4.Maven sekmesi altındaki dependency kısmı kopyalanır.

5.Maven projemizin pom.xml içerisindeki “Dependencies” Tagı altına eklenir.

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

Artık Testng ile gelen Annotationlar kullanılabilir.

@BeforeMethod
public void Setup() {
//setup
}
@AfterMethod
public void afterMethod() {
//after
}
gibi,

TestNg Annotations

@BeforeSuite: Class ve metotlar çalışmadan önce yaptırmak istediğimiz işlemleri burada tanımlarız.

@BeforeClass: Class build edildiğinde herhangi bir test metodu çalışmadan önce çalışır. Her test için ayrı ayrı çalışmaz, sadece bir kez çalışır.

@BeforeMethod: bir test metodu çalışmadan önce çalışır. Genellikle Her testten önce yapmak istediğimiz işlemleri burada tanımlarız.

Her test için ayrı ayrı çalışır. @BeforeTest şeklinde de kullanılabilir.

@Test: Test case’lerimizi metot haline getirip hemen üst satırına @Test notasyonumuzu koyarız. Bu metotların birer test olduğunu tanımlar.
Bu testleri testng.xml dosyası oluşturarak istediğimiz şekilde çalıştırabiliriz.

@AfterMethod: Her Test metodu sonrası çalışır. Her testten sonra yapılacak işleri burada tanımlarız.

@AfterClass: Tüm test metotları sonra erdiğinde çalışır. Tüm testler bittikten sonra yapacağımız işlemleri burada tanımlarız.

@AfterSuite: AfterClass sonrasında çalışır. Son işlemlerimizi yaptığımız kısımdır.

TestNG.xml nasıl hazırlanır?

Öncelikle bir xml dosyası oluşturuyoruz.

Ardından aşağıdaki şekilde xml dosyamızı düzenliyoruz.

1.Suite oluşturuyoruz.

2.Test class’ının ismini ve bulunduğu klasörü Class name olarak veriyoruz.

3.İstediğimiz testleri çalıştırmak için methot tagı altına include name olarak test metodunun adını yazıyoruz. Eğer metot kullanmassak tüm classtaki testler rastgele veya alfabetik olarak çalışacaktır.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Web Suite" parallel="tests" thread-count="1">

<test name="TestExample">
<classes>
<class name="testClass">
<methods>
<include name="testName"/>
</methods>
</class>
</classes>
</test>
</suite>

Testler Paralel olarak nasıl Koşulur ?

1.Xml dosyası oluşturulur.

2. Koşulacak paralel ortamlar ayrı ayrı aşağıdaki şekilde test olarak eklenir.

3. gerekli parametreler gönderilir.

4.Thread-count ile paralel çalışacak test sayısı belirlenir.

Aşağıdaki testNG.xml de Chrome ve Explorer olmak üzere iki ortamda testler paralel olarak çalışacaktır.

<suite name="Web Suite" parallel="tests" thread-count="2">
<test name="Chrome Tests">
<parameter name="browser" value="Chrome"/>
<classes>
<class name="tests.TestngExample">
<methods>
<include name="test1"/>
<include name="test2"/>
</methods>
</class>
</classes>
</test>
<test name="Firefox test">
<parameter name="browser" value="Firefox"/>
<classes>
<class name="tests.TestngExample">
<methods>
<include name="test1"/>
<include name="test2"/>
</methods>
</class>
</classes>
</test>
</suite>

○ Test üzerinden işlem yapılacaksa Parallel kısmı Methots olarak değiştirilmelidir.

TestNG Parametre Nasıl kullanılır?

  1. Herhangi bir Annotation dan hemen sonra @parameters içerisinde değer alınır.

2. Metot içerisine değişken oluşturulur, bu değişken gelen parametre adı ile aynı olmalıdır.

3. İsteğe göre kullanılır.

Az önce hazırladığımız TestNG.xml i çalıştırdığımızda çalışan test’e göre parametre değeri oluşuyor. Ancak bunu Driverlarımızı ayağa kaldırdığımız kısımda kullanmalıyız.

Aşağıdaki görselde xmlden gelen parametre Chrome içeriyorsa chrome driver, Explorer içeriyorsa explorer driveri başlat demiş oluyoruz.

@BeforeTest
@Parameters({ "browser" })
public void Setup(String browser) {
if (browser.contains("Chrome")) {
System.setProperty("webdriver.chrome.driver", driverPath");
ChromeOptions chromeOptions = new ChromeOptions();
driver = new ChromeDriver(chromeOptions);
}
if (browser.contains("Firefox")) {
System.setProperty("webdriver.gecko.driver", driverPath");
driver=new FirefoxDriver();
}
driver.navigate().to("https://keytorc.com");
}

Testlere öncelik Nasıl Verilir?

Aşağıdaki şekilde istenen testin yanına gelerek parantez içinde priority yazıp öncelik numarası verilir.

@Test (priority = 1)
public void test1(){
//ilk
}
@Test (priority = 2)
public void test1(){
//ikinci
}

Maven İle Test Koşumunda TestNG Xml Nasıl Kullanılır?

Pom.xml dosyasında surefire plugini içerisinde oluşturduğumuz xml dosyamızı göstermeliyiz.

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<suiteXmlFiles> <suiteXmlFile>SuiteXmlFiles/webSuite.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</build>

Artık mvn test komutu ile başlatılan projemiz xml e göre çalışacaktır.
Proje için tıklayınız.

--

--