Cucumber ile BDD Testleri Nasıl Yapılır

Ashley Goolam

Ashley Goolam

23 December 2025

Cucumber ile BDD Testleri Nasıl Yapılır

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.

düğme

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.

cucumber

JavaScript için Cucumber Kurulumu

Cucumber'ı bir Node.js projesinde kurmak sadece birkaç komut gerektirir:

Ön koşullar:

npm ve node'un yerel makinenizde yüklü olup olmadığını doğrulayın
# 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
projede cucumber kurulumu

`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:

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:

düğme
apidog'da test senaryoları oluşturma

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.

düğme

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin