DEV Community

Cover image for Apidog ile API Testlerinde Veritabanı Sorguları Nasıl Kullanılır (MySQL, MongoDB, Redis)
Tobias Hoffmann
Tobias Hoffmann

Posted on • Originally published at apidog.com

Apidog ile API Testlerinde Veritabanı Sorguları Nasıl Kullanılır (MySQL, MongoDB, Redis)

Yeşil bir durum kodu yalan söyleyebilir. POST /orders uç noktanız 201 Created döndürebilir, yanıt gövdesi beklediğiniz gibi görünebilir ve HTTP testiniz geçebilir. Ancak sipariş gerçekten doğru alanlarla veritabanına yazıldı mı? Envanter azaldı mı? Yalnızca HTTP yanıtını doğrulayan testler, API'nin ne söylediğini kontrol eder; sistemin gerçekten ne yaptığını değil.

Apidog'u bugün deneyin

Bu boşluğu kapatmak için test senaryonuza veritabanı sorguları ekleyin: isteği göndermeden önce bilinen bir durum oluşturun, isteği çalıştırın ve ardından kalıcı veriyi doğrudan tablodan doğrulayın. Apidog, Veritabanı Bağlantıları ve Veritabanı İşlemi işlemcisiyle SQL veya NoSQL komutlarını aynı test senaryosunda çalıştırmanızı sağlar. Temel senaryo kurulumu için Apidog ile test senaryosu nasıl yazılır kılavuzuna bakın. İlişkisel veri modelleme için de MDN'nin sunucu tarafı genel bakışı iyi bir başlangıç noktasıdır.

Bir testte veritabanı işlemleri size ne kazandırır?

Veritabanına hiç dokunmayan bir API testi kara kutu testidir: yalnızca yanıta güvenir. Bu yaklaşım çoğu durumda yeterlidir, ancak kritik hatalar genellikle API yanıtı ile kalıcı veri arasındaki farkta ortaya çıkar:

  • Güncellenmesi gereken status alanının hiç değişmemesi
  • Geçersiz bir yabancı anahtarın kaydedilmesi
  • Yumuşak silme beklenirken kaydın fiziksel olarak silinmesi
  • API'nin başarılı yanıt dönmesine rağmen transaction'ın geri alınması

Veritabanı adımlarıyla üç temel işi yapabilirsiniz:

  1. Testi önceki çalıştırmalardan kalan verilere bağımlı kılmamak için kesin bir başlangıç durumu oluşturmak
  2. API'nin yazdığını iddia ettiği satırı okuyarak kalıcı veriyi doğrulamak
  3. Veritabanından gerçek bir değeri çıkarıp sonraki istekte kullanmak

Apidog bu akışı iki parçaya ayırır:

  • Ayarlar > Veritabanı Bağlantıları altında tekrar kullanılabilir bir bağlantı oluşturursunuz.
  • İsteğe Ön İşlemci veya Son İşlemci olarak bir Veritabanı İşlemi adımı eklersiniz.

Aynı bağlantıyı proje içindeki birden fazla senaryoda kullanabilirsiniz.

MySQL, SQL Server (2014 ve sonrası), PostgreSQL ve Oracle ücretsiz planda kullanılabilir. ClickHouse, MongoDB ve Redis ücretli plan gerektirir. Bu nedenle aşağıdaki MySQL örneği ücretsiz katman için uygundur; MongoDB ve Redis örnekleri ücretli özelliklere dayanır.

Adım 1: Veritabanı bağlantısı oluşturun

Ayarlar > Veritabanı Bağlantıları bölümünü açın ve sağ üstteki + Yeni düğmesine tıklayın.

Veritabanı türünü seçtikten sonra şu alanları doldurun:

  • Host: Örneğin db.staging.internal veya 127.0.0.1
  • Port: MySQL için 3306
  • Kullanıcı Adı
  • Şifre
  • Veritabanı Adı: Örneğin shop

Apidog veritabanı bağlantısı ekranı

Veritabanınız bir bastion host arkasındaysa SSH Tüneli bölümünü açıp atlama sunucusu bilgilerini girin.

