Cucumber ile Behaviour Driven Development (BDD)

4 min readJan 19, 2022

Son dönemin popüler test yaklaşımlarından biri olan BDD (Behavior Driven Development) aslında TDD’ ye (Test Driven Development) alternatif olarak çıkmıştır. İki test yaklaşımı da kaliteli ve anlaşılabilir kod üretimini amaçlamaktadır. Fakat TDD yaklaşımının maliyetli oluşu ve birbirinin dilinden anlamayan birimler tarafından kullanılmaması BDD yaklaşımı ortaya çıkarmıştır. BDD yaklaşımı tüm birimler tarafından anlaşılabilen ortak bir dil kullanarak müşteri taleplerinin hızlıca yapılabilmesini ve iletişimin sağlanmasını kolaylaştırmıştır.

Behaviour Driven Development (BDD) Avantajları :

  • Planlama
  • Tasarım
  • Geliştirme
  • Test
  • Teslim

Bu yöntemde sorun olarak, Planlama evresinden Tasarım evresine kadar olan süreçte müşteri ile iletişim kurmak problemdir. Sonuçta müşteriye kod okutamazsınız. Bu yüzden arada bir BA (Business Analyst) kişisi olması gerekir.

Cucumber Nedir ?

Cucumber, Behaviour-Driven Development ( Davranış Odaklı Geliştirme ) destekli bir test aracıdır.

Test edilecek durumlar, Gherkin isimli bir gramer yapısını kullanarak varsayılan olarak İngilizce olmakla beraber, mevcut çevirileri kullanılarak Türkçe dahil birçok diğer dilde de basit cümleler kurarak yazılabilmektedir. Bu sayede herhangi bir teknik bilgisi olmayan kişilerin dahi yazılım testi oluşturabilmesine imkan vermektedir. Kurulumu, testlerin yazımı ve kullanımı gayet kolay olduğu için test yazma işini yorucu ve sıkıcı bir durum olmaktan kurtarak eğlenceli ve kolay bir hale getirmektedir.

Cucumber aracı Ruby dili ile geliştirilmiştir ve Ruby, Python, Java, JavaScript, C++ , Lua, Kotlin, .NET ve php başta olmak üzere birçok dilde test yazmayı desteklemektedir.

Gherkin Nedir ?

Gherkin, Cucumber ile test durumları yazarken kullanılan gramer yapısının genel adıdır. Gayet basit ve anlaması kolay olan bu yapıda kurulan cümleler günlük konuşma dilindeki cümlelere oldukça yakın olduğu için test durumlarını yazarken adeta yazılımla konuşuyormuş hissiyatı oluşturur.

Gherkin dili belirli anahtar kelimelerden faydalanır.

Bir testi ve senaryoları isimlendirmek için kullanılan anahtar kelimeler aşağıdaki gibidir:

  • Feature : Testi Yapılacak Özelliğin Adı
  • Scenario : Uygulanacak Senaryo Adı
  • Scenario Outline: Aynı senaryoyu birden fazla durum için çalıştırmak gerektiğinde taslak senaryo oluşturmak için kullanılır.

Tanımlanan senaryoda uygulanacak işlem adımlarını tanımlamak için de aşağıdaki anahtar kelimeler kullanılır. Bu işlemlerin her birine “Step” yani adım adı verilir.

  • Given: Sistemin başlangıç durumunu tanımlar. Sistemin tanımlanmış bir duruma geçmesini sağlar.
  • When: Bir olay yada aksiyonu tanımlamak için kullanılır. Yapılmak istenen bir eylem bu anahtar kelimeden sonra yazılır.
  • Then: Beklenen bir sonucu yada durumu tanımlamak için kullanılır. Beklenen durumla gerçekleşen durumu karşılaştırdığımız ifade bu anahtar kelimeden sonra yazılır.
  • And, But: Yukarıda bahsedilen Given ,When ve Then ifadelerinden birden fazla ardarda yazılmak istendiğinde bu anahtar kelimeler kullanılır.

