Davranış Odaklı Geliştirme (Behavior-Driven Development), testleri herkes için okunabilir hale getirerek ekiplerin yazılım kalitesi hakkındaki düşüncelerini temelden değiştirdi! BDD testi için Cucumber kullanmak, iş gereksinimleri ile teknik uygulama arasındaki boşluğu kapatan, gerçekten yürütülen canlı belgeler oluşturan bir beceridir. Yazıldıkları anda güncelliğini yitiren test senaryolarıyla mücadele ettiyseniz, bu rehber size daha iyi bir yol gösterecektir.
Cucumber ve BDD Nedir?
Cucumber düz dilde yazılmış otomatik testleri çalıştıran açık kaynaklı bir araçtır. Geliştiricilerin, test uzmanlarının ve iş paydaşlarının somut örnekler kullanarak yazılım davranışını tanımlamak için işbirliği yaptığı bir metodoloji olan Davranış Odaklı Geliştirmeyi (BDD) uygular.
BDD, "Sistemin ne yapması gerekiyor?" sorusuna odaklanır, "Bunu nasıl test etmeliyiz?" sorusuna değil. Sonuç, yanlış anlaşılmaları ortadan kaldıran ve hem spesifikasyon hem de yürütülebilir doğrulama görevi gören testler oluşturan ortak bir dildir.
Cucumber, Gherkin sözdiziminde yazılmış senaryoları içeren .feature dosyalarını okur ve bunları adım tanımlarına (gerçek otomasyonu gerçekleştiren kod) karşı yürütür. Bu ayrım, iş paydaşlarının kod okumadan test senaryolarını gözden geçirebileceği, geliştiricilerin ise teknik detayları ayrı ayrı uygulayabileceği anlamına gelir.

JavaScript için Cucumber Kurulumu
Cucumber'ı bir Node.js projesinde kurmak sadece birkaç komut gerektirir:
Ön koşullar:
- Node js
- NPM
- Test edeceğimiz bir giriş özelliğine sahip bir API projesi (Bu eğitim sadece cucumber kurulumunu ve gherkin testlerini kapsayacaktır).

# Create a new project directory
mkdir cucumber-bdd-demo && cd cucumber-bdd-demo
# Initialize npm
npm init -y
# Install Cucumber and testing dependencies
npm install --save-dev @cucumber/cucumber chai axios

