Dış hizmetlerle testlerin izolasyonu, güvenilir otomasyonun zorunlu bir şartıdır.
Sorunun Tarihi: Erken otomasyon sistemleri, sıklıkla ya erişilemeyen ya da beklenmedik veriler döndüren dış API'lere ve DB'lere çarpıştı. Testlerin izolasyonu olmadan sonuçlar tekrar üretilemez: flicker, dış sorunlar nedeniyle çökmeler, rastgele hatalar.
Sorun:
Çözüm:
Dış API'lerin yanıtlarını simüle eden yerel "mock" ve "stub" kullanımı. Popüler olanlar arasında WireMock (Java), httpmock (Python), MockServer, TestContainers bulunmaktadır.
Her testten önce temizlenip yeniden doldurulabilen in-memory çözümleri veya fixture'lar ile DB'nin taklit edilmesi.
Test verisi ID'lerinin değişkenlere çıkarılması, böylece testlerin paralel çalışabilmesi ve birbiriyle "çakışmaması".
import requests BASE_URL = "http://localhost:1080/api" def test_order_creation(): mock_response = {"orderId": 12345, "state": "created"} # Gerçek testlerde yanıt mock sunucusu dönecek # Burada requests.post çağrısı ve assert ...
Anahtar özellikler:
Her durumda gerçek hizmetler üzerinden entegrasyon testleri yapmak zorunlu mu?
Hayır. Düzenli olarak mock/stub kullanılabilir ve entegrasyon testleri ayrı, daha az sık ve kontrol altında çalıştırılabilir.
Gerçek dış API ile yapılan testler her zaman daha güvenilir sonuçlar verir mi?
Hayır. Aksine, daha az stabildirler, ortak tarafta değişiklikler nedeniyle çökerler. Sürekli flicker testleri, pipeline kalitesini bozar.
Dış hizmetlerle paralel otomatik testler için aynı test verilerini kullanmak mümkün mü?
Hayır. Bu, çakışmalara, "yarışmalara" ve istikrarsızlığa yol açabilir. Kimlikler ve durum, test/akış başına benzersiz olmalıdır.
Şirkette tüm otomatik testlerin gerçek üçüncü taraf API'leri (ödeme geçidi) kullanılarak hızlı bir şekilde çalıştırılması kararlaştırıldı. Birkaç kez testler yasaklandı, sınırlar geldi, erişimi geri kazanmak zorunda kaldılar, veriler "canlı" raporlara akıyor, yanlış kez tetiklenme problemine yol açıyordu.
Artılar:
Eksiler:
MockServer ve sahte bir in-memory DB ayarlandı. Her testten önce durum sıfırlandı, veriler benzersiz oldu. Gerçek entegrasyon testleri ayrı ve daha az sık yapıldı.
Artılar:
Eksiler: