Otomasyon QAQA Otomasyon Mühendisi

Otomatik testleri CI/CD pipeline'larına nasıl entegre ederiz ve bunun amacı nedir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

Otomatik testlerin CI/CD sürecine entegrasyonu, her kod değişikliği sırasında hataların erken tespit edilmesini sağlar. Bu, modern yazılım geliştirme süreçleri ve ürünün kararlılığı için kritik öneme sahiptir.

Soru Tarihi: Geleneksel olarak otomatik testler manuel olarak veya ayrı görevlerle başlatılıyordu. Sürekli entegrasyon (CI, Continuous Integration) ve sürekli dağıtım (CD, Continuous Deployment) kavramının ortaya çıkmasıyla, her commit sırasında tüm testlerin otomatik olarak başlatılması ihtiyacı doğmuştur. Şu anda Jenkins, GitLab CI/CD, GitHub Actions, TeamCity ve benzeri sistemler yaygındır.

Sorun: Otomatik testlerin entegrasyonu olmadan hatalar geç tespit edilir: geliştirici sorunu fark etmeyebilir ve bu, üretime geçebilir. Manuel başlatma, sürümlerin gecikmesine neden olur ve her değişikliğin kalitesi hakkında tam bir güven sağlamaz.

Çözüm: Otomatik testlerin CI/CD'ye entegrasyonu:

  • Her merge, pull request veya dağıtımda regresyon testlerini otomatik olarak başlatmayı sağlar,
  • Anlık geri bildirim almayı sağlar,
  • Hangi commit'in fonksiyonelliği bozduğunu hızlı bir şekilde belirlemeyi mümkün kılar.

Bunun için testler genellikle pipeline'da ayrı görevler olarak düzenlenir: genellikle birim testleri, entegrasyon, UI ve yük testleri için aşamalar vardır. .gitlab-ci.yml dosyasından bir örnek:

stages: - test - deploy unit_test: stage: test script: - npm run test:unit ui_tests: stage: test script: - npm run test:ui

Ana özellikler:

  • Her değişiklikte otomatik test yürütme
  • Test türüne göre süreçlerin esnek ayarlanması
  • Raporlama ve kalite analizi imkanı

Hileli Sorular.

Otomatik testlerin CI/CD'ye entegrasyonu geliştirme sürecini yavaşlatır mı?

Hayır, doğru yapılandırılmış bir pipeline, yalnızca gerekli testlerin başlatılmasını sağlamak için paralelizm, izole ortamlar ve tetikleyiciler kullanır — bu, hataların erken tespiti sayesinde sürümlerin hızlanmasını sağlar.

Pipeline'ın her aşamasında tüm otomatik testlerin çalıştırılması gerekir mi?

Hayır, genellikle erken aşamalar (örneğin, pull request'ler) hızlı kontroller (linters ve birim testleri) kullanırken, tam regresyon otomatik testleri yalnızca sürümden önce veya gece yapımında yapılır.

CI/CD'de sadece otomatik testlerle manuel regresyonların göz ardı edilmesi mümkün müdür?

Tavsiye edilmez - otomasyon tekrarlanan senaryolar için etkilidir, ancak karmaşık durumlar ve kullanıcı deneyimi testleri hâlâ manuel kontrol gerektirir.

Yaygın Hatalar ve Anti-Paternerler

  • Her commit'te testlerin tümünü çalıştırma, değişiklik türünü dikkate almadan (sadece ilgili olanları çalıştırma yerine)
  • Hataları göz ardı etme: pipeline'daki kırmızı testlere “alışma” durumu
  • Yapıyı yavaşlatan optimize edilmemiş testler

Hayattan Bir Örnek

Olumsuz Durum

Projede tüm otomatik testler her commit'te çalıştırılmaktaydı, pipeline 40 dakikaya kadar uzanıyordu, geliştiricilerin kendi dallarını birleştirmek için testlerin bitmesini beklemesi gerekiyordu, bu da çatışma durumları ve sürüm gecikmelerine neden oluyordu.

Artılar:

  • Maksimum test kapsamı

Eksiler:

  • Geri bildirim süresinde önemli bir artış, “dondurulmuş” dağıtımlar
  • CI/CD altyapısında aşırı yük

Olumlu Durum

Görevlerin ayrımıyla bir pipeline tasarlandı: özellik dallarında yalnızca hızlı testler çalıştırılırken, tam regresyon stage/prod'da çalıştırıldı. Hatalar ve raporlar botlar tarafından toplandı, ekip hatalar hakkında bildirim aldı ve hızlı bir şekilde tepki verdi.

Artılar:

  • Hızlı geri bildirim, bekleme süresinin minimize edilmesi
  • Kritik hatalara odaklanma

Eksiler:

  • Testlerin bölünmesi ve pipeline’ın ayarlanması mantığını düzeltme gerekliliği