🗂️ 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