Playwright-Parallelisierung, Sharding und Wiederholungsversuche
Dieses Kapitel stellt die parallele Ausführungsstrategie, das Sharding und den Fehler-Wiederholungsmechanismus von Playwright vor, damit Sie große Testsuiten effizient ausführen können.
Parallele Ausführung
Standardmäßig verwendet Playwright mehrere Worker-Prozesse, um Tests parallel auszuführen, und nutzt so Multi-Core-CPUs vollständig aus.
fullyParallel-Konfiguration
fullyParallelSteuert, ob Tests innerhalb derselben Datei parallel ausgeführt werden.
Beispiel
export default defineConfig({
fullyParallel: true, // Tests in derselben Datei werden ebenfalls parallel ausgeführt
});
WannfullyParallel: falseWenn ..., werden Tests innerhalb derselben Datei seriell ausgeführt, während Tests in verschiedenen Dateien parallel ausgeführt werden.
WannfullyParallel: trueWenn ..., werden alle Tests vollständig parallel ausgeführt (einschließlich derer in derselben Datei).
Steuern der Anzahl von Workern
Beispiel
// 4 Worker verwenden
workers: 4,
// Lokal den Standardwert verwenden, in CI einen festen Wert von 2 verwenden
workers: process.env.CI ? 2 : undefined,
// Einzelthread-Modus (praktisch zum Debuggen)
workers: 1,
});
Serielle Tests
Verwenden Sietest.describe.serialErzwingt, dass Tests in derselben Gruppe seriell ausgeführt werden.
Beispiel
test.describe.serial('Benutzerregistrierung bis Anmeldung', () => {
test('Schritt 1: Registrieren', async ({ page }) => { /* ... */ });
test('Schritt 2: E-Mail bestätigen', async ({ page }) => { /* ... */ });
test('Schritt 3: Anmelden', async ({ page }) => { /* ... */ });
});
Vermeiden Sie nach Möglichkeit serielle Tests, da sie die Testisolierung aufheben.
Wenn Tests in einer bestimmten Reihenfolge ausgeführt werden müssen, sollten Sie mehrere Schritte zu einem einzigen Test zusammenfassen.
Lokale Parallelitätssteuerung
Durchtest.describe.configureSie können den Parallelmodus einer einzelnen Gruppe steuern.
Beispiel
test.describe.configure({ mode: 'serial' }); // Seriell erzwingen
// test.describe.configure({ mode: 'parallel' }); // Parallel erzwingen
test('A', async () => {});
test('B', async () => {});
});
Sharding
Sharding verteilt Tests auf mehrere CI-Maschinen, um die Gesamtlaufzeit zu verkürzen.
Nutzung
# 机器 1:运行第 1/4 片 npx playwright test --shard=1/4 # 机器 2:运行第 2/4 片 npx playwright test --shard=2/4 # 机器 3:运行第 3/4 片 npx playwright test --shard=3/4 # 机器 4:运行第 4/4 片 npx playwright test --shard=4/4
Shard-Berichte zusammenführen
Nachdem alle Maschinen die Ausführung beendet haben, werden die generierten Berichtsdateien zusammengeführt.
# 每台机器生成报告(不自动打开) npx playwright test --shard=1/4 --reporter=blob # 合并所有 blob 报告 npx playwright merge-reports --reporter=html ./all-blob-reports
Shard-Konfiguration in GitHub Actions
Beispiel
jobs:
test:
strategy:
fail-fast: false
matrix:
shardIndex: [1, 2, 3, 4]
shardTotal: [4]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm ci
- run: npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
Wiederholungsmechanismus
Wiederholungen ermöglichen es, fehlgeschlagene Tests automatisch erneut auszuführen, wodurch gelegentliche Flaky-Faktoren abgemildert werden.
Konfigurieren von Wiederholungen
Beispiel
export default defineConfig({
// Lokal keine Wiederholungen (schnelles Feedback), in CI 2-mal wiederholen
retries: process.env.CI ? 2 : 0,
});
Festlegen von Wiederholungen für eine einzelne Datei oder Gruppe
Beispiel
test.describe.configure({ retries: 3 });
test.describe('Instabiles Feature (erfordert mehrere Wiederholungen)', () => {
test('Test A', async ({ page }) => { /* ... */ });
test('Test B', async ({ page }) => { /* ... */ });
});
Wiederholungsstrategien
| Strategie | Beschreibung |
|---|---|
| Wiederholungen in der CI-Umgebung | Lokal keine Wiederholungen (schnelles Feedback), in CI 2-3-mal wiederholen |
| Trace-Sammlung | Kombiniert mittrace: 'on-first-retry', Trace nur bei Wiederholungen aufzeichnen |
| Missbrauche Wiederholungen nicht | Wiederholungen können echte Fehler nicht verschleiern. Wenn ein Test häufig fehlschlägt und erst nach Wiederholungen besteht, solltest du die Grundursache beheben. |