🔥 Test Otomasyonu — Assertion, CLI ve CI/CD

Test Otomasyonu — Assertion, CLI ve: "Send" tıklayıp response'a göz gezdirmek, pişirirken çorbayı bir kez tatmak gibidir.

"Send" tıklayıp response'a göz gezdirmek, pişirirken çorbayı bir kez tatmak gibidir. Otomatik assertion'lar ise çorbayı her seferinde, otomatik olarak, hatta kimsenin uyanık olmadığı sabahın 3'ünde bile kontrol eden bir mutfak zamanlayıcısı ve termometredir — pass/fail kararını bir insan yerine bilgisayarın (CI) verebilmesini sağlayan şey budur. Peki response'a zaten baktıysan ve gayet doğru göründüyse, neden ayrıca assertion yazasın? Çünkü doğruladığın şey **bu** response'tu, **bu** gün, **bu** veriyle — ve bir API'yi bozan şey neredeyse hiçbir zaman senin baktığın kısım değildir. Bir alan sessizce number'dan string'e döner, nullable bir alan null gelmeye başlar, status code 200 kalırken body'nin yarısı kaybolur. Göz, görmeyi beklediği şeyi tarar; assertion ise doğru OLMASI GEREKEN şeyi kontrol eder. Production'daki API bug'larının çoğu tam bu boşlukta yaşar. Java karşılığı birebir aynıdır: bu, `System.out.println(result)` ile `assertEquals(expected, result)` arasındaki farktır. İkisi de değeri gösterir; ama sadece biri, altı ay sonra kimsenin izlemediği bir koşumda değer bozulduğunda build'i kırar. QA için CLI, bunu kişisel bir alışkanlıktan ekip altyapısına çeviren parçadır: elle tıklayarak gezdiğin collection'ın aynısı, her pull request'te pipeline içinde headless koşar. Bozulan bir contract artık release toplantısında değil, merge anında düşer — ve "benim makinemde çalışıyordu" savunulabilir bir cümle olmaktan çıkar.

Kontrol Yazmak — Assert Tab vs Script Tab

Assert tab — JavaScript gerekmez:

res.status: eq 200 Satırı JavaScript Yazmadan Nasıl Çalışır?

Assert tab, YAZILI her satırı…

Assert tab, YAZILI her satırı kendi ÖZEL mini-dilinde OKUR — res.status: eq 200 gerçek JavaScript DEĞİLDİR, Bruno'nun İÇSEL olarak yorumladığı bir KARŞILAŞTIRMA ifadesidir.

eq, lt, gt gibi operatörler…

eq, lt, gt gibi operatörler ÖNCEDEN TANIMLI bir KÜMEDİR — yeni bir operatör İCAT edemezsin, sadece Bruno'nun DESTEKLEDİĞİ birkaç karşılaştırma türünü KULLANABİLİRSİN.

res.body.email: contains @ satırı…

res.body.email: contains @ satırı, yanıt gövdesindeki email ALANININ İÇİNDE "@" karakterinin GEÇİP GEÇMEDİĞİNİ kontrol eder — TAM eşleşme değil, KISMİ bir metin arama YAPAR.

res.responseTime: lt 500 ise…

res.responseTime: lt 500 ise Bruno'nun KENDİSİNİN ölçtüğü GERÇEK yanıt süresini (milisaniye) 500 ile KARŞILAŞTIRIR — bu değer sunucudan GELMEZ, istemci tarafında HESAPLANIR.

Bu satırların HER BİRİ BAĞIMSIZ…

Bu satırların HER BİRİ BAĞIMSIZ bir assertion'dır — biri FAIL olsa bile diğerleri ÇALIŞMAYA devam eder, ve TÜM sonuçlar tek bir run raporunda TOPLU olarak GÖSTERİLİR.