Playwright vs Cypress Karşılaştırması

Microsoft'un çoklu tarayıcı, çoklu dil E2E test motoru

VS
Cypress

Tarayıcı-içi çalışan, geliştirici deneyimi odaklı JS/TS E2E aracı

16 dk okumaAraçlar

Hızlı Karar

Net cevap yok, ama net bir çerçeve var. Çoklu tarayıcı, ücretsiz paralellik, cross-origin/iframe akışları ya da JS/TS dışında dil gerekiyorsa Playwright 2026'da varsayılan tercih. Geniş, sağlıklı bir Cypress suite'in ve Cloud yatırımın varsa, tek başına "araç farkı" bir rewrite'ı haklı çıkarmaz — component testing'te Cypress bugün daha olgun. Kademeli, kritik-akış-önce göç "hafta sonu rewrite"tan daha rasyonel.

PlaywrightCypress
Tam sonucu oku

Puan Karşılaştırması

Grafik yükleniyor...

Detaylı Puanlama

Detaylı Puanlama: Playwright ve Cypress — kategori bazında 10 üzerinden puanlar
KategoriPlaywrightCypress
Performans
8/10
7/10
Öğrenme Kolaylığı
7/10
8/10
Ekosistem
8/10
7/10
Topluluk
8/10
7/10
İş Pazarı
7/10
7/10
Gelecek
9/10
6/10

Artıları & Eksileri

Playwright

Artıları

  • Chromium, Firefox ve WebKit'i tek API ile destekler
  • Yerleşik ve tamamen ücretsiz paralel worker modeli
  • Cross-origin, iframe ve çoklu sekme mimari olarak doğal destekli
  • JS/TS yanında resmi Python, Java ve .NET bağlamaları
  • Trace Viewer'da DOM/ARIA/ekran snapshot'larını yan yana inceleme (v1.63)
  • Test Locks ile paylaşılan kaynakları güvenle paylaştırma (v1.63)
  • Apache-2.0 lisansı, çekirdek tamamen ücretsiz ve açık kaynak
  • Ağ mocking için ek yapılandırma gerektirmeyen route() API'si

Eksileri

  • Tarayıcı-içi 'Time Travel' hissi Cypress kadar doğal değil
  • Component testing paketleri (@playwright/experimental-ct-*) kaldırıldı, mimari geçiş sürecinde
  • Çoklu dil desteği ekip için öğrenme eğrisini dil bazında karmaşıklaştırabilir
  • Resmi müşteri/vaka çalışması sayfası yok, ROI kanıtı için üçüncü taraf kaynaklara bakman gerekiyor
  • Ücretli bulut servisi (Azure App Testing) fiyatlandırması şeffaf şekilde yayınlı değil

En Uygun

Çoklu tarayıcı (özellikle WebKit/Safari) doğrulaması gereken ürünlerCross-origin/SSO, iframe-ağırlıklı ödeme akışları olan uygulamalarJS/TS dışında Python/Java/.NET test mühendisi olan ekiplerBüyük CI ölçeğinde ücretsiz paralellik isteyen takımlarYeni, greenfield E2E suite kurulumları

Cypress

Artıları

  • Time Travel debug ve tanıdık DevTools ile doğal geliştirici deneyimi
  • Interaktif runner ile sıfıra yakın giriş bariyeri (JS/TS bilen ekipler için)
  • Component testing'te React/Vue/Angular/Svelte için resmi, olgun adaptörler
  • Cypress Cloud'da Test Replay ile CI hatalarını birebir tekrar oynatma
  • Resmi müşteri vaka çalışması (Indeed): %58 test süresi, %50 debug süresi azalması
  • cy.intercept() ile zengin ağ stub/assertion API'si
  • Açık kaynak App tamamen ücretsiz (MIT)
  • learn.cypress.io ile ücretsiz, resmi interaktif eğitim

