🗂️ JSON Path & Schema Validation
JSON Path & Schema Validation: JSON Path, derin depolanmış verilere ulaşmak için kullanılan bir depo haritası gibidir: "3. koridorun 2. rafındaki 5.
JSON Path, derin depolanmış verilere ulaşmak için kullanılan bir depo haritası gibidir: "3. koridorun 2. rafındaki 5. kutudaki kırmızı kutuyu bul" demek yerine `data.items[2].colors[4]` yazarsın — depo görevlisi koordinatı takip eder, her kutuyu açmaz. Peki response body'yi `response.getBody().asString()` ile alıp split veya regex ile istediğim değere ulaşabiliyorum; neden JSON Path sözdizimini ayrıca öğrenmek gerekiyor? Çünkü `String.split(",")[3]` ile yazdığın kod, API bir alan sırasını değiştirdiğinde yanlış değeri çekmeye başlar ve test yanlış PASS verir — JSON Path ise alan adına göre gider, sıradan bağımsızdır. Java'da `JSONObject` ile elle parse ederken her iç içe nesne için `getJSONObject("data").getJSONArray("users").getJSONObject(0).getString("email")` zincirlersen; JSON Path bunu tek `"data.users[0].email"` string'ine indirir. QA açısından kritik senaryo: login response'undaki `token` değerini alıp bir sonraki testin bearer header'ına koymak istiyorsun — `String token = response.jsonPath().getString("token")` tek satırda halleder; SessionToken sınıfı yazmana gerek kalmaz ve zincirli test senaryolarında her adım bir öncekinin çıktısını JSON Path ile temiz taşır.
extract() — Response'dan Değer Çekme
Micro Lab: REST Assured assertion yazma
TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.
extract().path() ile extract().response() Arasındaki Fark Nedir?
.extract().path("data.email") TEK BİR…
`.extract().path("data.email")` TEK BİR alanı doğrudan `String`'e ÇEKER — başka hiçbir alana ihtiyacın yoksa en KISA yoldur.
AYNI JSON Path sözdizimi…
AYNI JSON Path sözdizimi, tekil bir `String` için de (`data.email`) bir `List ` için de (`data.email` — dizi elemanlarına uygulanınca) ÇALIŞIR — REST Assured tipi OTOMATİK çıkarır.
.extract().response() TÜM Response…
`.extract().response()` TÜM `Response` nesnesini döndürür — birden fazla alana `res.path(...)` ile erişmen gerektiğinde, isteği TEKRAR göndermek yerine BİR kez çekip TEKRAR TEKRAR okursun.
res.asString() ham JSON metnini TAMAMEN…
`res.asString()` ham JSON metnini TAMAMEN farklı bir amaç için verir: debug loglaması veya beklenmeyen bir formatı (HTML hata sayfası gibi) YAKALAMAK için.
Gelişmiş JSON Path — Groovy Filtreler