İçeriğe geç

Runner Classes (Test Çalıştırıcı Sınıflar)

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: .feature dosyalarını çalıştıran kontrol merkezidir.


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 {
}
ParametreAçıklama
features.feature dosyalarının yolu
glueStep Definition sınıflarının bulunduğu paket
pluginRaporlama ve çıktı formatı
monochromeKonsol çıktısını daha okunabilir yapar
tagsBelirli senaryoları çalıştırmak için etiket filtresi

PluginAçıklamaÖrnek
prettyOkunabilir metin çıktısı"pretty"
htmlHTML raporu üretir"html:target/cucumber.html"
jsonJSON raporu üretir"json:target/cucumber.json"
junitXML raporu üretir"junit:target/cucumber.xml"
rerunHatalı testleri tekrar çalıştırmak için dosya oluşturur"rerun:target/rerun.txt"
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.

@smoke
Scenario: Giriş testi
Given kullanıcı giriş sayfasında
@CucumberOptions(
features = "src/test/resources/features",
glue = "stepdefinitions",
tags = "@smoke"
)

@smoke etiketli testler çalıştırılır.
🔸 @regression and @login gibi ifadelerle birleştirilebilir.

MantıkÖrnekAçıklama
VE@smoke and @loginİki etiketi de taşıyan senaryolar
VEYA@smoke or @regressionHerhangi bir etiketi taşıyan senaryolar
DEĞİLnot @wip@wip olmayan senaryolar

Proje içinde farklı test türleri için birden fazla Runner kullanılabilir:

src/test/java/runners/
├── SmokeTestRunner.java
├── RegressionTestRunner.java
└── SanityTestRunner.java
@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”
DosyaGörev
RunnerTestleri başlatır
Step DefinitionsGherkin adımlarını Java koduna bağlar
HooksTest öncesi/sonrası işlemleri yönetir
FeatureTest senaryolarını tanımlar
src/test/java/
├── runners/TestRunner.java
├── stepdefinitions/LoginSteps.java
├── hooks/Hooks.java
└── features/login.feature

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 {
}

@RunWith yerine extends AbstractTestNGCucumberTests kullanı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-count değ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 {}

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
)

KavramAçıklama
Runner ClassTestlerin çalıştırıldığı kontrol sınıfı
CucumberOptionsÇalışma, etiket ve rapor ayarları
JUnit/TestNGCucumber’ı çalıştıran test çerçeveleri
PluginRaporlama seçenekleri
TagsTest filtreleme
RerunHatalı 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.