MySQL için SSL modunu da seçin:

  • Prefer: Varsayılan seçenek; önce SSL dener, başarısız olursa SSL olmadan bağlanır.
  • Require: SSL bağlantısını zorunlu kılar.
  • Verify CA: Sertifika otoritesini doğrular.
  • Verify Full: Sertifikayı ve sunucu adını doğrular.

Mümkünse sunucunuzun desteklediği en katı modu kullanın. Ardından Kaydet'e tıklayın.

MySQL 8 kimlik doğrulama sorunu

MySQL 8'in varsayılan caching_sha2_password eklentisi bağlantı hatasına neden olabilir. Kimlik doğrulama hatası alırsanız test kullanıcısını aşağıdaki gibi güncelleyip tekrar deneyin:

ALTER USER 'tester'@'%'
IDENTIFIED WITH mysql_native_password BY '...';
Enter fullscreen mode Exit fullscreen mode

Eklentiler arasındaki farklar için MySQL referans kılavuzuna bakın.

Bağlantı bilgileri ekip üyeleriyle otomatik paylaşılmaz

Veritabanı bağlantı bilgileri yerel makinede saklanır ve bulutla senkronize edilmez. Her ekip üyesi kendi bağlantısını yapılandırmalıdır. Ekip akışı için veritabanı bağlantı ayarlarını paylaşma notlarını inceleyin.

Adım 2: Ön İşlemci ile test verisi oluşturun

Sipariş oluşturma akışını test ettiğinizi varsayalım. İstek çalışmadan önce bilinen bir müşterinin mevcut olmasını istersiniz. Böylece testiniz, veritabanında o anda bulunan rastgele verilere bağımlı kalmaz.

İsteğinizi açın ve şu adımları uygulayın:

  1. Ön İşlemciler bölümünü açın.
  2. Veritabanı İşlemcisi Ekle seçeneğinin üzerine gelin.
  3. Veritabanı işlemi seçeneğini seçin.
  4. Adı seed customer yapın.
  5. MySQL bağlantınızı seçin.
  6. SQL Komutu Girin alanına aşağıdaki sorguyu ekleyin.
INSERT INTO customers (id, email, status)
VALUES ({{customer_id}}, '{{customer_email}}', 'active')
ON DUPLICATE KEY UPDATE status = 'active';
Enter fullscreen mode Exit fullscreen mode

Dinamik değerler {{variable_name}} sözdizimiyle ortam değişkenlerinden alınır.

Bu sorgu her çalıştırmada müşterinin var olmasını ve active durumda kalmasını sağlar. Böylece testiniz:

  • Çalıştırma sırasına bağımlı olmaz.
  • Önceki testlerden kalan verilere güvenmez.
  • Bilinen bir müşteri kimliğiyle çalışır.

Adım 3: Son İşlemci ile veritabanı kaydını doğrulayın

Şimdi API'nin gerçekten doğru veriyi yazdığını doğrulayalım.

Örneğin sipariş oluşturma isteğiniz şu olsun:

POST /api/orders
Content-Type: application/json

{
  "customer_id": {{customer_id}},
  "items": [{ "sku": "APRON-01", "qty": 2 }]
}
Enter fullscreen mode Exit fullscreen mode

Normal yanıt doğrulamanızla API yanıtındaki sipariş kimliğini order_id değişkenine kaydettiğinizi varsayın.

Ardından aynı istekte:

  1. Son İşlemciler bölümünü açın.
    • TASARIM Modu'nda: Çalıştır sekmesi
    • HATA AYIKLAMA Modu'nda: İstek sekmesi
  2. Son İşlemci Ekle > Veritabanı işlemi seçeneğini seçin.
  3. Adı verify order row yapın.
  4. Veritabanı bağlantınızı seçin.
  5. Aşağıdaki SQL sorgusunu ekleyin.
SELECT id, status, total_cents
FROM orders
WHERE id = {{order_id}};
Enter fullscreen mode Exit fullscreen mode

