İçeriğe geç

TestNG Annotations

TestNG, test otomasyonunda test akışını kontrol etmek için anotasyonlar (annotations) kullanır.
Bu anotasyonlar sayesinde testlerin hangi sırayla çalışacağı, hangi kodun testten önce/sonra çalışacağı belirlenir.


AnnotationAçıklama
@BeforeSuiteTest suite başlamadan önce bir kez çalışır. Genellikle global ayarlar için kullanılır.
@AfterSuiteTest suite tamamlandıktan sonra bir kez çalışır. Genellikle raporlama veya temizleme işlemleri yapılır.
@BeforeTest<test> etiketi içindeki testlerden önce çalışır.
@AfterTest<test> etiketi içindeki testler bittikten sonra çalışır.
@BeforeClassTest sınıfındaki ilk test metodundan önce bir kez çalışır.
@AfterClassTest sınıfındaki tüm test metodları tamamlandıktan sonra çalışır.
@BeforeMethodHer bir test metodundan önce çalışır.
@AfterMethodHer bir test metodundan sonra çalışır.
@TestTest metodunu belirtir. En sık kullanılan anotasyondur.

⚙️ Çalışma Sırası (Execution Order)

Section titled “⚙️ Çalışma Sırası (Execution Order)”

Aşağıda TestNG anotasyonlarının çalışma sırasını görebilirsiniz:

@BeforeSuite
@BeforeTest
@BeforeClass
@BeforeMethod
@Test
@AfterMethod
@AfterClass
@AfterTest
@AfterSuite

import org.testng.annotations.*;
public class TestNGAnnotationsExample {
@BeforeSuite
public void beforeSuite() {
System.out.println("Before Suite - Tüm testlerden önce bir kez çalışır.");
}
@AfterSuite
public void afterSuite() {
System.out.println("After Suite - Tüm testlerden sonra bir kez çalışır.");
}
@BeforeTest
public void beforeTest() {
System.out.println("Before Test - Test etiketinden önce çalışır.");
}
@AfterTest
public void afterTest() {
System.out.println("After Test - Test etiketinden sonra çalışır.");
}
@BeforeClass
public void beforeClass() {
System.out.println("Before Class - Bu sınıftaki testlerden önce çalışır.");
}
@AfterClass
public void afterClass() {
System.out.println("After Class - Bu sınıftaki testlerden sonra çalışır.");
}
@BeforeMethod
public void beforeMethod() {
System.out.println("Before Method - Her test metodundan önce çalışır.");
}
@AfterMethod
public void afterMethod() {
System.out.println("After Method - Her test metodundan sonra çalışır.");
}
@Test
public void testCase1() {
System.out.println("Test Case 1 çalıştı.");
}
@Test
public void testCase2() {
System.out.println("Test Case 2 çalıştı.");
}
}

Before Suite - Tüm testlerden önce bir kez çalışır.
Before Test - Test etiketinden önce çalışır.
Before Class - Bu sınıftaki testlerden önce çalışır.
Before Method - Her test metodundan önce çalışır.
Test Case 1 çalıştı.
After Method - Her test metodundan sonra çalışır.
Before Method - Her test metodundan önce çalışır.
Test Case 2 çalıştı.
After Method - Her test metodundan sonra çalışır.
After Class - Bu sınıftaki testlerden sonra çalışır.
After Test - Test etiketinden sonra çalışır.
After Suite - Tüm testlerden sonra bir kez çalışır.

  • @Test(enabled = false) → Testi devre dışı bırakır.
  • @Test(priority = 1) → Testlerin çalışma sırasını belirler.
  • @Test(dependsOnMethods = "methodName") → Başka bir metoda bağlı olarak test çalıştırılır.
  • @Parameters → XML dosyasından parametre almayı sağlar.
  • @DataProvider → Testleri veri setleriyle çoklu şekilde çalıştırmayı sağlar.

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class ParameterExample {
@Test
@Parameters("username")
public void loginTest(String username) {
System.out.println("Kullanıcı adı: " + username);
}
}
testng.xml
<suite name="Parametreli Test Suite">
<test name="Login Testi">
<parameter name="username" value="mehmet123"/>
<classes>
<class name="ParameterExample"/>
</classes>
</test>
</suite>

TestNG anotasyonları, testlerin sırasını, bağımlılıklarını ve yapılandırmasını kontrol etmek için güçlü bir mekanizma sağlar.
Doğru kullanıldığında, testlerin bakımı kolaylaşır ve tekrar kullanılabilirliği artar.