4 puan yazan GN⁺ 2024-02-28 | 1 yorum | WhatsApp'ta paylaş
  • Docker konteynerlerinde çalıştırılabilen veritabanları, mesaj aracısı sistemleri, web tarayıcıları ve daha fazlasını sunan açık kaynaklı bir framework
  • Karmaşık ortam kurulumu veya sahte nesneler (mock) gerekmez; test bağımlılıkları kodla tanımlanır ve test çalıştırıldığında konteynerler oluşturulup silinir
  • Çeşitli dilleri ve test framework'lerini destekler; başlamak için yalnızca Docker yeterlidir
  • Modüller: Konteynerleştirilebilen her şeyi test edin
    • Veritabanları, mesaj aracıları ve daha fazlası için 50'den fazla modülle çeşitli bileşenler test edilebilir.
  • Desteklenen diller: Java, Go, .NET, Node.js, Python, Rust, Haskell, Ruby, Clojure, Elixir ve diğer birçok popüler dil için Testcontainers implementasyonları bulunur.

Kullanım senaryoları: Testcontainers nasıl yardımcı olabilir

  • Veri erişim katmanı entegrasyon testleri: Konteynerleştirilmiş veritabanı örnekleri kullanarak veri erişim katmanı kodunu test etme
  • UI/kabul testleri: Selenium ile uyumlu konteynerleştirilmiş web tarayıcıları kullanarak otomatik UI testleri çalıştırma
  • Uygulama entegrasyon testleri: Veritabanı, mesaj kuyruğu, web sunucusu gibi bağımlılıklarla uygulamayı kısa ömürlü test modunda çalıştırarak zengin etkileşim ve keşif test ortamı sağlama

GN⁺ görüşü

  • Testcontainers, geliştiricilerin gerçek ortama benzer koşullarda test yapabilmesini sağlayarak yazılım kalitesinin artırılmasına katkı sağlar.
  • Gerçek bağımlılıklarla yapılan testler, sahte nesne kullanan testlere göre daha doğru sonuçlar sunabilir; ancak karmaşık sistemlerde kurulum ve yönetim zor olabilir.
  • Testcontainers'a benzer işlevler sunan diğer projeler arasında Docker Compose ve Kubernetes Minikube yer alır; bunlar da geliştirme ortamında testleri destekleyen araçlar olarak kullanılabilir.
  • Testcontainers kullanmaya başlarken Docker hakkında belirli bir anlayış gerekir; ayrıca konteyner yönetimi ve ağ yapılandırması konusunda teknik bilgi gerekebilir.
  • Bu teknolojinin sağlayabileceği avantajlar, geliştirme ve test ortamları arasında tutarlılık ile test güvenilirliğinin artmasıdır; buna karşılık Docker ortamına bağımlılık ve bunun getirdiği karmaşıklık dezavantaj olabilir.