`package.json` dosyanızda bir test betiği bulunmalıdır:
{
"scripts": {
"test": "cucumber-js"
}
}
Bu dizin yapısını oluşturun:
project/
├── features/
│ └── user-management.feature
├── step-definitions/
│ └── user-steps.js
├── package.json
└── cucumber.json
Pratik Rehber: İlk BDD Testinizi Yazma
Uygulamada **BDD Testleri İçin Cucumber Nasıl Kullanılır**'ı göstermek amacıyla bir kullanıcı yönetimi API'si için bir test oluşturalım.
Adım 1: Özellik Dosyasını Yazın
`features/user-management.feature` dosyasını oluşturun:
Feature: User Management API
As an API client
I want to manage users
So that I can integrate user functionality into my application
Scenario: Create a new user successfully
Given I have a valid user payload
When I send a POST request to "/api/users"
Then the response status should be 201
And the response should contain a user ID
Scenario: Attempt to create user with invalid email
Given I have a user payload with invalid email
When I send a POST request to "/api/users"
Then the response status should be 400
And the response should contain "Invalid email format"
Adım 2: Adım Tanımlarını Uygulayın
`step-definitions/user-steps.js` dosyasını oluşturun:
const { Given, When, Then } = require('@cucumber/cucumber');
const { expect } = require('chai');
const axios = require('axios');
let requestPayload;
let response;
Given('I have a valid user payload', function() {
requestPayload = {
name: 'Test User',
email: 'test@example.com',
password: 'ValidPass123'
};
});
Given('I have a user payload with invalid email', function() {
requestPayload = {
name: 'Test User',
email: 'invalid-email',
password: 'ValidPass123'
};
});
When('I send a POST request to {string}', async function(endpoint) {
try {
response = await axios.post(`http://localhost:3000${endpoint}`, requestPayload);
} catch (error) {
response = error.response;
}
});
Then('the response status should be {int}', function(statusCode) {
expect(response.status).to.equal(statusCode);
});
Then('the response should contain a user ID', function() {
expect(response.data).to.have.property('userId');
expect(response.data.userId).to.match(/^[0-9a-fA-F]{24}$/);
});
Then('the response should contain {string}', function(message) {
expect(response.data.message).to.include(message);
});
Adım 3: Cucumber.json Dosyasını Düzenleyin
Projenizin kök dizininde "cucumber.json" adında bir dosya oluşturun ve aşağıdaki kodu ekleyin:
{
"default": {
"formatOptions": {
"snippetInterface": "synchronous"
}
}
}Adım 4: Testleri Çalıştırın
Testlerinizi şununla çalıştırın:
npm test
Cucumber, hangi adımların geçtiğini, tanımlanmadığını veya başarısız olduğunu gösteren ayrıntılı sonuçlar çıktı verecektir.
İyi BDD Senaryoları Yazma Kuralları
**BDD Testleri İçin Cucumber Nasıl Kullanılır**'ı etkili bir şekilde öğrenmek, bu kanıtlanmış kurallara uymayı gerektirir:
1. Given-When-Then Yapısı
Her senaryo sırasıyla şu üç bölüme sahip olmalıdır:
- Given: Ön koşulları ayarlar
- When: Eylemi tanımlar
- Then: Sonucu doğrular
2. Açıklayıcı Yazın, Emir Kipiyle Değil
Kötü:
Given I open the browser
And I navigate to "/login"
And I type "test@example.com" in the email field
And I type "password" in the password field
And I click the login button
İyi:
Given I am on the login page
When I log in with valid credentials
Then I should see the dashboard
Ne test ettiğinize odaklanın, nasıl yaptığınıza değil.
3. Tek Senaryo, Tek Amaç
Her senaryo tek bir davranışı test etmelidir. Birleştirilmiş senaryolar hataları gizler ve hata ayıklamayı zorlaştırır.
4. İş Dili Kullanın
İş paydaşlarının anlayabileceği senaryolar yazın. Teknik jargondan ve uygulama detaylarından kaçının.
5. Senaryoları Bağımsız Hale Getirin
Senaryolar birbirine bağlı olmamalıdır. Her biri kendi verisini ayarlamalı ve sonrasında temizlemelidir.
Gelişmiş Cucumber Özellikleri: Veri Tabloları ve Senaryo Taslakları
Karmaşık Giriş için Veri Tabloları
Birden çok veri noktasıyla test yapmanız gerektiğinde tabloları kullanın:
Scenario: Create users with different roles
Given I have the following user data:
| name | email | role |
| Alice | alice@example.com | admin |
| Bob | bob@example.com | user |
When I send a POST request to "/api/users"
Then all users should be created successfully
Adım tanımı:
Given('I have the following user data:', function(dataTable) {
requestPayload = dataTable.hashes();
});
Veri Odaklı Testler için Senaryo Taslakları
Aynı senaryoyu farklı verilerle çalıştırmak istediğinizde taslakları kullanın:
Scenario Outline: Login with various credentials
Given I am on the login page
When I enter "<email>" and "<password>"
Then I should see "<result>"
Examples:
| email | password | result |
| test@example.com | validPass | Dashboard |
| test@example.com | wrongPass | Invalid password|
| invalid@email.com | validPass | Invalid email |
Bu, otomatik olarak üç ayrı test senaryosu oluşturur.
Testleri Etiketlerle Organize Etme
Etiketler senaryoları kategorize etmenize ve filtrelemenize yardımcı olur:
@smoke @regression
Scenario: User login
Given I am on the login page
When I log in with valid credentials
Then I should see the dashboard
@api @critical
Scenario: API health check
Given the API is running
When I request "/health"
Then the response status should be 200
Yalnızca belirli etiketleri çalıştırın:
npm test -- --tags "@smoke"
Apidog, BDD İş Akışlarında API Testine Nasıl Yardımcı Olur
Cucumber davranış tanımlama konusunda üstün olsa da, Apidog API test oluşturma ve yürütmenin ağır iş yükünü otomatikleştirerek BDD testi için Cucumber'ı çok daha verimli hale getirir.
Yapay Zeka Destekli API Test Senaryosu Oluşturma
API çağrıları için adım tanımlarını manuel olarak yazmak yerine, Apidog bunları OpenAPI spesifikasyonunuzdan yapay zeka kullanarak oluşturur:
# Your API spec
paths:
/api/users:
post:
requestBody:
content:
application/json:
schema:
type: object
properties:
name: string
email: string
responses:
'201':
description: User created
Apidog otomatik olarak test için hazır senaryolar oluşturur:
- Pozitif test: Geçerli yük → 201 durumu
- Negatif test: Geçersiz e-posta → 400 durumu
- Sınır test: Gerekli alan eksik → 400 durumu

