Glossar · UI-Automatisierung
Testisolation
Englisch: Test isolation
Auch genannt: isolierte Tests, Testunabhängigkeit, unabhängige Tests
Definition
Die Eigenschaft, dass jeder Test seinen eigenen Zustand herstellt und für sich allein, in beliebiger Reihenfolge und parallel bestehen kann, ohne andere Tests zu beeinflussen.
Ein isolierter Test erzeugt alles, was er braucht, verlässt sich auf nichts, was ein anderer Test hinterlassen hat, und hinterlässt nichts, was das Ergebnis eines anderen Tests verändert. Wenn Sie jeden einzelnen Test allein ausführen, die gesamte Suite in umgekehrter Reihenfolge laufen lassen oder sie auf acht parallele Worker verteilen können und dieselben Ergebnisse erhalten, ist die Suite isoliert. Isolation ist das, was parallele Ausführung und Sharding sicher macht.
Beispiel
Nicht isoliert: Der zweite Test hängt vom ersten ab.
test('creates a project', async ({ page }) => {
await page.goto('/projects/new');
await page.getByLabel('Name').fill('Apollo');
await page.getByRole('button', { name: 'Create' }).click();
});
test('renames the project', async ({ page }) => {
await page.goto('/projects/apollo'); // fails if run alone or first
});
Isoliert: Jeder Test legt seine eigenen Daten mit einem eindeutigen Namen über die API an.
test('renames a project', async ({ page, request }) => {
const name = `proj-${crypto.randomUUID()}`;
const res = await request.post('/api/projects', { data: { name } });
const { id } = await res.json();
await page.goto(`/projects/${id}`);
// ...rename and assert
});
Playwright hilft auf Browserebene: Jeder Test erhält einen frischen BrowserContext, sodass Cookies, Local Storage und Sessions nie zwischen Tests durchsickern.
Quellen für Durchsickern
- Gemeinsam genutzte Konten und Datensätze, die Tests verändern, etwa ein einziger „Testnutzer“, dessen Einstellungen jeder Test ändert.
- Statischer oder globaler Zustand im Testcode, etwa ein Singleton-Treiber oder eine Variable auf Klassenebene.
- Datenbankzeilen ohne Aufräumen oder Tests, die auf die Zeilenanzahl einer Tabelle prüfen, in die auch andere Tests schreiben.
- Externer Zustand wie Feature Flags, E-Mail-Postfächer, Zeit und Caches.
Wie Sie es prüfen
Führen Sie Tests in zufälliger Reihenfolge aus. JUnit 5 unterstützt @TestMethodOrder(MethodOrderer.Random.class), und eine zufällige Standardreihenfolge für jede Klasse lässt sich in junit-platform.properties festlegen. Führen Sie einzelne Tests allein aus. Lassen Sie die Suite mit mehr Workern als üblich laufen. Jeder Test, dessen Ergebnis sich dabei ändert, ist nicht isoliert.
Vollständige Isolation hat ihren Preis, besonders wenn das Setup langsam ist. Ein gängiger Kompromiss: teure, nur gelesene Daten pro Worker teilen und alles, was ein Test schreibt, für diesen Test eindeutig halten.