Sorgu sonuçları, satırları içeren bir nesne dizisi olarak döner. İlk satırın status alanını almak için Sonuçları Çıkar (İsteğe Bağlı) bölümünü açın ve bir Sonucu Değişkene Çıkar girdisi ekleyin.

  • Değişken Adı: db_order_status
  • JSONPath İfadesi:
$[0].status
Enter fullscreen mode Exit fullscreen mode

İsteği çalıştırdıktan sonra Konsol bölümünden ham sorgu sonucunu ve çıkarılan değişkeni kontrol edin.

Ardından db_order_status için beklenen değeri doğrulayın:

pending
Enter fullscreen mode Exit fullscreen mode

Bu adımın yakaladığı hata örneği şudur:

  • API 201 Created döner.
  • Ancak veritabanındaki satır status = 'draft' olarak kalır.
  • HTTP testi geçse bile veritabanı doğrulaması başarısız olur.

Adım 4: Veritabanından değer çıkarın ve sonraki istekte kullanın

Veritabanı sorguları yalnızca doğrulama için kullanılmaz. API yanıtının döndürmediği ancak sonraki isteğin ihtiyaç duyduğu değerleri de çıkarabilirsiniz.

Örneğin sipariş oluşturulduğunda sunucu fulfillment_ref adlı dahili bir referans oluştursun. Bu alan orders tablosuna yazılsın, ancak API yanıtında bulunmasın.

Sonraki isteğiniz şöyle olabilir:

GET /api/fulfillments/{{fulfillment_ref}}
Enter fullscreen mode Exit fullscreen mode

Önce sipariş isteğinin Son İşlemcisine şu sorguyu ekleyin:

SELECT fulfillment_ref
FROM orders
WHERE id = {{order_id}};
Enter fullscreen mode Exit fullscreen mode

Ardından sonucu değişkene çıkarın:

  • Değişken Adı: fulfillment_ref
  • JSONPath İfadesi:
$[0].fulfillment_ref
Enter fullscreen mode Exit fullscreen mode

Sonraki istekte doğrudan şu değişkeni kullanabilirsiniz:

{{fulfillment_ref}}
Enter fullscreen mode Exit fullscreen mode

Bu yaklaşım, HTTP yanıtlarından veri zincirlemeye benzer. Fark, doğruluk kaynağının JSON yanıt gövdesi yerine veritabanı olmasıdır. Daha fazla örnek için test adımları arasında veri geçirme ve API test orkestrasyonu ve veri geçirme yazılarını inceleyin.

MongoDB ve Redis: NoSQL varyantları

Veritabanı İşlemi işlemcisi NoSQL depolarla da çalışır. Ancak MongoDB ve Redis bağlantıları ücretli özelliklerdir. Alanların tamamı için Apidog belgelerini kullanın.

MongoDB

Bir Veritabanı İşlemi adımı ekleyin ve veritabanı türü olarak MongoDB'yi seçin.

Ham SQL yerine şu işlem türlerini görürsünüz:

  • Find
  • Insert
  • Update
  • Delete
  • Veritabanı Komutu Çalıştır

CRUD işlemlerinde Koleksiyon Adı gereklidir. Sorgu Koşulu alanı JSON kabul eder:

{ "_id": "65486728456e79993a150f1c" }
Enter fullscreen mode Exit fullscreen mode

Apidog, eşleşen kimlik dizelerini otomatik olarak ObjectId biçimine dönüştürebilir. BSON türleri gerektiğinde şu yardımcılar desteklenir:

ISODate(...)
ObjectId(...)
NumberDecimal(...)
NumberLong(...)
Enter fullscreen mode Exit fullscreen mode

Bu türlerin veri modeliyle ilişkisi için MongoDB belgeleri</ane bakın.

MySQL akışı, JSONPath ile sonucu değişkene çıkarmayı belgeler. MongoDB ve Redis belgelerinde aynı Sonucu Değişkene Çıkar mekanizması açıkça belirtilmez. Bu nedenle MongoDB işlemlerinde önce Konsol çıktısını kontrol edin; SQL'deki çıkarım akışının birebir aynı çalıştığını varsaymayın.

Redis

Redis bağlantısı şu alanları ister:

  • Ana Bilgisayar
  • Bağlantı Noktası
  • Şifre
  • Veritabanı Dizini

