Unit Test vs Integration Test
Das Fundament der iOS-Teststrategie: Unit-Tests, die eine Einheit isolieren, oder Integrationstests, die das Zusammenspiel von Komponenten prüfen? Wie baut man die Testpyramide richtig auf?
Microsofts Multi-Browser-, Multi-Sprachen-E2E-Testmotor
Im Browser laufendes, auf Entwicklererfahrung fokussiertes JS/TS-E2E-Tool
Es gibt keine eindeutige Antwort, aber einen klaren Rahmen. Wenn du mehrere Browser, kostenlose Parallelität, Cross-Origin-/iframe-Abläufe oder eine andere Sprache als JS/TS brauchst, ist Playwright 2026 die Standardwahl. Wenn du eine große, gesunde Cypress-Suite und eine bestehende Cloud-Investition hast, rechtfertigt ein reiner "Tool-Unterschied" allein kein Rewrite – bei Component Testing ist Cypress heute noch ausgereifter. Eine schrittweise Migration nach kritischen Abläufen ist rationaler als ein "Wochenend-Rewrite".
| Kategorie | Playwright | Cypress |
|---|---|---|
| Performance | 8/10 | 7/10 |
| Erlernbarkeit | 7/10 | 8/10 |
| Ökosystem | 8/10 | 7/10 |
| Community | 8/10 | 7/10 |
| Arbeitsmarkt | 7/10 | 7/10 |
| Zukunftssicherheit | 9/10 | 6/10 |
// Playwright Test - Login-Ablauf und API-Mock (TypeScript)
import { test, expect } from '@playwright/test';
test.describe('Giris akisi', () => {
test('gecerli kullanici ile giris yapar ve dashboard gorur', async ({ page }) => {
// Netzwerk-Mock - keine zusätzliche Konfiguration nötig
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: wartet, bis der Locator sichtbar ist
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: frameLocator ohne Selector sucht im gesamten Sub-Frame-Baum
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 - Login-Ablauf und API-Mock (JavaScript/TypeScript)
describe('Giris akisi', () => {
it('gecerli kullanici ile giris yapar ve dashboard gorur', () => {
// Netzwerk-Stub mit cy.intercept
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 Auto-Retry: wartet, bis das Element sichtbar ist
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();
// Beim Wechsel zu einem anderen Origin ist cy.origin() zwingend
cy.origin('https://pay.example.com', () => {
cy.get('[data-cy=confirm-payment]').click();
cy.contains('Odeme onaylandi').should('be.visible');
});
});
});
// cypress.config.js — grundlegende E2E-Konfiguration
module.exports = {
e2e: {
baseUrl: 'http://localhost:3000',
experimentalRunAllSpecs: true,
setupNodeEvents(on, config) {
return config;
},
},
};Es gibt keine eindeutige Antwort, aber einen klaren Rahmen. Wenn du mehrere Browser, kostenlose Parallelität, Cross-Origin-/iframe-Abläufe oder eine andere Sprache als JS/TS brauchst, ist Playwright 2026 die Standardwahl. Wenn du eine große, gesunde Cypress-Suite und eine bestehende Cloud-Investition hast, rechtfertigt ein reiner "Tool-Unterschied" allein kein Rewrite – bei Component Testing ist Cypress heute noch ausgereifter. Eine schrittweise Migration nach kritischen Abläufen ist rationaler als ein "Wochenend-Rewrite".
Kostenlose Beratung erhaltenWenn du mehrere Browser (Chromium+Firefox+WebKit) brauchst, kostenlose eingebaute Parallelität möchtest oder sprachliche Flexibilität zwischen TS/Python/Java/.NET benötigst, ist Playwright 2026 die Standardwahl. Wenn du eine bestehende große Cypress-Suite hast, dein Team an den interaktiven Runner gewöhnt ist und du bereits in Cypress Cloud investiert hast, rechtfertigt ein reiner 'Tool-Unterschied' den Wechsel nicht – eine schrittweise Migration ist rationaler.