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ı okuUç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ı okuEntegrasyon Testi ve Uçtan Uca Test karşılaştırması
| Özellik | Entegrasyon Testi | Uçtan Uca Test |
|---|---|---|
| Kapsam | Birkaç bileşen ve aralarındaki bağlantılar | Arayüzden veritabanına bütün uygulama |
| Giriş noktası | Bir fonksiyon, modül ya da API endpoint'i | Gerçek ya da headless bir tarayıcı üzerinden kullanıcı arayüzü |
| Ortam | Yalnızca gereken parçalar; çoğu zaman bir container içinde veritabanı | Production'a yakın, eksiksiz bir kurulum |
| Hız | Test başına milisaniyeler ile saniyeler | Test başına saniyeler ile dakikalar |
| Sayısı | Çok; test piramidinin ortasında | Az; en kritik akışlar için |
| Başarısız olduğunda | Küçük bir alanı işaret eder | Bir 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çlar | Testcontainers ile Jest, pytest ya da JUnit | Playwright, 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
// 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);
});// 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.