Runner Classes (Test Çalıştırıcı Sınıflar)
🎯 1. Runner Class Nedir?
Section titled “🎯 1. Runner Class Nedir?”Runner Class, Cucumber senaryolarını (.feature dosyalarını) çalıştırmak için kullanılan Java sınıfıdır.
JUnit veya TestNG ile entegre çalışarak, hangi testlerin hangi dosyalardan çalıştırılacağını belirtir.
💡 Basitçe:
.featuredosyalarını çalıştıran kontrol merkezidir.
🔹 2. Temel Runner Örneği (JUnit)
Section titled “🔹 2. Temel Runner Örneği (JUnit)”import io.cucumber.junit.Cucumber;import io.cucumber.junit.CucumberOptions;import org.junit.runner.RunWith;
@RunWith(Cucumber.class)@CucumberOptions( features = "src/test/resources/features", glue = "stepdefinitions", plugin = {"pretty", "html:target/cucumber-report.html"}, monochrome = true)public class TestRunner {}Açıklama:
Section titled “Açıklama:”| Parametre | Açıklama |
|---|---|
features | .feature dosyalarının yolu |
glue | Step Definition sınıflarının bulunduğu paket |
plugin | Raporlama ve çıktı formatı |
monochrome | Konsol çıktısını daha okunabilir yapar |
tags | Belirli senaryoları çalıştırmak için etiket filtresi |
🔹 3. Raporlama Seçenekleri (Plugins)
Section titled “🔹 3. Raporlama Seçenekleri (Plugins)”| Plugin | Açıklama | Örnek |
|---|---|---|
pretty | Okunabilir metin çıktısı | "pretty" |
html | HTML raporu üretir | "html:target/cucumber.html" |
json | JSON raporu üretir | "json:target/cucumber.json" |
junit | XML raporu üretir | "junit:target/cucumber.xml" |
rerun | Hatalı testleri tekrar çalıştırmak için dosya oluşturur | "rerun:target/rerun.txt" |
Çoklu plugin kullanımı:
Section titled “Çoklu plugin kullanımı:”plugin = { "pretty", "html:target/cucumber-report.html", "json:target/cucumber-report.json"}🔹 4. Tag (Etiket) Bazlı Çalıştırma
Section titled “🔹 4. Tag (Etiket) Bazlı Çalıştırma”Belirli testleri etiket üzerinden seçebilirsiniz.
.feature dosyasında:
Section titled “.feature dosyasında:”@smokeScenario: Giriş testi Given kullanıcı giriş sayfasındaRunner’da:
Section titled “Runner’da:”@CucumberOptions( features = "src/test/resources/features", glue = "stepdefinitions", tags = "@smoke")✅
@smokeetiketli testler çalıştırılır.
🔸@regression and @logingibi ifadelerle birleştirilebilir.
| Mantık | Örnek | Açıklama |
|---|---|---|
| VE | @smoke and @login | İki etiketi de taşıyan senaryolar |
| VEYA | @smoke or @regression | Herhangi bir etiketi taşıyan senaryolar |
| DEĞİL | not @wip | @wip olmayan senaryolar |
🔹 5. Çoklu Runner Kullanımı
Section titled “🔹 5. Çoklu Runner Kullanımı”Proje içinde farklı test türleri için birden fazla Runner kullanılabilir:
src/test/java/runners/ ├── SmokeTestRunner.java ├── RegressionTestRunner.java └── SanityTestRunner.javaÖrnek:
Section titled “Örnek:”@RunWith(Cucumber.class)@CucumberOptions( features = "src/test/resources/features", glue = "stepdefinitions", tags = "@regression", plugin = {"pretty", "html:target/regression-report.html"})public class RegressionTestRunner {}💡 Bu yapı, farklı test gruplarını ayrı ayrı yönetmeyi kolaylaştırır.
🔹 6. Runner + Hooks + StepDefinitions İlişkisi
Section titled “🔹 6. Runner + Hooks + StepDefinitions İlişkisi”| Dosya | Görev |
|---|---|
| Runner | Testleri başlatır |
| Step Definitions | Gherkin adımlarını Java koduna bağlar |
| Hooks | Test öncesi/sonrası işlemleri yönetir |
| Feature | Test senaryolarını tanımlar |
src/test/java/ ├── runners/TestRunner.java ├── stepdefinitions/LoginSteps.java ├── hooks/Hooks.java └── features/login.feature🔹 7. TestNG ile Runner Kullanımı
Section titled “🔹 7. TestNG ile Runner Kullanımı”JUnit yerine TestNG de kullanılabilir.
import io.cucumber.testng.AbstractTestNGCucumberTests;import io.cucumber.testng.CucumberOptions;
@CucumberOptions( features = "src/test/resources/features", glue = "stepdefinitions", plugin = {"pretty", "html:target/testng-report.html"}, tags = "@smoke")public class TestRunner extends AbstractTestNGCucumberTests {}✅
@RunWithyerineextends AbstractTestNGCucumberTestskullanılır.
🔹 8. Paralel Test Çalıştırma (TestNG)
Section titled “🔹 8. Paralel Test Çalıştırma (TestNG)”Cucumber + TestNG kombinasyonunda paralel çalıştırma yapılabilir.
<suite name="Cucumber Suite" parallel="tests" thread-count="2"> <test name="Smoke Tests"> <classes> <class name="runners.SmokeTestRunner"/> </classes> </test> <test name="Regression Tests"> <classes> <class name="runners.RegressionTestRunner"/> </classes> </test></suite>💡
thread-countdeğeri aynı anda kaç senaryonun çalıştırılacağını belirler.
🔹 9. Rerun (Başarısız Testleri Yeniden Çalıştırma)
Section titled “🔹 9. Rerun (Başarısız Testleri Yeniden Çalıştırma)”Başarısız senaryoları otomatik tekrar çalıştırmak için:
plugin = {"rerun:target/rerun.txt"}Daha sonra ikinci bir Runner ile bu dosya çalıştırılır:
@CucumberOptions( features = "@target/rerun.txt", glue = "stepdefinitions", plugin = {"pretty", "html:target/rerun-report.html"})public class RerunFailedTests {}🧠 10. İpuçları
Section titled “🧠 10. İpuçları”✅ monochrome = true → Renkli konsol loglarını sadeleştirir
✅ dryRun = true → Eksik step tanımlarını kontrol eder, testi çalıştırmaz
✅ strict = true → Tanımsız step varsa testi başarısız sayar
@CucumberOptions( dryRun = false, strict = true, monochrome = true)🏁 Özet
Section titled “🏁 Özet”| Kavram | Açıklama |
|---|---|
| Runner Class | Testlerin çalıştırıldığı kontrol sınıfı |
| CucumberOptions | Çalışma, etiket ve rapor ayarları |
| JUnit/TestNG | Cucumber’ı çalıştıran test çerçeveleri |
| Plugin | Raporlama seçenekleri |
| Tags | Test filtreleme |
| Rerun | Hatalı testleri yeniden çalıştırma |
💡 Not: Runner sınıfı, Cucumber test otomasyon projelerinde yapılandırmanın merkezidir.
Düzenli isimlendirme ve dosya organizasyonu, projenin sürdürülebilirliği için kritik öneme sahiptir.