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.
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
statusalanı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:
- Testi önceki çalıştırmalardan kalan verilere bağımlı kılmamak için kesin bir başlangıç durumu oluşturmak
- API'nin yazdığını iddia ettiği satırı okuyarak kalıcı veriyi doğrulamak
- 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.internalveya127.0.0.1 -
Port: MySQL için
3306 - Kullanıcı Adı
- Şifre
-
Veritabanı Adı: Örneğin
shop
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 '...';
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:
- Ön İşlemciler bölümünü açın.
- Veritabanı İşlemcisi Ekle seçeneğinin üzerine gelin.
- Veritabanı işlemi seçeneğini seçin.
- Adı
seed customeryapın. - MySQL bağlantınızı seçin.
- 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';
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 }]
}
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:
-
Son İşlemciler bölümünü açın.
- TASARIM Modu'nda: Çalıştır sekmesi
- HATA AYIKLAMA Modu'nda: İstek sekmesi
- Son İşlemci Ekle > Veritabanı işlemi seçeneğini seçin.
- Adı
verify order rowyapın. - Veritabanı bağlantınızı seçin.
- Aşağıdaki SQL sorgusunu ekleyin.
SELECT id, status, total_cents
FROM orders
WHERE id = {{order_id}};
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
İ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
Bu adımın yakaladığı hata örneği şudur:
- API
201 Createddö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}}
Önce sipariş isteğinin Son İşlemcisine şu sorguyu ekleyin:
SELECT fulfillment_ref
FROM orders
WHERE id = {{order_id}};
Ardından sonucu değişkene çıkarın:
-
Değişken Adı:
fulfillment_ref - JSONPath İfadesi:
$[0].fulfillment_ref
Sonraki istekte doğrudan şu değişkeni kullanabilirsiniz:
{{fulfillment_ref}}
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" }
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(...)
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:*
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}}
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 = paidise sevkiyat akışına devam edin. -
status = pendingise ö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:
localstaging- 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 ...
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:
-
stagingseçildiğindeSELECTsorgunuz staging veritabanında çalışır. -
localseç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>
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
Parametreler:
-
-t: Test senaryosu kimliği -
-e: Ortam kimliği -
-r: Raporlayıcı
Kullanılabilir raporlayıcılar:
cli
html
junit
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
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}};
JSONPath:
$[0].fulfillment_ref
Sonraki istekte:
{{fulfillment_ref}}
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 '...';
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:
- Ön İşlemci ile bilinen test verisini oluşturun.
- API isteğini çalıştırın.
- Son İşlemci ile yazılan satırı sorgulayın.
- Sonucu JSONPath ile değişkene çıkarın.
- Beklenen değerleri doğrulayın veya bu değerleri sonraki istekte kullanın.
- 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)