Eksileri

  • Same-origin mimari kısıtı — cross-origin testler cy.origin() gerektirir
  • WebKit desteği hâlâ 'Experimental' statüde
  • Sadece JavaScript/TypeScript — başka dil bağlaması yok
  • Paralel koşum Cypress Cloud kaydına (--record) bağlı; auto cancellation ve spec prioritization Business katmanından itibaren
  • 16.0.0 ilk iki haftada dört regresyon düzeltmesi gerektirdi (üçü native network path'le ilgili)
  • Node.js 20/25 ile artık çalışmıyor — CI'da Node sürüm kontrolü şart

En Uygun

Geniş, sağlıklı ve çalışan mevcut Cypress suite'i olan ekiplerComponent-testing ağırlıklı React/Vue/Angular/Svelte projeleriJS/TS-only ekipler, dil çeşitliliği ihtiyacı olmayan takımlarTarayıcı-içi interaktif debug alışkanlığı güçlü ekiplerCypress Cloud'a (Test Replay, raporlama) zaten yatırım yapmış organizasyonlar

Kod Karşılaştırması

Playwright
// Playwright Test - Login akisi ve API mock (TypeScript)
import { test, expect } from '@playwright/test';

test.describe('Giris akisi', () => {
  test('gecerli kullanici ile giris yapar ve dashboard gorur', async ({ page }) => {
    // Network mock - ek yapilandirma gerekmiyor
    await page.route('**/api/login', async (route) => {
      await route.fulfill({
        status: 200,
        contentType: 'application/json',
        body: JSON.stringify({ token: 'test-token', user: { name: 'Ayse' } }),
      });
    });

    await page.goto('/login');
    await page.getByLabel('E-posta').fill('[email protected]');
    await page.getByLabel('Sifre').fill('guclu-sifre-123');
    await page.getByRole('button', { name: 'Giris Yap' }).click();

    // Auto-wait: locator gorunur olana kadar bekler
    await expect(page.getByText('Hos geldin, Ayse')).toBeVisible();
    await expect(page).toHaveURL('/dashboard');
  });

  test('checkout iframe icindeki odeme butonunu bulur (cross-frame)', async ({ page }) => {
    await page.goto('/checkout');

    // v1.63.0: selectorsuz frameLocator tum alt-frame agacinda arar
    const payButton = page.frameLocator().getByRole('button', { name: 'Ode' });
    await payButton.click();

    await expect(page.getByText('Odeme basarili')).toBeVisible();
  });
});

test('3 tarayicida paralel calisir (playwright.config.ts icinde tanimli)', async ({ page }) => {
  await page.goto('/');
  await expect(page).toHaveTitle(/Ana Sayfa/);
});
Cypress
// Cypress - Login akisi ve API mock (JavaScript/TypeScript)
describe('Giris akisi', () => {
  it('gecerli kullanici ile giris yapar ve dashboard gorur', () => {
    // cy.intercept ile network stub
    cy.intercept('POST', '/api/login', {
      statusCode: 200,
      body: { token: 'test-token', user: { name: 'Ayse' } },
    }).as('loginRequest');

    cy.visit('/login');
    cy.get('[data-cy=email]').type('[email protected]');
    cy.get('[data-cy=password]').type('guclu-sifre-123');
    cy.get('[data-cy=submit]').click();

    cy.wait('@loginRequest');

    // Cypress otomatik retry: eleman gorunur olana kadar bekler
    cy.contains('Hos geldin, Ayse').should('be.visible');
    cy.url().should('include', '/dashboard');
  });

  it('cross-origin odeme sayfasina yonlenir (cy.origin gerekli)', () => {
    cy.visit('/checkout');
    cy.get('[data-cy=pay-button]').click();

    // Farkli origin'e gecince cy.origin() zorunlu
    cy.origin('https://pay.example.com', () => {
      cy.get('[data-cy=confirm-payment]').click();
      cy.contains('Odeme onaylandi').should('be.visible');
    });
  });
});

// cypress.config.js — temel E2E yapilandirmasi
module.exports = {
  e2e: {
    baseUrl: 'http://localhost:3000',
    experimentalRunAllSpecs: true,
    setupNodeEvents(on, config) {
      return config;
    },
  },
};

Sonuç

Net cevap yok, ama net bir çerçeve var. Çoklu tarayıcı, ücretsiz paralellik, cross-origin/iframe akışları ya da JS/TS dışında dil gerekiyorsa Playwright 2026'da varsayılan tercih. Geniş, sağlıklı bir Cypress suite'in ve Cloud yatırımın varsa, tek başına "araç farkı" bir rewrite'ı haklı çıkarmaz — component testing'te Cypress bugün daha olgun. Kademeli, kritik-akış-önce göç "hafta sonu rewrite"tan daha rasyonel.

Ücretsiz Danışmanlık Al
SSS

Sıkça Sorulan Sorular

Çoklu tarayıcı (Chromium+Firefox+WebKit) gerekiyorsa, ücretsiz yerleşik paralellik istiyorsan ya da TS/Python/Java/.NET arası dil esnekliği gerekiyorsa Playwright 2026'da varsayılan tercih. Mevcut geniş bir Cypress suite'in, ekibin interaktif runner'a alışkınsa ve Cypress Cloud'a zaten yatırım yaptıysan geçiş tek başına 'araç farkı' ile haklı çıkmaz — kademeli göç daha rasyonel.

Giriş

E2E test aracı seçimi artık "hangisi popüler" sorusundan fazlasını gerektiriyor: iki lider araç Eylül 2026'nın ilk haftasında art arda majör sürüm yayınladı. Cypress, 1 Eylül'de v16.0.0 ile Chrome ailesinde native network interception'a geçti; üç gün sonra Playwright v1.63.0 ile Test Locks ve cross-frame locator geldi. Seçim kriterlerin bu iki sürümle güncel olmalı. Bu iki araç kökten farklı iki mimariden geliyor. Cypress tarayıcının içinden çalışır — senkronizasyon ve debug doğal, ama same-origin kısıtları (cy.origin()) yaratır. Playwright tarayıcıyı dışarıdan kontrol eder; cross-origin, çoklu sekme ve çoklu motoru (Chromium/Firefox/WebKit) doğal destekler, ama Cypress'in "Time Travel" hissini vermez. Kısa cevap mı istiyorsun? Çoklu tarayıcı, ücretsiz paralellik ve büyük CI ölçeği gerekiyorsa Playwright varsayılan tercih. Geniş bir Cypress suite'in ve Cloud yatırımın varsa, "sil baştan yaz" kararı tek başına araç farkıyla haklı çıkmaz. Detayları aşağıda görüyorsun.

Karşılaştırma Matrisi

Karşılaştırma Matrisi: Playwright / Cypress
ÖzellikPlaywrightCypress
Chromium desteğiTamTam (Chrome ailesi)
Firefox desteğiTamTam
WebKit/Safari desteğiTam (resmi motor) (Öne çıkan)Experimental
Ücretsiz yerleşik paralellikEvet (--workers) (Öne çıkan)Kısmi (ücretsiz, ama --record ile Cloud kaydı şart)
Cross-origin desteğiNative (izole context) (Öne çıkan)cy.origin() gerekli
Resmi dil desteğiJS/TS, Python, Java, .NET (Öne çıkan)Yalnız JS/TS
Component testing olgunluğuYeniden mimarileniyorOlgun, resmi adaptörler (Öne çıkan)
Debug aracıTrace Viewer + ARIA snapshotTime Travel + Test Replay (Cloud)
LisansApache-2.0MIT (App); Cloud ücretli
GitHub yıldız (2026-09-23)96.523 (Öne çıkan)51.023
Son majör sürümv1.63.0 (2026-09-04)v16.0.0 (2026-09-01) · güncel: 16.1.0
Resmi müşteri vaka sayfasıYokVar (Indeed) (Öne çıkan)
Ağ mocking API'sipage.route() / context.route()cy.intercept()
Giriş bariyeri (JS/TS ekip için)OrtaDüşük (Öne çıkan)

Derinlemesine İnceleme

Playwright

Genel Bakış

Playwright, Microsoft tarafından 2019'da açılan repoyla başlayan ve 2020'de ilk kararlı sürümüne ulaşan, açık kaynak (Apache-2.0) bir uçtan uca test framework'ü. Kurucu ekip, önceki Puppeteer/Chrome DevTools Protocol deneyiminden geliyor ve bu miras, tarayıcıyı dışarıdan CDP-benzeri bir protokolle kontrol eden mimaride görülüyor. Bu mimari, Chromium/Firefox/WebKit'i aynı API yüzeyiyle sürmeyi, izole context'lerle doğal çoklu sekme simülasyonunu ve cross-origin senaryoları özel API gerektirmeden desteklemeyi mümkün kılıyor. 4 Eylül 2026'da yayınlanan v1.63.0 ile Test Locks, selector'sız cross-frame locator arama, locator.visible() ve trace'te ARIA/DOM/ekran snapshot inceleme geldi. Çekirdek tamamen ücretsiz; Microsoft'un ayrı, isteğe bağlı bulut ölçekleme servisi (Azure App Testing) var. npm'de @playwright/test paketi altında dağıtılıyor.

Ekosistem

Paket yöneticisi
npm (@playwright/test)
Geliştirme ortamı
VS Code (resmi Playwright uzantısı)IntelliJ/WebStorm
Popüler kütüphaneler
@axe-core/playwrightplaywright-lighthouseallure-playwright
GitHub yıldızı
96,523

Cypress

Genel Bakış

Cypress, 2015'te Brian Mann tarafından kurulan Cypress.io Inc.'in geliştirdiği, MIT lisanslı açık kaynak bir uçtan uca test aracı. Temel mimari farkı: test kodu tarayıcının içinde, uygulamanla aynı event loop'ta çalışır — bu otomatik retry, Time Travel debug ve DevTools'la doğal entegrasyon sağlar, ama same-origin kısıtları getirir (cross-origin akışları cy.origin() ile yönetilir). 1 Eylül 2026'da yayınlanan v16.0.0, Chrome ailesinde native network interception'a geçti, Cypress.env() ve cy.exec()/cy.end() gibi eski API'leri kaldırdı (yerlerine cy.env() ve Cypress.expose() geldi) ve Node.js 22/24/26+ gerektirmeye başladı; ilk iki haftasında dört regresyon düzeltmesi gerekti (15 Eylül, v16.1.0). Cypress App ücretsiz; paralel koşum ve load balancing ücretsiz Starter'da da var (--record --parallel ile), auto cancellation ve spec prioritization ise Business'tan itibaren geliyor.

Ekosistem

Paket yöneticisi
npm (cypress)
Geliştirme ortamı
Cypress App (kendi interaktif runner'ı)VS Code
Popüler kütüphaneler
@testing-library/cypresscypress-axestart-server-and-test
GitHub yıldızı
51,023

Teknik Analiz

Tarayıcı Kapsamı ve Mimari Farkı

Playwright resmi dokümana göre "Chromium, WebKit ve Firefox'u Windows, Linux ve macOS'ta, yerel ya da CI'da, headless ya da headed olarak destekler, Chrome (Android) ve Mobile Safari için native mobil emülasyonla birlikte." Bu üç motor desteği mimariden geliyor — Playwright tarayıcıyı CDP-benzeri bir protokolle dışarıdan kontrol ettiği için her motoru aynı API yüzeyiyle sürer. Cypress'te tablo farklı: Chrome ailesi ve Firefox tam destekli, ama WebKit hâlâ "Experimental" statüde ve Electron kullanımdan kaldırılmış. Neden mimari — Cypress test kodu tarayıcının içinde, uygulamanla aynı event loop'ta çalışır; bu Chrome/Firefox'ta olgunlaştı ama WebKit entegrasyonu aynı seviyede değil. Pratik sonuç: gerçek Safari/iOS kullanıcı tabanı olan bir ürün test ediyorsan Playwright'ın WebKit desteği bugün daha güvenilir. Ama dikkat — WebKit, Apple'ın gerçek Safari binary'si değil; bazı Safari-özel davranışlar WebKit testinde yakalanmayabilir.

Paralellik, CI Süresi ve Maliyet

Playwright'ın dokümanı açık: "Playwright Test testleri paralel çalıştırır... birden fazla worker process başlatır... her biri kendi tarayıcısını başlatır." Bu paralellik --workers N bayrağıyla, ek bir bulut servisi olmadan, tamamen yerel ve ücretsiz çalışır. Microsoft'un ayrı ücretli bulut servisi (Azure App Testing) var ama isteğe bağlı bir ölçekleme katmanı, temel paralelliğin önkoşulu değil. Cypress'te cypress run --parallel mevcut ve fiyatlandırma tablosuna göre paralel koşum ücretsiz Starter katmanında da var (aylık 500 test sonucu, --record ile Cloud'a bağlı). Load balancing de ücretsiz katmanda: --record --parallel ile varsayılan açık. Kademeli olan yalnız auto cancellation ve spec prioritization (Business'tan itibaren). Yani paralellik ve akıllı dağıtım için bedel ödemiyorsun, ama her koşumu Cloud'a kaydetmek zorundasın. Sayısal CI maliyeti için dürüst olalım: hiçbir taraf resmi, karşılaştırmalı bir "dakika başına maliyet" benchmark'ı yayınlamıyor. Azure App Testing'in fiyat tablosu bu araştırmada doğrulanamadı; üçüncü taraf $/dakika rakamlarına resmi kaynak olmadan güvenme.

Debug Deneyimi: Trace Viewer vs Time Travel

Playwright'ın Trace Viewer'ı, kayıtlı bir test çalışmasını adım adım gezebildiğin bir GUI aracı; varsayılan trace: 'on-first-retry' ile başarısız testlerde otomatik devreye girer. 4 Eylül'de gelen v1.63.0 ile trace'e DOM/ARIA/ekran görüntüsü snapshot'ları ve "Display Aria" modu eklendi — artık görsel ekranı ve erişilebilirlik ağacını yan yana inceleyebiliyorsun. Cypress'in güçlü yanı "Time Travel" — testin her adımında DOM anlık görüntüsü alıp geri sarabilme, tanıdık DevTools içinde. Cypress Cloud'daki Test Replay bunu ileri taşıyor: CI'da başarısız bir testin DOM/network/console durumunu birebir tekrar oynatabiliyorsun. Resmi vaka çalışmasına göre Indeed, Test Replay ile debug süresini %50 azalttığını raporluyor. İkisi de güçlü ama farklı problemler çözüyor: Playwright'ın trace'i taşınabilir bir kanıt dosyası; Cypress'in Time Travel + Replay'i o anı birebir geri getirme. Ekibinin alışkanlığı hangisinin daha doğal hissettireceğini belirler.

Cross-Origin, iframe ve Çoklu Sekme

Bu kriter Cypress'in tarihsel olarak en çok eleştirilen noktası. Resmi doküman şöyle özetliyor: "Cypress tarayıcının içinden çalıştığı için, uzak uygulamanla her zaman doğrudan iletişim kurabilmesi gerekir... tarayıcılar doğal olarak bunu engellemeye çalışır." Bu kısıt yüzünden cross-origin senaryoları (ör. bir OAuth sağlayıcısına yönlenip geri dönme) özel bir API olan cy.origin() ile yönetilmesi gerekiyor — mimari bir sınırlama, her cross-origin akışında ek kod demek. Playwright'ta bu kökten farklı çözülüyor: browser.newContext() ile izole context'ler ve doğal çoklu sekme/pencere desteği mimarinin bir parçası. 4 Eylül'de gelen v1.63.0 ile bu alan güçlendi — page.frameLocator() artık selector'sız çağrıldığında **tüm alt-frame ağacında arama yapıyor**, iç içe iframe'lerde her frame'i tek tek gezmen gerekmiyor. Pratikte: SSO/OAuth'a yönlenen, ödeme iframe'i gömen ya da yeni sekmede açılan akışlar test ediyorsan, Playwright'ın mimarisi bunları ekstra API öğrenmeden karşılıyor.

Ağ Mocking, API Testi ve Dil Desteği

Her iki araç da olgun ağ mock yetenekleri sunuyor, ama ergonomi farklı. Playwright'ta hiçbir ek yapılandırma gerekmiyor: "İstek mock'lamak için hiçbir şey yapılandırmana gerek yok. Sadece context.route() / page.route() ile özel bir Route tanımla." HAR dosyalarından mock'lama da resmi destekli — prod trafiğini kaydedip testte tekrar oynatmak isteyenler için pratik. Cypress'te eşdeğer araç cy.intercept() — istek/yanıt stub'lama, URL/header/body assertion yapabiliyorsun. 16.0.0 ile Chrome ailesinde native network interception'a geçildi; bu, bazı düşük seviye header bilgilerinin artık eski davranışla aynı gelmediği anlamına geliyor — mevcut assertion'ların sessizce yanlış sonuç vermemesi için bu geçişi test etmen gerekiyor. Dil desteği net bir Playwright avantajı: "Playwright, aynı temel implementasyonu paylaşan birden fazla dilde mevcut" — JS/TS, Python (pytest), Java, .NET resmi destekli, her biri ayrı repo'da. Cypress mimarisi gereği yalnızca JS/TS'te yazılıyor; ekibinde Python/.NET ağırlıklı mühendisler varsa bu belirleyici olabilir.

Component Testing Olgunluğu

Bu, Cypress'in şu an resmi kaynaklarla desteklenen net bir üstünlüğü. Cypress'in tanımıyla: "Cypress Component Testing, bileşenlerini gerçek bir tarayıcıda doğrudan mount eder — simüle edilmiş bir DOM değil." Time Travel debug, DevTools entegrasyonu ve React/Vue/Angular/Svelte için resmi, bakımı yapılan adaptörler mevcut. Playwright tarafında durum daha hareketli: @playwright/experimental-ct-react, -ct-react17 ve -ct-vue paketleri resmi olarak kaldırıldı, artık yayınlanmıyor. Yerine framework-agnostic, JSX gerektirmeyen yeni bir mount() fixture'ı geldi. Bilinçli bir mimari değişim, ama şu an component testing'i Playwright'ta kuran bir ekip Cypress'teki kadar hazır-paket bir deneyim bulamıyor. Sonuç: ürününün büyük kısmı component-seviyesinde test edilen bir frontend ekibiysen (özellikle React/Vue/Angular çeşitliliği varsa) Cypress'in bu kriterde bugün daha olgun, resmi kaynaklı bir avantajı var. Playwright bu alanda yeniden mimarileniyor — birkaç sürüm sonra tablo değişebilir.

Göç Maliyeti: Cypress'ten Playwright'a

Playwright tarafında resmi bir "Cypress'ten Playwright'a geçiş rehberi" yok; ters yönde ise Cypress'in resmi "Migrate from Playwright" rehberi var. Yani göç dokümantasyonu simetrik değil, Playwright'a giden yolu kendin kurgulamak zorundasın. Bu araştırmada net bir gün/hafta rakamı da çıkmadı, dürüstçe "belirsiz" diyelim. Var olan yardımcı: Playwright'ın demo alan adında yayınlanan demo.playwright.dev/cy2pw dönüştürücüsü, tek dosya bazlı çalışıyor; tam otomatik bir codemod değil. Mimari fark, göçün neden mekanik bir "bul-değiştir" olmadığını açıklıyor: Cypress'in cy.get().should() zincirleri tarayıcı-içi otomatik retry'a dayanıyor; Playwright'ın page.locator().expect() API'si benzer bir "auto-wait" felsefesi paylaşsa da birebir çevrilemiyor — özellikle cy.origin() kullanan testler, custom komutlar ve component testleri elle gözden geçirilmeli. Gerçekçi yol haritası: kritik akışları önce taşı, tüm suite'i tek seferde çevirme; iki suite'i bir süre paralel çalıştır; mekanik dönüşümü codemod/AI ile hızlandır ama elle gözden geçir; custom komutları ve component testlerini son sıraya bırak. "Hafta sonu rewrite" beklentisi orta-büyük bir suite için gerçekçi değil.

Hangi Senaryoda Hangisi

Ürünün Safari/iOS kullanıcı tabanı büyük ve WebKit-özel bug'lardan korkuyorsun

Öneri: Playwright

WebKit resmi olarak tam destekli; Cypress'te hâlâ Experimental statüde. Ama WebKit ≠ gerçek Safari binary'si olduğunu unutma, kritik akışlarda gerçek cihaz testiyle destekle.

Ürünün büyük kısmı component-seviyesinde test ediliyor (React/Vue/Angular)

Öneri: Cypress

Cypress Component Testing resmi kaynaklarla olgun; Playwright'ın framework-özel paketleri kaldırılıp yeniden mimarileniyor.

SSO/OAuth ile üçüncü taraf domaine yönlenen, ödeme iframe'i gömen bir checkout akışın var

Öneri: Playwright

Cross-origin ve iframe desteği mimari olarak yerleşik; v1.63.0'daki selector'sız cross-frame locator bunu daha da güçlendirdi. Cypress'te cy.origin() ile ek kod gerekiyor.

Ekibin JS/TS-only ve tarayıcı-içi interaktif debug alışkanlığı güçlü

Öneri: Cypress

Time Travel + DevTools entegrasyonu bu ekipler için en düşük sürtünmeli deneyim; learn.cypress.io ile giriş bariyeri düşük.

CI ölçeğin büyük ve bulut hizmetine bağımlı olmadan paralellik istiyorsun

Öneri: Playwright

--workers ile yerleşik, ücretsiz ve tamamen yerel paralellik. Cypress'te paralel koşum Cypress Cloud kaydını (--record) gerektiriyor, akıllı dağıtım (load balancing) ücretsiz katmanda da çalışıyor, ama her koşum Cloud'a kaydedilmek zorunda (aylık 500 test sonucu sınırı).

Test ekibinde Python veya .NET ağırlıklı mühendisler var

Öneri: Playwright

Resmi Python, Java, .NET bağlamaları mevcut; Cypress mimarisi gereği yalnız JS/TS destekliyor.

Geniş, sağlıklı bir Cypress suite'in var ve Cypress Cloud'a (Test Replay) yatırım yaptın

Öneri: Cypress

Playwright tarafında resmi bir Cypress→Playwright rehberi yok, göç kademeli ve maliyetli; mevcut yatırımı koru, yeni kritik akışlarda Playwright'ı pilot et.

Yaygın Tuzaklar

  • Cypress 16'ya geçerken Cypress.env() ve cy.exec() kullanan testlerin kırılması

    Cypress

    Çözüm

    Yükseltmeden önce codebase'de Cypress.env() çağrılarını grep'le: hassas değerler için cy.env(['key']).then(...), hassas olmayan public config için Cypress.expose() kullan. cy.exec() çağrılarını da cy.task() ile değiştir.

  • Node.js 20 veya 25 ile CI'da Cypress 16 kurulumunun başarısız olması

    Cypress

    Çözüm

    CI pipeline'ında Node sürümünü 22.x/24.x/26.x+ olarak sabitle; upgrade öncesi .nvmrc ve CI config dosyalarını güncelle.

  • Native network path geçişinde eski cy.intercept() assertion'larının header/compression farkları yüzünden sessizce yanlış sonuç vermesi

    Cypress

    Çözüm

    16.0.0 sonrası intercept testlerini izole çalıştır, header bazlı assertion'ları özellikle gözden geçir.

  • Playwright'ta eski :visible CSS pseudo-class'a güvenip yeni locator.visible() API'sine geçmemek

    Playwright

    Çözüm

    Eski selector'lar hâlâ çalışıyor ama yeni testlerde locator.visible() kullan; mevcut testleri kademeli olarak taşı.

  • Playwright component testing'de deprecate edilen @playwright/experimental-ct-react/-vue paketlerine bağımlı kalmak

    Playwright

    Çözüm

    Yeni component testleri framework-agnostic mount() fixture'ıyla yaz; mevcut deprecated paket kullanan projeler migrate edilene kadar sabit sürümde kalabilir.

Geçiş Kılavuzu

Cypress → Playwright

Tahmini süre: Resmi bir rakam yok; orta ölçekli bir suite için haftalar-aylar süren aşamalı bir proje olarak planla, tek seferlik rewrite bekleme.
  1. 1Kritik ve yüksek riskli akışları listele, göçe onlarla başla — tüm suite'i tek seferde çevirme.
  2. 2Playwright'ı mevcut Cypress suite'inin yanına, ayrı bir CI job'ı olarak paralel çalıştırmaya başla.
  3. 3Playwright'ın demo alan adında yayınlanan demo.playwright.dev/cy2pw dönüştürücüsüyle mekanik dönüşümü hızlandır, ama her testi elle gözden geçir.
  4. 4cy.origin() kullanan cross-origin testleri ve Cypress.Commands.add() ile yazılmış custom komutları ayrı bir listeye çıkar — bunlar birebir çevrilemez.
  5. 5Component testlerini son sıraya bırak; Cypress'in bu alandaki resmi adaptörlerinin Playwright karşılığı henüz aynı olgunlukta değil.
  6. 6İki suite'i bir süre (en az birkaç sprint) yeşil tutarak paralel işlet, yeni regresyon riskini izle.
  7. 7Cypress suite'ini kademeli olarak devre dışı bırak, CI süresini ve flaky test oranını göç öncesi/sonrası karşılaştır.
  8. 8Ekip için Playwright'a özel eğitim bütçesi ayır — locator/auto-wait felsefesi benzer ama API farklı.

Gelecek Öngörüsü

Playwright

Playwright'ın component testing'i framework-agnostic mount() fixture'ıyla yeniden mimarileniyor (@playwright/experimental-ct-* kaldırıldı); Test Locks ve gelişmiş trace/Perfetto araçları v1.63'ten sonra da aktif geliştirme kanalında sürüyor (npm next tag). Kaynak: https://playwright.dev/docs/test-components, https://github.com/microsoft/playwright/releases

Cypress

Cypress 16.x hattı native network interception geçişini olgunlaştırmaya devam ediyor (16.1.0'daki regresyon düzeltmeleri bunun kanıtı); AI destekli 'Test Generation' (Cypress App'te doğal dil istemiyle test üretimi) dört planın hepsinde var ama kotalı: Starter 100 prompt çalıştırma/ay, Team 9k/yıl, Business 24k/yıl, Enterprise 60k/yıl. Kaynak: https://docs.cypress.io/app/references/changelog, https://www.cypress.io/pricing

Altın Bilgi

En değerli çıkarım araç seçiminden çok bir "taze sürüm tuzağı"nı fark etmekte yatıyor. Cypress 16.0.0, 1 Eylül'de köklü bir mimari değişiklikle geldi ve ilk iki haftasında (16.1.0'a kadar) dört ayrı regresyon düzeltmesi gerektirdi: spec'lerin asılı kalması, service worker ele geçirmesi, blockHosts'un uygulanmaması ve Windows'ta headless Electron pencere boyutu. "En yeni sürüm en iyisidir" varsayımının production CI'da nasıl kırıldığının somut bir örneği. Pratik ders: majör bir sürüm geçişini CI'ın tamamına yaymadan önce en az bir patch döngüsü bekle ya da izole bir branch'te birkaç gün çalıştır. Changelog'u "ne geldi" değil "ne değişti, beni nasıl etkiler" diye okumaya alış.

İlgili Blog Yazıları

Tüm Yazıları Gör

İlgili Projeler

Tüm Projeleri Gör

İlgili İçerik