İçeriğe geç

Step Definitions (Adım Tanımlamaları)

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.


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.


Yer TutucuTürÖrnek
{string}String"test"
{int}Integer42
{double}Double3.14
{word}Tek kelimelik Stringadmin
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.


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);
}

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 .feature dosyası için ayrı Step Definition sınıfı oluşturmak, kodun yönetilebilirliğini artırır.


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)”
AnnotationTürkçe KarşılığıAçıklama
@Given@DiyelimkiÖn koşul (başlangıç durumu)
@When@EğerkiEylem (kullanıcı işlemi)
@Then@OzamanBeklenen sonuç
@And@VeEk adım
@But@AmaNegatif durum
@Before@BeforeSenaryo öncesi hook
@After@AfterSenaryo sonrası hook

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ünmeli
public 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ı.");
}
}

KavramAçıklamaÖrnek
Step DefinitionGherkin adımlarının Java karşılığı@Given("...")
ParametreGherkin değişkenleri{string}, {int}
DataTableTablo verisi almaDataTable.asMaps()
DocStringÇok satırlı metinString body
HooksSenaryo öncesi/sonrası işlemler@Before, @After
RegexEsnek 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.