SmartestQADocs
VERİTABANI

Database (JDBC) Step

Veritabanına doğrudan bağlanın, SQL sorguları çalıştırın. Test data setup, backend doğrulama ve cleanup işlemleri için.

Video yakında eklenecek

Database Step Nedir?

Database Step, JDBC üzerinden veritabanlarına bağlanıp SQL sorguları çalıştırmanızı sağlar. UI'dan yapılan işlemlerin backend'e doğru yansıyıp yansımadığını kontrol edebilir, test öncesi data hazırlayabilirsiniz.

MySQL

PostgreSQL

Oracle

SQL Server

Data Doğrulama

UI işlemi DB'ye yansıdı mı?

Test Data Setup

Test öncesi veri hazırla

Cleanup

Test sonrası temizlik

Ne Zaman Kullanmalısın?

Kullan ✓

  • • UI'dan kayıt oluşturdun, DB'de var mı kontrol et
  • • Test öncesi kullanıcı/sipariş verisi hazırla
  • • Unique constraint test et (aynı email 2 kez)
  • • Soft delete kontrolü (is_deleted flag)
  • • Test sonrası oluşturulan veriyi temizle
  • • Kompleks veri senaryoları için bulk insert

Kullanma ✗

  • • API varsa ve yeterliyse (API kullan)
  • • Production veritabanında (tehlikeli!)
  • • Sadece UI ile test edilebilen durumlar
  • • NoSQL veritabanları (MongoDB vb.)

Bağlantı Kurulumu

Project Settings → Database Connections bölümünden veritabanı bağlantılarınızı tanımlayın. Test step'lerinde bu bağlantıları seçerek kullanabilirsiniz.

JDBC Connection String Örnekleri

MySQL
jdbc:mysql://hostname:3306/database_name
PostgreSQL
jdbc:postgresql://hostname:5432/database_name
Oracle
jdbc:oracle:thin:@hostname:1521:SID
SQL Server
jdbc:sqlserver://hostname:1433;databaseName=database_name

Güvenlik: Veritabanı credentials'larını Secret tipinde Global Parameter olarak saklayın. Loglarda ve raporlarda maskelenir.

Gerçek Senaryo Örnekleri

Senaryo 1: Kullanıcı Kaydı Doğrulama

UI'dan kayıt ol, DB'de kontrol et

🎯 Kullanım Durumu: Register formunu doldurdun, "Kayıt Başarılı" mesajı geldi. Ama veritabanına gerçekten yazıldı mı?

1 UI: Register form doldur, submit et
2 Assertion: "Kayıt Başarılı" mesajı görünür
3 Database Step:
SELECT id, email, created_at 
FROM users 
WHERE email = '{{test_email}}'

Sonuç 1 satır dönmeli. id değerini user_id parametresine kaydet.

Senaryo 2: Test Öncesi Data Hazırlama

Sipariş detay sayfasını test etmek için sipariş oluştur

🎯 Kullanım Durumu: "Sipariş Detay" sayfasını test edeceksin ama önce bir sipariş lazım. UI'dan sipariş vermek 15 step, DB'ye INSERT 1 step!

INSERT INTO orders (user_id, total_amount, status, created_at)
VALUES ({{user_id}}, 299.99, 'pending', NOW());

-- Son eklenen ID'yi al
SELECT LAST_INSERT_ID() as order_id;

order_id'yi kaydet, sonra {{base_url}}/orders/{{order_id}} sayfasına git.

Senaryo 3: Soft Delete Doğrulama

Silinen kayıt gerçekten soft delete mi?

🎯 Kullanım Durumu: UI'dan adresi sildin. Ama sistem soft delete kullanıyor, yani kayıt silinmemeli sadece is_deleted=1 olmalı.

SELECT id, is_deleted, deleted_at 
FROM addresses 
WHERE id = {{address_id}}

Beklenen Sonuç:

id: 456 | is_deleted: 1 | deleted_at: 2025-01-09 14:30:00

Senaryo 4: Duplicate Email Kontrolü

Aynı email ile 2 kayıt olmamalı

🎯 Kullanım Durumu: Zaten kayıtlı bir email ile tekrar kayıt olmaya çalışıyorsun. Sistem hata vermeli.

1 Database: Önce bu email'in var olduğundan emin ol
SELECT COUNT(*) as count FROM users WHERE email = '{{test_email}}'
-- Sonuç: count = 1 (zaten var)
2 UI: Aynı email ile kayıt formunu doldur
3 Assertion: "Bu email zaten kayıtlı" hatası görünmeli

Senaryo 5: Test Sonrası Cleanup

Oluşturulan test verisini temizle

🎯 Kullanım Durumu: Test sırasında oluşturulan kullanıcı ve siparişler DB'de kalmasın. Her test temiz başlasın.

-- Test kullanıcısının siparişlerini sil
DELETE FROM order_items WHERE order_id IN (
    SELECT id FROM orders WHERE user_id = {{test_user_id}}
);

DELETE FROM orders WHERE user_id = {{test_user_id}};

-- Test kullanıcısını sil
DELETE FROM users WHERE id = {{test_user_id}};

Tip: Cleanup step'lerini Testcase'in Teardown bölümüne ekle. Test PASS veya FAIL olsa da çalışır.

Senaryo 6: Pagination Test için Bulk Insert

100 ürün oluştur, sayfalama test et

🎯 Kullanım Durumu: Ürün listesi pagination'ını test edeceksin. Ama test ortamında sadece 5 ürün var, 100 lazım.

-- 100 test ürünü ekle
INSERT INTO products (name, price, category_id, created_at)
SELECT 
    CONCAT('Test Product ', n),
    ROUND(RAND() * 1000, 2),
    1,
    NOW()
FROM (
    SELECT a.N + b.N * 10 + 1 as n
    FROM (SELECT 0 AS N UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 
          UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) a,
         (SELECT 0 AS N UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 
          UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) b
) numbers
WHERE n <= 100;

Sonuç İşleme

Query Sonucunu Kullanma

SELECT sorgusu sonucunda dönen veriler JSON formatında saklanır ve sonraki step'lerde kullanılabilir.

Örnek Sorgu:

SELECT id, email, status FROM users WHERE id = 123

Dönen Sonuç (JSON):

[
  {
    "id": 123,
    "email": "user@test.com",
    "status": "active"
  }
]

Değerlere Erişim

Expression Açıklama Sonuç
{{db_result[0].id}} İlk satırın id'si 123
{{db_result[0].email}} İlk satırın email'i user@test.com
{{db_result.length}} Toplam satır sayısı 1
Row Count Assertion
{{db_result.length}} == 1
Global Parameter'a Kaydet
{{db_result[0].id}} → user_id

Sık Sorulan Sorular

Production veritabanına bağlanabilir miyim?

Kesinlikle önermiyoruz! Sadece test/staging ortamlarında kullanın. Yanlışlıkla DELETE çalıştırırsanız geri dönüşü olmaz. Read-only kullanıcı bile riskli olabilir.

Connection timeout alıyorum, ne yapmalıyım?

Veritabanı sunucusunun Agent'ın IP'sinden erişime açık olduğundan emin olun. Firewall kurallarını kontrol edin. VPN gerekiyorsa Agent'ın VPN'e bağlı olması gerekir.

Transaction kullanabilir miyim?

Her Database Step kendi connection'ını açar ve kapatır. Multi-step transaction için tüm SQL'leri tek bir step'te çalıştırın veya stored procedure kullanın.

Stored Procedure çağırabilir miyim?

Evet! CALL procedure_name(param1, param2) syntax'ı ile stored procedure'leri çağırabilirsiniz.