Step Definitions (Adım Tanımlamaları)
🎯 1. Step Definition Nedir?
Section titled “🎯 1. Step Definition Nedir?”Step Definition, Gherkin dosyasında (.feature) yazılan adımların Java kodundaki karşılıklarını tanımlar.
Yani, senaryodaki doğal dili, çalıştırılabilir Java koduna bağlar.
💡 Her “Given”, “When”, “Then” gibi adımın Java karşılığı olmalıdır.
🔹 2. Gherkin Örneği
Section titled “🔹 2. Gherkin Örneği”Feature: Giriş işlemi
Scenario: Geçerli kullanıcıyla giriş Given kullanıcı adı "mehmet" ve parola "12345" When giriş butonuna tıklarım Then ana sayfa görüntülenmeli🔹 3. Java Step Definition Karşılığı
Section titled “🔹 3. Java Step Definition Karşılığı”import io.cucumber.java.en.Given;import io.cucumber.java.en.When;import io.cucumber.java.en.Then;
public class GirisAdimlari {
@Given("kullanıcı adı {string} ve parola {string}") public void kullanici_bilgileri(String kullaniciAdi, String parola) { System.out.println("Kullanıcı: " + kullaniciAdi + ", Parola: " + parola); }
@When("giriş butonuna tıklarım") public void butona_tiklarim() { System.out.println("Giriş butonuna tıklandı."); }
@Then("ana sayfa görüntülenmeli") public void ana_sayfa_gorunmeli() { System.out.println("Ana sayfa açıldı."); }}📘 Cucumber, adım tanımını Gherkin’deki metinle eşleştirir.
{string},{int}gibi parametre yer tutucuları kullanılır.
🔹 4. Parametre Türleri
Section titled “🔹 4. Parametre Türleri”| Yer Tutucu | Tür | Örnek |
|---|---|---|
{string} | String | "test" |
{int} | Integer | 42 |
{double} | Double | 3.14 |
{word} | Tek kelimelik String | admin |
Örnek:
Section titled “Örnek:”When {int} adet ürün sepete eklerim@When("{int} adet ürün sepete eklerim")public void urunEkle(int adet) { System.out.println(adet + " ürün eklendi.");}🔹 5. DataTable (Veri Tablosu) Kullanımı
Section titled “🔹 5. DataTable (Veri Tablosu) Kullanımı”Scenario: Kullanıcı kayıt formu Given aşağıdaki bilgilerle kayıt olurum: | Ad | Soyad | Email | | Mehmet | Şimşek | mehmet@test.com |import io.cucumber.datatable.DataTable;import java.util.List;import java.util.Map;
@DGiven("aşağıdaki bilgilerle kayıt olurum:")public void kayitOl(DataTable table) { List<Map<String, String>> data = table.asMaps(String.class, String.class); System.out.println(data.get(0).get("Ad"));}💡
DataTable, tablo şeklinde gelen verileri liste veya map olarak dönüştürmek için kullanılır.
🔹 6. DocString (Çok Satırlı Metin)
Section titled “🔹 6. DocString (Çok Satırlı Metin)”Scenario: API isteği gönderme When aşağıdaki JSON'u gönderirim: """ { "ad": "Ahmet", "yas": 30 } """@When("aşağıdaki JSON'u gönderirim:")public void jsonGonder(String body) { System.out.println("JSON içeriği: " + body);}🔹 7. Before ve After Hook’ları
Section titled “🔹 7. Before ve After Hook’ları”Cucumber’da her senaryo öncesi ve sonrası işlemler için @Before ve @After kullanılır.
import io.cucumber.java.Before;import io.cucumber.java.After;
public class Hooks {
@Before public void setUp() { System.out.println("Tarayıcı başlatıldı."); }
@After public void tearDown() { System.out.println("Tarayıcı kapatıldı."); }}💡 Tüm senaryolar için çalışır; belirli etiketler için koşullandırılabilir:
@Before("@web")public void sadeceWebIcin() { System.out.println("Sadece @web etiketli senaryolarda çalışır.");}🔹 8. Step Definition Dosya Organizasyonu
Section titled “🔹 8. Step Definition Dosya Organizasyonu”src/test/java/ └── stepdefinitions/ ├── GirisAdimlari.java ├── KayitAdimlari.java └── Hooks.java✅ Her
.featuredosyası için ayrı Step Definition sınıfı oluşturmak, kodun yönetilebilirliğini artırır.
🔹 9. Regex ile Adım Tanımlama
Section titled “🔹 9. Regex ile Adım Tanımlama”Gherkin ifadeleri Regular Expression (Regex) ile eşleştirilebilir.
@Given("^kullanıcı (.*) sayfasında$")public void kullaniciSayfasinda(String sayfa) { System.out.println(sayfa + " sayfası açıldı.");}🔹 10. Reusable Steps (Tekrar Kullanılabilir Adımlar)
Section titled “🔹 10. Reusable Steps (Tekrar Kullanılabilir Adımlar)”Ortak adımları ayrı bir sınıfta toplayabilir ve tüm senaryolarda kullanabilirsiniz.
public class OrtakAdimlar {
@Then("{string} mesajı görünmeli") public void mesajGorunmeli(String mesaj) { System.out.println("Beklenen mesaj: " + mesaj); }}🧠 11. Sık Kullanılan Anotasyonlar (English → Türkçe)
Section titled “🧠 11. Sık Kullanılan Anotasyonlar (English → Türkçe)”| Annotation | Türkçe Karşılığı | Açıklama |
|---|---|---|
@Given | @Diyelimki | Ön koşul (başlangıç durumu) |
@When | @Eğerki | Eylem (kullanıcı işlemi) |
@Then | @Ozaman | Beklenen sonuç |
@And | @Ve | Ek adım |
@But | @Ama | Negatif durum |
@Before | @Before | Senaryo öncesi hook |
@After | @After | Senaryo sonrası hook |
🧩 12. Örnek: Tam Akış
Section titled “🧩 12. Örnek: Tam Akış”Feature: Kullanıcı Girişi
Scenario: Geçerli bilgilerle giriş yapılır Given kullanıcı adı "admin" ve parola "12345" When giriş butonuna tıklarım Then ana sayfa görünmelipublic class LoginSteps {
@Given("kullanıcı adı {string} ve parola {string}") public void girisBilgileri(String user, String pass) { System.out.println("Kullanıcı: " + user + ", Parola: " + pass); }
@When("giriş butonuna tıklarım") public void butonTikla() { System.out.println("Butona tıklandı."); }
@Then("ana sayfa görünmeli") public void anaSayfa() { System.out.println("Ana sayfa doğrulandı."); }}🏁 Özet
Section titled “🏁 Özet”| Kavram | Açıklama | Örnek |
|---|---|---|
| Step Definition | Gherkin adımlarının Java karşılığı | @Given("...") |
| Parametre | Gherkin değişkenleri | {string}, {int} |
| DataTable | Tablo verisi alma | DataTable.asMaps() |
| DocString | Çok satırlı metin | String body |
| Hooks | Senaryo öncesi/sonrası işlemler | @Before, @After |
| Regex | Esnek eşleştirme | @When("^...$") |
💡 Not: Step Definition dosyalarını düzenli tutmak, Cucumber senaryolarının bakımı ve genişletilebilirliği için kritik öneme sahiptir.