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

// Dateipfad: playwright.config.ts
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

export default defineConfig({
  // 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

// Serielle Ausführung — jeder Test hängt vom Ergebnis des vorherigen Tests ab
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('Eine Gruppe von Tests', () => {
  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

# Dateipfad: .github/workflows/playwright.yml
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

// Dateipfad: playwright.config.ts
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

// Wiederholungen für die gesamte Gruppe festlegen
test.describe.configure({ retries: 3 });

test.describe('Instabiles Feature (erfordert mehrere Wiederholungen)', () => {
  test('Test A', async ({ page }) => { /* ... */ });
  test('Test B', async ({ page }) => { /* ... */ });
});

Wiederholungsstrategien

StrategieBeschreibung
Wiederholungen in der CI-UmgebungLokal keine Wiederholungen (schnelles Feedback), in CI 2-3-mal wiederholen
Trace-SammlungKombiniert mittrace: 'on-first-retry', Trace nur bei Wiederholungen aufzeichnen
Missbrauche Wiederholungen nichtWiederholungen können echte Fehler nicht verschleiern. Wenn ein Test häufig fehlschlägt und erst nach Wiederholungen besteht, solltest du die Grundursache beheben.
Andere Erweiterungen