Sıkça Sorulan Sorular
S1: Cucumber testleri yazmak için programlama bilmem gerekiyor mu?
Cevap: Gherkin senaryoları yazmak kodlama gerektirmez; sadece davranış hakkında net düşünme yeterlidir. Ancak, adım tanımlarını uygulamak JavaScript (veya başka bir dil) bilgisi gerektirir. Apidog gibi araçlar, adım tanımı kodunu otomatik olarak oluşturarak bu yükü azaltır.
S2: Cucumber, geleneksel test çerçevelerinden nasıl farklıdır?
Cevap: Geleneksel çerçeveler (Jest, Mocha) teknik uygulamaya odaklanır. Cucumber ise iş davranışına odaklanır. Aynı Cucumber senaryosu, Gherkin metnini değiştirmeden web UI testlerini (Selenium), API testlerini (Axios) veya mobil testleri (Appium) çalıştırabilir.
S3: Cucumber, API test araçlarının yerini alabilir mi?
Cevap: Cucumber test yapısını sağlar, ancak API çağrılarını yürütmek (Axios, Supertest) ve yanıtları doğrulamak için hala araçlara ihtiyacınız vardır. Apidog, API yürütme katmanını ele alırken Cucumber BDD iş akışını yöneterek Cucumber'ı tamamlar.
S4: İyi bir Cucumber senaryosunu ne oluşturur?
Cevap: İyi senaryolar bağımsızdır, iş dilini kullanır, Given-When-Then yapısını takip eder ve her biri tek bir davranışı test eder. Teknik olmayan paydaşlar tarafından okunabilir olmalı ve sistemin ne yaptığına odaklanmalı, nasıl yaptığına değil.
S5: Apidog, BDD testlerinde kimlik doğrulamayı nasıl yönetir?
Cevap: Apidog, kimlik doğrulama belirteçlerini otomatik olarak yönetir. Apidog'un kimlik bilgisi yönetimini kullanarak geçerli belirteçleri almak için "Given I am authenticated" gibi adımlar tanımlayabilir, böylece adım tanımlarınızdaki manuel belirteç işlemeyi ortadan kaldırabilirsiniz.
Sonuç
BDD testi için Cucumber kullanmak, teknik ve iş ekipleri arasında ortak bir anlayış yaratarak geliştirme sürecinizi etkili bir şekilde dönüştürür. Gherkin sözdizimi netliği zorlarken, senaryoların ve adım tanımlarının ayrılması, uygulamanız geliştikçe testleri sürdürülebilir kılar.
Gerçek güç, Cucumber'ı modern otomasyon araçlarıyla entegre etmekten gelir. Apidog, API test kodu yazmanın sıkıcı manuel işini ortadan kaldırarak, yürütmeyi üstlenirken sizin anlamlı davranışlar tanımlamaya odaklanmanızı sağlar. Bu kombinasyon, her iki dünyanın da en iyisini sunar: yaşayan belgeler olarak hizmet veren insan tarafından okunabilir spesifikasyonlar ve sürekli çalışan sağlam otomatik testler.
Küçük başlayın. Bir API uç noktası seçin. Üç senaryo yazın: başarı, hata ve uç durum. Adım tanımlarını uygulayın. Onları çalıştırın. Sonuçları ürün sahibinize gösterin. İş gereksinimlerinin testler olarak yürütüldüğünü gördüklerinde, BDD'yi tüm projenize yaymak için onay alacaksınız. İşte o zaman BDD testi için Cucumber kullanmak teknik bir uygulama olmaktan çıkıp ekip çapında bir kalite hareketine dönüşür.
