Ana içeriğe geç

Yan yana

Entegrasyon TestivsUçtan Uca Test

Entegrasyon testi ile uçtan uca test arasındaki fark nedir?

Güncellendi 2 dk okuma8 fark

Kısaca

Entegrasyon testi, kod ve veritabanı gibi birkaç bileşenin birlikte çalıştığını denetler; uçtan uca test ise tüm uygulamada tam bir kullanıcı akışı yürütür.

Entegrasyon Testi

Entegrasyon testi, kod, veritabanı ve API gibi bir sistemin birkaç parçasının birlikte doğru çalışıp çalışmadığını kontrol eden otomatik bir testtir.

Entegrasyon Testi sayfasını oku

Uçtan Uca Test

Uçtan uca test, kullanıcı arayüzünden veritabanına ve geri dönüşe kadar tam bir kullanıcı yolculuğunu uygulamanın tamamında çalıştıran otomatik bir testtir.

Uçtan Uca Test sayfasını oku

Entegrasyon Testi ve Uçtan Uca Test karşılaştırması

ÖzellikEntegrasyon TestiUçtan Uca Test
KapsamBirkaç bileşen ve aralarındaki bağlantılarArayüzden veritabanına bütün uygulama
Giriş noktasıBir fonksiyon, modül ya da API endpoint'iGerçek ya da headless bir tarayıcı üzerinden kullanıcı arayüzü
OrtamYalnızca gereken parçalar; çoğu zaman bir container içinde veritabanıProduction'a yakın, eksiksiz bir kurulum
HızTest başına milisaniyeler ile saniyelerTest başına saniyeler ile dakikalar
SayısıÇok; test piramidinin ortasındaAz; en kritik akışlar için
Başarısız olduğundaKüçük bir alanı işaret ederBir akışın bozulduğunu gösterir, ama tam olarak nerede olduğunu değil
Kararsızlık (flakiness)Düşük ile orta arasıBütün test türleri arasında en yüksek
Tipik araçlarTestcontainers ile Jest, pytest ya da JUnitPlaywright, Cypress ya da Selenium

Fark, açıklamalı

Entegrasyon testi, bir sistemin iki ya da daha fazla parçasının doğru şekilde birlikte çalıştığını doğrular: bir API rotası ile veritabanı, bir servis ile bir mesaj kuyruğu ya da HTTP üzerinden konuşan iki servis gibi. Uçtan uca (E2E) test ise kayıt olmak ya da ödeme yapmak gibi eksiksiz bir görevi bir kullanıcının yaptığı gibi denetler; genellikle çalışan uygulamada gerçek bir tarayıcıyı yöneterek arayüzden veritabanına ve geri gider.

Fark kapsamdadır. Entegrasyon testi kodu ya da bir endpoint'i doğrudan çağırır, yalnızca ihtiyaç duyduğu parçaları, çoğu zaman bir container içindeki test veritabanını kurar ve bir yanıt ile tablodaki yeni bir satır gibi sonuçları denetler. E2E test ise bütün sistemi production'a yakın bir ortamda başlatır ve ekranda neyin göründüğünü denetler; böylece ön yüzdeki, yapılandırmadaki ve servisler arasındaki bağlantılardaki sorunları da yakalar.

Bu daha geniş erişimin bir bedeli vardır. E2E testlerin her biri saniyeler ya da dakikalar sürer, eksiksiz bir ortam gerektirir ve zamanlama ya da test verisi gibi değişiklikle ilgisiz nedenlerle daha sık başarısız olur. Entegrasyon testleri daha hızlıdır ve hata ayıklaması daha kolaydır, çünkü bir başarısızlık daha küçük bir alanı işaret eder. Test piramidi tabana çok sayıda birim testi, ortaya daha az entegrasyon testi, tepeye de en kritik akışlar için az sayıda E2E test koyar.

Sık yapılan bir yanlış, E2E testlerin daha çok şeyi kapsadıkları için entegrasyon testlerinin yerini alabileceğini düşünmektir. Bir akışın çalıştığını kanıtlarlar, ama biri başarısız olduğunda sorunun nerede olduğunu nadiren söylerler; iyi bir test paketi ikisini de kullanır. Terimler pratikte de karışır: tamamen deploy edilmiş bir sisteme karşı tarayıcı olmadan çalışan bir API testine bazı ekipler entegrasyon testi, bazıları uçtan uca test der.

Hangisini kullanmalısınız?

Entegrasyon Testi şu durumlarda doğru seçim:

  • Kodunuzun bir veritabanı, kuyruk ya da API ile doğru konuştuğunu denetlemek istiyorsunuz.
  • Hatalar ve uç durumlar dahil pek çok durum için hızlı geri bildirim gerekiyor.
  • Doğrudan bozuk sınırı işaret eden başarısızlıklar istiyorsunuz.

Uçtan Uca Test şu durumlarda doğru seçim:

  • Giriş, kayıt ya da ödeme gibi iş açısından kritik bir akış var.
  • Ön yüzün, arka yüzün ve yapılandırmanın birlikte çalıştığının kanıtına ihtiyacınız var.
  • Hiç görünmeyen bir buton gibi yalnızca gerçek bir tarayıcının gösterdiği sorunları yakalamak istiyorsunuz.

Bir siparişi API üzerinden ve tarayıcı üzerinden denetlemek

Entegrasyon Testijavascript
// Integration test: call the route, check the database
test("POST /orders saves the order", async () => {
  const res = await request(app)
    .post("/orders")
    .send({ productId: 7, quantity: 2 });
  expect(res.status).toBe(201);
  const order = await db.orders.findById(res.body.id);
  expect(order.quantity).toBe(2);
});
Uçtan Uca Testjavascript
// End-to-end test: a real browser, the whole app (Playwright)
test("a customer can place an order", async ({ page }) => {
  await page.goto("/products/7");
  await page.getByRole("button", { name: "Add to cart" }).click();
  await page.getByRole("link", { name: "Checkout" }).click();
  await page.getByRole("button", { name: "Place order" }).click();
  await expect(page.getByText("Thank you for your order")).toBeVisible();
});

Sık sorulan sorular

API testi entegrasyon testi mi, uçtan uca test mi?

Kapsama bağlı. Bir test veritabanıyla çalışan tek bir servisi çağıran test bir entegrasyon testidir; deploy edilmiş her servisten bir istemcinin geçeceği gibi geçen test ise uçtan uca teste daha yakındır, yalnızca tarayıcısızdır.

Kaç tane uçtan uca testim olmalı?

Az: bozulduğunda en çok zarar verecek giriş ve ödeme gibi akışları kapsayacak kadar. Geri kalan her şeyi birim ve entegrasyon testleriyle denetlemek daha ucuz ve daha güvenilirdir.

Entegrasyon testleri harici servisleri mock'lamalı mı?

Size ait olmayanı, örneğin bir ödeme sağlayıcısını mock'layın; veritabanınız gibi size ait olan için gerçeğini kullanın. Bu gerçek bağlantıyı test etmek, entegrasyon testinin asıl amacıdır.

Daha fazla

Ayarlar