TestNG - DataProvider Kullanımı
📘 Giriş
Section titled “📘 Giriş”TestNG’de DataProvider özelliği, bir test metoduna farklı veri setlerini parametre olarak geçmek için kullanılır.
Bu sayede aynı testi farklı verilerle çalıştırabilir, data-driven testing (veri odaklı test) yaklaşımını uygulayabiliriz.
🧠 DataProvider Nedir?
Section titled “🧠 DataProvider Nedir?”Bir @DataProvider metodu, bir test metoduna test verilerini sağlar.
Her veri seti için test metodu bir kez çalıştırılır.
@DataProvider(name = "data")public Object[][] provideData() { return new Object[][] { { "Ahmet", 25 }, { "Ayşe", 30 }, { "Mehmet", 40 } };}Yukarıdaki örnekte, provideData() metodu 3 farklı veri seti döndürür.
Bu veriler, Object[][] tipinde döndürülmelidir.
⚙️ DataProvider Kullanımı
Section titled “⚙️ DataProvider Kullanımı”Bir test metoduna DataProvider tanımlamak için @Test anotasyonuna dataProvider özelliği eklenir.
import org.testng.annotations.DataProvider;import org.testng.annotations.Test;
public class DataProviderExample {
@DataProvider(name = "userData") public Object[][] provideData() { return new Object[][] { { "Ali", "12345" }, { "Veli", "abcde" }, { "Ayşe", "pass123" } }; }
@Test(dataProvider = "userData") public void testLogin(String username, String password) { System.out.println("Kullanıcı: " + username + " | Şifre: " + password); }}🧩 Çıktı:
Kullanıcı: Ali | Şifre: 12345Kullanıcı: Veli | Şifre: abcdeKullanıcı: Ayşe | Şifre: pass123🧷 Farklı Sınıftan DataProvider Kullanımı
Section titled “🧷 Farklı Sınıftan DataProvider Kullanımı”DataProvider metodunu başka bir sınıfta tanımlayabiliriz.
Bunun için dataProviderClass parametresi kullanılır.
// Data sağlayan sınıfpackage data;
import org.testng.annotations.DataProvider;
public class TestData { @DataProvider(name = "userCredentials") public Object[][] getCredentials() { return new Object[][] { { "admin", "admin123" }, { "user", "user123" } }; }}// Test sınıfıpackage tests;
import org.testng.annotations.Test;import data.TestData;
public class LoginTest {
@Test(dataProvider = "userCredentials", dataProviderClass = TestData.class) public void loginTest(String username, String password) { System.out.println("Kullanıcı: " + username + " | Şifre: " + password); }}🔁 DataProvider ile Paralel Çalışma
Section titled “🔁 DataProvider ile Paralel Çalışma”TestNG, DataProvider verilerini paralel olarak da çalıştırabilir.
Bu, özellikle büyük veri setlerinde test süresini ciddi şekilde kısaltır.
@DataProvider(name = "parallelData", parallel = true)public Object[][] provideParallelData() { return new Object[][] { { "Chrome" }, { "Firefox" }, { "Edge" } };}
@Test(dataProvider = "parallelData")public void testBrowser(String browser) { System.out.println(Thread.currentThread().getId() + " - " + browser);}🔹 Her test farklı thread üzerinde çalıştırılır.
⚠️ Dikkat Edilmesi Gerekenler
Section titled “⚠️ Dikkat Edilmesi Gerekenler”- DataProvider metodunun
Object[][]veyaIterator<Object[]>döndürmesi gerekir. - DataProvider metodu
publicolmalıdır. - Parametre sayısı, test metodundaki parametrelerle eşleşmelidir.
- DataProvider metodu static olabilir, ancak zorunlu değildir.
🧩 Özet
Section titled “🧩 Özet”| Özellik | Açıklama |
|---|---|
| Annotation | @DataProvider |
| Kullanım amacı | Aynı testi farklı verilerle çalıştırmak |
| Dönüş tipi | Object[][] veya Iterator<Object[]> |
| Parametreleme | @Test(dataProvider = "name") |
| Paralel Çalışma | parallel = true ile mümkündür |
🧪 Gerçek Senaryo Örneği
Section titled “🧪 Gerçek Senaryo Örneği”Aşağıdaki örnekte, login testini farklı kullanıcı bilgileriyle çalıştırıyoruz:
public class LoginPageTest {
@DataProvider(name = "loginData") public Object[][] getLoginData() { return new Object[][] { { "admin@example.com", "admin123", true }, { "user@example.com", "wrongpass", false } }; }
@Test(dataProvider = "loginData") public void testLogin(String email, String password, boolean expectedResult) { boolean actualResult = login(email, password); Assert.assertEquals(actualResult, expectedResult); }
public boolean login(String email, String password) { return email.equals("admin@example.com") && password.equals("admin123"); }}✅ Sonuç:
@DataProvider kullanımı, testlerinizi daha dinamik, tekrar kullanılabilir ve veri odaklı hale getirir.
Özellikle form testleri, login işlemleri, farklı parametre kombinasyonlarının test edilmesi gibi senaryolarda oldukça etkilidir.