Görsel işlem arayüzünde şu işlemler bulunur:

  • GET
  • SET
  • DELETE

Örneğin önbellekteki bir oturumu okumak için:

  • İşlem türü: GET
  • Anahtar: user:session:123

Açılır menüde olmayan Redis komutları için Redis Komutu Çalıştır sekmesini kullanın:

KEYS user:*
Enter fullscreen mode Exit fullscreen mode

Bu yöntemle:

  • API'nin oluşturması gereken cache kaydını doğrulayabilirsiniz.
  • Testten önce cache anahtarını silebilirsiniz.
  • Uç noktanın anahtarı yeniden oluşturduğunu kanıtlayabilirsiniz.

Gelişmiş kullanım alanları ve sınırlar

Döngü içindeki satırları doğrulama

Bir ForEach adımında satırlar üzerinde dolaşıyorsanız geçerli öğeye şu söz dizimiyle erişin:

{{$.StepID.element.field}}
Enter fullscreen mode Exit fullscreen mode

Buradaki StepID, döngü adımının gerçek numarasıdır. Bu yapı, her iterasyonda farklı bir veritabanı satırını doğrulamak için kullanışlıdır.

Veritabanı değerine göre dallanma

Bir durum alanını değişkene çıkarıp senaryonun kalanını bu değere göre yönlendirebilirsiniz.

Örneğin:

  • status = paid ise sevkiyat akışına devam edin.
  • status = pending ise ödeme bekleme akışını çalıştırın.

Bu yaklaşımı API test senaryolarında koşullu mantık ile birleştirebilirsiniz.

Ortama göre bağlantı yönlendirme

Her ortam için ayrı bağlantı tanımlayın:

  • local
  • staging
  • Gerekirse production

Böylece aynı SQL adımı, seçili ortama göre doğru veritabanında çalışır.

Saklı prosedürler

Görsel arayüz saklı prosedürler gibi karmaşık işlemleri yönetmez. Test adımlarında basit ve doğrudan sorgular kullanın:

SELECT ...
INSERT ...
UPDATE ...
DELETE ...
Enter fullscreen mode Exit fullscreen mode

Oracle kurulumu

Oracle'a bağlanmadan önce yerel makinenizde ayrı bir Oracle İstemcisi kurulmalıdır.

Ortama göre kimlik bilgilerini yönetin

Testlerin yanlışlıkla üretim veritabanına erişmesini önlemek için her ortam adına ayrı bir Veritabanı Bağlantısı oluşturun.

Örnek yapı:

Ortam Bağlantı Örnek host
Local local 127.0.0.1
Staging staging db.staging.internal
Production production üretim hostu

Sağ üstteki ortam açılır menüsünden ortam değiştirdiğinizde Apidog, senaryodaki sorguları seçili ortama karşı çalıştırır.

Örneğin:

  • staging seçildiğinde SELECT sorgunuz staging veritabanında çalışır.
  • local seçildiğinde aynı sorgu yerel veritabanınızda çalışır.

SQL'i veya test adımını değiştirmeniz gerekmez.

Bağlantı bilgileri yerelde tutulduğu için üretim parolaları paylaşılan bulut projesine eklenmez. Her mühendis kendi kimlik bilgilerini kendi makinesinde saklar.

Apidog CLI ile iş akışını otomatikleştirin

Senaryo uygulamada başarılı olduktan sonra CI ortamında da çalıştırın. Böylece her pull request yalnızca HTTP sözleşmesini değil, veritabanına yazılan veriyi de doğrular.

Önce CLI'yi kurun ve kimlik doğrulaması yapın:

npm install -g apidog-cli
apidog login --with-token <YOUR_ACCESS_TOKEN>
Enter fullscreen mode Exit fullscreen mode

Ardından test senaryosunu seçilen ortamda çalıştırın:

apidog run --access-token $APIDOG_ACCESS_TOKEN -t <senaryo_kimliği> -e <ortam_kimliği> -r cli
Enter fullscreen mode Exit fullscreen mode

