Bir GraphQL uç noktasının gerçekten çalıştığını doğrulamak için yalnızca HTTP durum koduna bakmak yeterli değildir. user sorgusunun uygulamanızın beklediği alanları döndürdüğünü, createOrder mutasyonunun veriyi kalıcı olarak yazdığını ve değişkenler değiştiğinde yanıt şemasının bozulmadığını kontrol etmeniz gerekir. GraphQL istekleri genellikle tek bir URL’ye POST gövdesiyle gönderildiği için, sorgu dilini destekleyen, şema önerileri sunan ve JSON yanıtları üzerinde doğrulama yapabilen bir istemci kullanmak önemlidir.
Apidog, HTTP, gRPC, WebSocket, SSE ve SOAP yanında GraphQL’i de ayrı bir istek türü olarak destekler. Bu rehberde sıfırdan bir GraphQL isteği oluşturacak, şemayı getirerek kod tamamlama etkinleştirecek, değişken kullanacak, mutasyon çalıştıracak ve yanıtı doğrulayacaksınız.
Örnek olarak bir e-ticaret API’sinde kullanıcı ve siparişlerini sorgulayıp ardından yeni bir sipariş oluşturacağız. GraphQL’in temel kavramları için resmî GraphQL belgelerine bakabilirsiniz. REST ve GraphQL arasındaki kullanım farkları için de REST ile GraphQL karşılaştırmasını inceleyin.
Neyi test ediyorsunuz ve GraphQL neden farklı?
REST API’lerde genellikle her kaynak için ayrı bir uç nokta bulunur ve her uç nokta sabit bir yanıt şekli döndürür. GraphQL ise tek bir uç nokta üzerinden istemcinin ihtiyaç duyduğu alanları seçmesine izin verir.
Örneğin REST çağrısı şöyle olabilir:
GET /users/42
GraphQL’de aynı veri isteği çoğunlukla tek bir POST isteğinin gövdesindeki sorgu belgesiyle gönderilir:
user(id: 42) {
id
name
}
GraphQL testinde dikkat edilmesi gereken kritik nokta hata davranışıdır. İş veya doğrulama hataları oluştuğunda GraphQL çoğu zaman HTTP seviyesinde 200 OK döndürür. Hata bilgisi ise JSON gövdesindeki errors dizisinde yer alır.
Bu nedenle her GraphQL testi en az şunları doğrulamalıdır:
- HTTP durum kodu
200mü? - Yanıtta
errorsalanı var mı? -
dataaltındaki alanlar beklenen değer ve yapıda mı?
Apidog; GraphQL gövde türü, şema tabanlı kod tamamlama, değişken desteği ve API doğrulama araçlarıyla bu kontrolleri tek bir akışta yapmanızı sağlar.
Apidog’da GraphQL isteği oluşturma
İlk olarak Apidog’u indirin veya tarayıcıdan açın. Ardından mevcut projenizi seçin ya da yeni bir proje oluşturun.
Adım 1: Yeni istek oluşturun ve gövdeyi GraphQL yapın
+ düğmesine tıklayın ve New Request seçeneğini seçin.
İstek metodunu POST olarak ayarlayın ve GraphQL uç noktanızı URL alanına girin:
https://api.yourstore.com/graphql
Ardından:
- Body sekmesini açın.
- Gövde türü olarak GraphQL seçin.
- Açılan Query alanına GraphQL sorgunuzu yazın.
Uç noktanız kimlik doğrulama gerektiriyorsa Authorization bölümünden örneğin Bearer Token ekleyin. GraphQL istekleri de HTTP üzerinden çalıştığı için yetkilendirme süreci diğer POST istekleriyle aynıdır.
Adım 2: İlk sorgunuzu yazın
Run sekmesindeki Query alanına aşağıdaki sorguyu ekleyin:
query GetUserWithOrders {
user(id: "usr_1024") {
id
name
email
orders {
id
total
status
createdAt
}
}
}
Bu sorgu bir kullanıcıyı ve kullanıcının siparişlerini getirir.
Alan adları sunucunuzun GraphQL şemasıyla birebir eşleşmelidir. Örneğin şemada
emailAddresstanımlıysa,
Adım 3: Kod tamamlama için şemayı getirin
Alan adlarını tahmin etmek yerine şemayı Apidog’a getirin.
- GraphQL istek ekranında Fetch Schema düğmesine tıklayın.
- Apidog, GraphQL introspection sorgusu ile şema bilgisini çeker.
- Sorgu editöründe alan veya tip yazmaya başladığınızda geçerli önerileri kullanın.
Örneğin user { yazdıktan sonra editör, User tipinde kullanılabilen alanları önerebilir.
Dikkat edilmesi gerekenler:
- Kod tamamlama otomatik olarak açılmaz; Fetch Schema işlemini manuel çalıştırmanız gerekir.
- Üretim uç noktanızda introspection kapalıysa şema getirilemez.
- Şema değiştiğinde güncel öneriler için tekrar Fetch Schema çalıştırın.
Adım 4: İsteği çalıştırın ve yanıtı inceleyin
Send düğmesine tıklayın. Başarılı bir yanıt şu yapıda olur:
{
"data": {
"user": {
"id": "usr_1024",
"name": "Dana Whitfield",
"email": "dana@example.com",
"orders": [
{
"id": "ord_5001",
"total": 89.9,
"status": "SHIPPED",
"createdAt": "2026-07-01T09:14:00Z"
},
{
"id": "ord_5002",
"total": 12.5,
"status": "PENDING",
"createdAt": "2026-07-12T16:03:00Z"
}
]
}
}
}
GraphQL yanıtlarında asıl veri data altında bulunur. Hata varsa aynı seviyede errors dizisi görünür:
{
"data": null,
"errors": [
{
"message": "User not found"
}
]
}
Bu nedenle doğrulama yollarınızı kökten değil, data.user gibi iç içe alanlardan kurun.
İsteği yeniden kullanılabilir yapmak için değişken kullanın
Sorguya "usr_1024" değerini sabit yazmak hızlı bir deneme için uygundur. Ancak aynı isteği farklı kullanıcılar, test verileri veya ortamlar için çalıştıracaksanız GraphQL değişkenlerini kullanın.
GraphQL değişken sözdizimi standarttır; ayrıntılar için resmî GraphQL değişken belgelerine bakabilirsiniz.
Sorguyu şu şekilde güncelleyin:
query GetUserWithOrders($userId: ID!) {
user(id: $userId) {
id
name
orders {
id
total
status
}
}
}
Ardından değişken değerini JSON olarak iletin:
{
"userId": "usr_1024"
}
Bu yaklaşımla sorgu metnini değiştirmeden farklı kullanıcılar için test çalıştırabilirsiniz.
Pratik kullanım deseni:
- Sorguda
$userIdkullanın. - Değeri GraphQL Variables alanından verin.
- Ortama göre farklı değerler için Apidog ortam değişkenlerini kullanın.
- Aynı isteği hazırlık ve üretim ortamlarında sorguyu değiştirmeden çalıştırın.
Sipariş oluşturmak için mutasyon yazın
GraphQL’de veri değiştiren işlemler mutation ile tanımlanır. Ayrı bir mutasyon sekmesi kullanmanız gerekmez; sorgularla aynı Query alanına yazılır.
Aşağıdaki mutasyon, kullanıcı için sipariş oluşturur:
mutation CreateOrder($input: CreateOrderInput!) {
createOrder(input: $input) {
id
total
status
createdAt
}
}
Girdi verisini değişkenler alanında sağlayın:
{
"input": {
"userId": "usr_1024",
"items": [
{
"sku": "TSHIRT-BLK-M",
"quantity": 2
},
{
"sku": "MUG-CERAMIC",
"quantity": 1
}
],
"currency": "USD"
}
}
Send düğmesine tıkladığınızda başarılı bir yanıt şu şekilde olabilir:
{
"data": {
"createOrder": {
"id": "ord_5003",
"total": 42.3,
"status": "PENDING",
"createdAt": "2026-07-15T10:22:11Z"
}
}
}
Mutasyonlar gerçek veri yazabildiği için bunları öncelikle test veya hazırlık ortamında çalıştırın.
Uçtan uca test için şu akışı kullanın:
- Kullanıcıyı ve mevcut siparişlerini sorgulayın.
-
createOrdermutasyonunu çalıştırın. - Dönen sipariş
iddeğerini kaydedin. - Kullanıcı sorgusunu tekrar çalıştırın.
- Yeni siparişin sipariş listesinde yer aldığını doğrulayın.
Yanıtı gözle kontrol etmek yerine doğrulayın
JSON yanıtını elle okumak keşif aşamasında yeterli olabilir. Regresyon testlerinde ise doğrulama kuralları kullanmanız gerekir.
Apidog’da bir isteğe doğrulayıcı ekleyerek çalıştırmanın otomatik olarak başarılı veya başarısız sayılmasını sağlayabilirsiniz. Ayrıntılar için API doğrulamalarını inceleyin.
GraphQL için temel doğrulama seti şudur:
- HTTP durum kodunun
200olduğunu doğrulayın. -
errorsalanının mevcut olmadığını doğrulayın. -
dataaltındaki kritik değerleri JSONPath ile kontrol edin.
Örnek doğrulamalar:
| Kontrol | Örnek yol | Beklenen sonuç |
|---|---|---|
| HTTP durumu | HTTP status | 200 |
| GraphQL hatası | $.errors |
Alan bulunmamalı |
| Mutasyon durumu | $.data.createOrder.status |
PENDING |
| Sipariş sayısı | $.data.user.orders |
Uzunluk 0 değerinden büyük |
| Oluşturulan sipariş | $.data.createOrder.id |
Boş olmamalı |
Yalnızca 200 kontrolü yapmak yetersizdir. Aşağıdaki yanıt HTTP seviyesinde başarılı görünür, ancak GraphQL işlemi başarısızdır:
{
"errors": [
{
"message": "Invalid input"
}
]
}
Bu nedenle errors alanının olmadığını doğrulamak GraphQL testlerinin temel kontrolüdür.
Bir test senaryosuna kaydedin
Tek bir doğrulanmış istek duman testi için faydalıdır. Daha güçlü bir kontrol için sorgu ve mutasyonları tek bir test senaryosunda zincirleyin.
Örnek senaryo:
-
GetUserWithOrderssorgusunu çalıştırın. -
CreateOrdermutasyonunu çalıştırın. - Mutasyon yanıtındaki
$.data.createOrder.iddeğerini değişkene kaydedin. - Kullanıcı veya sipariş sorgusunu tekrar çalıştırın.
- Kaydedilen sipariş kimliğinin döndüğünü doğrulayın.
Apidog test senaryoları adımları sıralamanıza, adımlar arasında veri aktarmanıza ve tüm akışı tek çalıştırmada doğrulamanıza imkân verir. Uygulama adımları için Apidog ile test senaryosu nasıl yazılır rehberine bakın.
GraphQL’i diğer API stilleriyle değerlendiriyorsanız şu kaynaklar da yardımcı olabilir:
İş akışını Apidog CLI ile otomatikleştirme
GraphQL senaryolarınız projeye kaydedildikten sonra, kayıtlı test senaryolarını terminalden veya CI çalıştırıcısından Apidog CLI ile çalıştırabilirsiniz.
CLI’yi kurun ve oturum açın:
npm install -g apidog-cli
apidog login --with-token <your-token>
Ardından belirli bir ortamda kaydedilmiş senaryoyu çalıştırın:
apidog run --access-token $APIDOG_ACCESS_TOKEN -t <scenario_id> -e <env_id> -r cli
Parametrelerin anlamı:
-
-t: Test senaryosu kimliği -
-e: Ortam kimliği -
-r: Raporlayıcı türü
Raporlayıcı olarak cli, html veya junit kullanabilirsiniz. Birden fazla raporlayıcı için virgülle ayırın:
apidog run \
--access-token $APIDOG_ACCESS_TOKEN \
-t <scenario_id> \
-e <env_id> \
-r html,cli
CLI; kaydedilmiş senaryoları ve test paketlerini çalıştırıp sonucu raporlayabilir. Ancak CLI belgeleri GraphQL adımları içeren senaryoların başsız çalıştırılmasını açıkça belirtmez. Bu nedenle GraphQL sorgu, mutasyon ve doğrulama akışlarınızı uygulamada doğrulamak; CLI’yi ise HTTP regresyon çalıştırmaları ve belirtim senkronizasyonu için kullanmak daha güvenli bir yaklaşımdır.
Kurulum ve CI entegrasyonu için:
Sıkça Sorulan Sorular
Apidog’da GraphQL test etmek için ücretli plana ihtiyacım var mı?
GraphQL istek belgeleri bu özelliğin belirli bir plan kademesine veya bulut/kendi kendine barındırılan ayrımına bağlı olduğunu belirtmez. Ücretsiz katmanla başlayabilir, güncel plan bilgileri için Apidog sayfasını kontrol edebilirsiniz.
GraphQL isteğim neden 200 dönmesine rağmen başarısız oluyor?
Bu normal GraphQL davranışıdır. HTTP isteği başarıyla ulaşmış olabilir, ancak iş veya doğrulama hatası JSON gövdesindeki errors dizisinde döner. Bu yüzden HTTP durumuna ek olarak errors alanının bulunmadığını doğrulamalısınız.
Sorgu yazarken alan önerilerini nasıl alabilirim?
GraphQL istek ekranındaki Fetch Schema düğmesine tıklayın. Apidog introspection ile şemayı çeker ve editörde geçerli alanlar ile tipler için kod tamamlama önerileri sunar.
Mutasyonlar için ayrı bir sekme var mı?
Hayır. Mutasyonları sorgularla aynı Query alanına yazarsınız. Tek fark, query yerine mutation anahtar kelimesini kullanmanızdır.
Sorguyu değiştirmeden farklı değerleri nasıl iletebilirim?
GraphQL değişkenlerini kullanın. Değişkeni işlem imzasında $ önekiyle tanımlayın ve değeri JSON değişken nesnesi olarak iletin:
query GetUser($userId: ID!) {
user(id: $userId) {
id
name
}
}
{
"userId": "usr_1024"
}
Özet
GraphQL testinde güvenilir bir iş akışı için:
- GraphQL gövde türünü seçin.
- Sorgu veya mutasyonu Query alanına yazın.
- Kod tamamlama için şemayı getirin.
- Sabit değerleri GraphQL değişkenlerine taşıyın.
- HTTP
200kontrolüne ek olarakerrorsalanını doğrulayın. -
dataaltındaki kritik alanları JSONPath ile test edin. - Sorgu ve mutasyonları tekrar çalıştırılabilir bir senaryoda zincirleyin.
Bu akışla kullanıcı sorgusu, sipariş oluşturma ve oluşturulan veriyi yeniden okuma işlemlerini aynı regresyon testi içinde doğrulayabilirsiniz.
Top comments (0)