Örnek bir test dosyasının içeriği ise şu şekilde olacaktır :

→Background senaryolardaki ortak adımlar için kullanılır . Örneğin login adımı diğer iki senaryo içinde aynıdır .

→ Test cümlelerinizin İngilizce olması zorunlu değildir. Türkçe olarak da yazabilirsiniz.

Şimdi örnek bir proje ile öğrendiklerimizi uygulayalım :)

Öncelikle IntellıjIDE’ de bir Maven projesi oluşturalım . Maven projesinde çalışmamızın sebebi birçok avantaja sahip olması . Herhangi bir java projesini oluşturmak ve yönetmek oldukça basit. Aynı zamanda projelerimizi kolayca build edebilir ve GitHub, BitBucket gibi sistemlere rahat bir şekilde entegre edebiliriz.

  • İlk olarak IntellıjIDE’ de proje oluştururken Maven seçerek , proje adı kısımları girilerek proje oluşturulur.
  • Proje ilk açıldığında POM.xml sayfasını görüyoruz. Buraya projemiz için gerekli bağımlılıklarımızı tanımlıyoruz.Bunlara linkten erişebilirsiniz.
  • Pom.xml sayfasında gerekli bağımlılıklarımızı tanımladıktan sonra projemize “Gherkin” ve ”Cucumber.js” pluginlerimizi ekliyoruz.
  • Öncelikli adımlarımızı tanımladıktan sonra test için gerekli işlemlerimizi gerçekleştirmek için Test -> Java altında 3 adet package oluşturuyoruz. Java klasörüne sağ tık new -> Package diyerek package yaratıyoruz.(Features , Driver, StepDefinition)
  • Features paketi, otomasyonumuz için senaryolarımızı yazdığımız kısımdır. Bu package içerisine .feature uzantılı bir File açıyoruz ve senaryomuzu yazıyoruz.
  • StepDefination ise yazdığımız senaryoların gerçekleştireceği işlemlerin fonksiyonlarını yazdığımız paketdir. Paket üzerinde sağ tık new -> java seçerek fonksiyonlarımızı yazmaya başlıyoruz.
  • Eğer otomasyonunuzu Chrome üzerinde çalıştıracaksanız chrome sürümüme uygun chromedriver indirin ve bunu proje klasörünün içerisine ekleyin.
  • .feature uzantılı dosyanızın içerisine senaryolarınızı yazın . Örnek;
  • Feature uzantılı dosyanızı run ettikten sonra console kısmında otomatik hazır fonksiyon oluştuğunu göreceksiniz . Senaryolarımızı tanımladıktan sonra StepDefination paketi içerisine gerçekleşecek adımlardaki fonksiyonların içlerini dolduruyoruz .
  • Yine annotation’larımızı tanımlayarak senaryo adımlarımızdaki tanımları parantez içerisine ekliyoruz. Görselde dikkat ettiyseniz @When adımında (?\\d+) şeklinde yazılmış farklı bir yapı ile karşılaşıyoruz. Bu tanım o adımdaki değişken tanımını ifade etmektedir. Yani ben bu kısma istediğim sayıyı yazabilirim ve toplama işlemini gerçekleştirebilirim. Bu kısımda girdiğim farklı sayılara göre toplama işlemimin sonucu da değişken olacaktır. Bu nedenle @Then adımında parantez içerisinde sonucun yazıldığı kısımda da (?\\d+) tanımını yapmalıyım. Yani ben senaryo yazarken hangi sayıları toplamam gerektiğini düzenlemem yeterli olacak. Fonksiyonlar arka tarafta işlemi otomatik yapıyor hale gelecekler.

Umarım sizin için faydalı bir yazı olmuştur . Şimdiden kolay gelsin :)

--

--

Ayşenur Kaya
Ayşenur Kaya

No responses yet