Parametreler:

  • -t: Test senaryosu kimliği
  • -e: Ortam kimliği
  • -r: Raporlayıcı

Kullanılabilir raporlayıcılar:

cli
html
junit
Enter fullscreen mode Exit fullscreen mode

Birden fazla raporlayıcı kullanmak için virgülle ayırın:

apidog run --access-token $APIDOG_ACCESS_TOKEN \
  -t <senaryo_kimliği> \
  -e <ortam_kimliği> \
  -r html,cli
Enter fullscreen mode Exit fullscreen mode

Veritabanı bağlantı bilgileri yereldir. Bu nedenle CI çalıştırıcısının veritabanınıza erişebilmesi için gerekli bağlantı yapılandırmasını dışa aktarmanız veya CI ortamında uygun şekilde sağlamanız gerekir.

Veri kümesiyle çoklu test çalıştırıyorsanız Apidog CLI ile veri odaklı test yazısına bakın. Düzenli çalıştırma için Apidog ile API testlerini planlama rehberini kullanabilirsiniz.

Sıkça Sorulan Sorular

Hangi veritabanları ücretsiz, hangileri ücretli?

MySQL, SQL Server (2014 ve sonrası), PostgreSQL ve Oracle ücretsiz planda kullanılabilir. ClickHouse, MongoDB ve Redis ücretli plan gerektirir. Ücretsiz veritabanlarıyla başlamak için Apidog'u indirin.

Veritabanındaki bir değeri sonraki istekte kullanabilir miyim?

Evet. Son İşlemciye bir Veritabanı işlemi ekleyin, SELECT sorgusunu çalıştırın ve sonucu JSONPath ile değişkene çıkarın.

Örnek:

SELECT fulfillment_ref
FROM orders
WHERE id = {{order_id}};
Enter fullscreen mode Exit fullscreen mode

JSONPath:

$[0].fulfillment_ref
Enter fullscreen mode Exit fullscreen mode

Sonraki istekte:

{{fulfillment_ref}}
Enter fullscreen mode Exit fullscreen mode

HTTP yanıtları arasında veri aktarma için test adımları arasında veri geçirme yazısına bakın.

Ekip arkadaşlarım veritabanı bağlantılarımı otomatik olarak alır mı?

Hayır. Bağlantı kimlik bilgileri yerel istemcide saklanır ve bulutla senkronize edilmez. Her ekip üyesi bağlantıyı kendisi yapılandırmalıdır.

MySQL 8 bağlantım neden başarısız oluyor?

MySQL 8 varsayılan olarak caching_sha2_password eklentisini kullanır. Bu eklenti bağlantı sorununa neden olursa kullanıcıyı mysql_native_password kullanacak şekilde güncelleyin:

ALTER USER 'tester'@'%'
IDENTIFIED WITH mysql_native_password BY '...';
Enter fullscreen mode Exit fullscreen mode

Saklı prosedür veya karmaşık veritabanı mantığı çalıştırabilir miyim?

Görsel arayüz üzerinden saklı prosedürler gibi karmaşık işlemler desteklenmez. Test adımlarını standart SELECT, INSERT, UPDATE ve DELETE ifadeleriyle sınırlayın.

Özet

Veritabanı sorguları, API testini “yanıt doğru görünüyordu” seviyesinden “kalıcı veri gerçekten doğru” seviyesine taşır.

Uygulanabilir akış şudur:

  1. Ön İşlemci ile bilinen test verisini oluşturun.
  2. API isteğini çalıştırın.
  3. Son İşlemci ile yazılan satırı sorgulayın.
  4. Sonucu JSONPath ile değişkene çıkarın.
  5. Beklenen değerleri doğrulayın veya bu değerleri sonraki istekte kullanın.
  6. Her ortam için ayrı bağlantı tanımlayarak aynı senaryoyu local ve staging ortamlarında güvenli şekilde çalıştırın.

Başlamak için Apidog'u indirin, geliştirme veritabanınıza bir MySQL bağlantısı ekleyin ve sonraki POST isteğinizin oluşturduğu satırı doğrulayan bir Son İşlemci oluşturun.

Top comments (0)