1 yorum

 
GN⁺ 2024-02-28
Hacker News yorumları
  • Birinci yorumun özeti:

    • Testcontainers’a yönelik bu kadar büyük övgüyü beklemiyordu.
    • Docker kullanmayan bir ortamdan geliyorsanız cazip görünebilir.
    • Pek çok kullanım senaryosunda faydalı olsa da, diğer konteyner tabanlı iş akışlarıyla iyi çalışmasını sağlamak zordur.
    • Testcontainers, temel işlevi olarak Docker CLI’ye özel shell çağrılarını kullanan bir kütüphane; bu da başka konteyner tabanlı iş akışları devreye alındığında sorun ve karmaşıklık yaratır.
    • Yalnızca host makinede çalıştığını ve Docker’la ilgili başka işlerin olmadığını varsayma eğilimindedir; bu yüzden çoğu zaman Docker dışı ortamlara yönelik kütüphanelerden daha kötü, hatta çok daha kötü olabilir.
  • İkinci yorumun özeti:

    • Testcontainers, entegrasyon testleri için oyunun kurallarını değiştiren bir araçtır.
    • Dile özgü Docker API’leri sağlayarak konteynerleri kolayca ayağa kaldırmayı ve bağlantıya hazır olup olmadıklarını kontrol etmeyi mümkün kılar.
    • Tüm yeni projelerinde entegrasyon testleri için Testcontainers kullanıyor.
    • CI yapılandırması linting, build, unit testleri ve Testcontainers kullanan entegrasyon testlerini içeriyor.
    • Dil bağlayıcıları, veritabanı işlemleri için yararlı yardımcı fonksiyonlar sunuyor.
  • Üçüncü yorumun özeti:

    • docker-compose.yml kullanmanın neden daha iyi olmadığını anlamıyor.
    • Gerekli konteynerler arasında karmaşık bağımlılıklar olduğunda Testcontainers nispeten zayıf kalıyor.
    • Beş yıl önce kullanmış ama bugün durumun çok daha iyi hale gelmiş olabileceğini düşünüyor.
  • Dördüncü yorumun özeti:

    • Gerçek veritabanı/Elasticsearch/Redis/Varnish gibi bileşenleri kullanan entegrasyon testlerini çok değerli buluyor.
    • Testcontainers, test paketi boyunca yeni bir Elasticsearch indeksi oluşturup kapatma gibi işleri onun yerine yapıyor.
    • Uygulama işlevlerinin mümkün olduğunca çoğunu uçtan uca entegrasyon tarzı testlerle kapsama stratejisini tercih ediyor.
    • Unit testlerini yalnızca açık giriş/çıkış çiftleri olan kod bölümleri için, mock nesnelerini ise kontrol edemediği harici API çağrıları gibi durumlar için kullanıyor.
  • Beşinci yorumun özeti:

    • Yaklaşık yedi yıl önce Go dili için bir Testcontainers aracı olan conex’i yazmış.
    • Go’nun resmi test framework’ü ile birinci sınıf entegrasyon sağlıyor.
  • Altıncı yorumun özeti:

    • Her test için yeni ve temiz bir tarayıcı örneği sağlamanın yavaş olduğunu düşünen bir görüş var.
    • Zaten konteyner dünyasına yatırım yaptıysanız birkaç ek konteyneri daha kabul etmek mantıklıdır.
    • Aksi durumda ek karmaşıklık veya hantallığa kıyasla çok az fayda sağlar.
  • Yedinci yorumun özeti:

    • Testcontainers’ı inceleyip kendi sürümünü yapmış.
    • Docker, sızıntılı bir soyutlamadır ve testlerin çeşitli ortamlarda çalıştırılması gerekir.
    • Ağ davranışı; Mac’te, Linux VM’de ve Docker soketi mount edilmiş halde Linux VM içindeki Docker konteynerinde tamamen farklıdır.
    • Testleri paralel çalıştırmak ve her teste uygun log çıktısı almak istiyor.
    • Testcontainers’ın bu sorunları çözüp çözmediğinden emin değil ama asıl zorluğun ayrıntılarda olduğunu öğrenmiş.
  • Sekizinci yorumun özeti:

    • Yerel test ortamını docker-compose ile oluşturuyor.
    • Testcontainers, Docker Compose sözdizimini öğrenmeden Docker ortamını tanımlamayı sağlayan bir programlama dili soyutlaması gibi görünüyor.
    • Test ortamının kullanıma hazır olup olmadığını anlamak için yine de Docker networking, bağımlılıklar ve health check’ler hakkında bilgi sahibi olmak gerekiyor.
  • Dokuzuncu yorumun özeti:

    • Mock nesnelere veya karmaşık ortam yapılandırmalarına gerek yok.
    • Test bağımlılıklarını kodla tanımlayıp testi çalıştırdığınızda konteynerler oluşturulup siliniyor.
    • Konteynerlerle entegrasyon testi çalıştırabiliyor olmanın unit testlere artık gerek olmadığı anlamına geldiğini düşünmek bir yanılgıdır.
    • Docker konteynerini yapılandırmak kolaydır ama konteyneri başlatmak zahmetli ve yavaştır.
  • Onuncu yorumun özeti:

    • Java’nın logosunda neden Duke kullanıldığı soruluyor.