Шардирование
Введение
По умолчанию Playwright запускает тестовые файлы параллельно и стремится оптимально использовать ядра ЦП вашего компьютера. Чтобы добиться еще большей степени параллелизма, можно дополнительно масштабировать выполнение тестов Playwright, запуская тесты одновременно на нескольких компьютерах. Этот режим работы называется «шардированием». Шардирование в Playwright означает разделение тестов на более мелкие части, называемые «шардами». Каждый шард — это отдельная задача, которую можно выполнять независимо. Цель такого разделения — ускорить выполнение тестов.
При шардировании каждый шард может выполняться самостоятельно, используя доступные ядра ЦП. Это помогает ускорить процесс тестирования за счет одновременного выполнения задач.
В конвейере CI каждый шард может выполняться как отдельная задача, используя доступные аппаратные ресурсы конвейера CI, например ядра ЦП, чтобы быстрее запускать тесты.
Шардирование тестов между несколькими компьютерами
Чтобы разбить набор тестов на шарды, передайте --shard=x/y в командной строке. Например, чтобы разделить набор на четыре шарда, каждый из которых запускает четверть тестов:
npx playwright test --shard=1/4 npx playwright test --shard=2/4 npx playwright test --shard=3/4 npx playwright test --shard=4/4
Теперь, если запустить эти шарды параллельно в разных задачах, набор тестов будет выполняться в четыре раза быстрее.
Обратите внимание: Playwright может шардировать только тесты, которые можно выполнять параллельно. По умолчанию это означает, что Playwright шардирует тестовые файлы. Другие варианты описаны в руководстве по параллельному выполнению.
Балансировка шардов
Шардирование может выполняться с двумя уровнями детализации — в зависимости от того, используете ли вы параметр testProject.fullyParallel. Это влияет на то, как тесты распределяются между шардами.
Шардирование с fullyParallel
Если включен fullyParallel: true, Playwright Test параллельно запускает отдельные тесты на нескольких шардах, обеспечивая равномерное распределение тестов по шардам. Это позволяет распределять тесты с детализацией до отдельных тестов: каждый шард будет стремиться сбалансировать количество выполняемых тестов. Это предпочтительный режим для равномерного распределения нагрузки при шардировании, поскольку Playwright может оптимизировать выполнение шардов, опираясь на общее количество тестов.
Шардирование без fullyParallel
Без параметра fullyParallel Playwright Test по умолчанию распределяет тесты на уровне файлов, то есть целые тестовые файлы назначаются шардам (обратите внимание: один и тот же файл может назначаться разным шардам в разных проектах). В этом случае на распределение шардов может сильно влиять количество тестов в каждом файле. Если размеры тестовых файлов неодинаковы (то есть в некоторых файлах значительно больше тестов, чем в других), некоторые шарды могут выполнять значительно больше тестов, а другие — меньше или даже ни одного.
Главное:
-
С
fullyParallel: true: тесты разделяются на уровне отдельных тестов, что обеспечивает более сбалансированное выполнение шардов. -
Без
fullyParallel: тесты разделяются на уровне файлов, поэтому для балансировки шардов важно, чтобы тестовые файлы были небольшими и примерно одинакового размера. - Для наиболее эффективного использования шардирования, особенно в средах CI, рекомендуется использовать
fullyParallel: true, чтобы обеспечить сбалансированное распределение тестов по шардам. В противном случае может понадобиться вручную организовать тестовые файлы, чтобы избежать дисбаланса.
Объединение отчетов из нескольких шардов
В предыдущем примере у каждого тестового шарда есть собственный отчет. Если вам нужен общий отчет со всеми результатами тестов из всех шардов, можно объединить эти отчеты.
Для начала добавьте репортер blob в конфигурацию при запуске в CI:
export default defineConfig({
testDir: './tests',
reporter: process.env.CI ? 'blob' : 'html',
}); Отчет blob содержит сведения обо всех выполненных тестах и их результатах, а также все вложения тестов, например трассировки и различия снимков экрана. Отчеты blob можно объединить и преобразовать в любой другой отчет Playwright. По умолчанию отчет blob создается в каталоге blob-report. Подробнее о параметрах отчета blob можно узнать здесь.
Чтобы объединить отчеты из нескольких шардов, поместите файлы отчетов blob в один каталог, например all-blob-reports. В именах отчетов blob указывается номер шарда, поэтому они не будут конфликтовать.
Затем выполните команду npx playwright merge-reports:
npx playwright merge-reports --reporter html ./all-blob-reports
В результате в каталоге playwright-report будет создан стандартный HTML-отчет.
Пример с GitHub Actions
GitHub Actions поддерживает шардирование тестов между несколькими задачами с помощью параметра jobs.<job_id>.strategy.matrix. Параметр matrix запускает отдельную задачу для каждой возможной комбинации заданных параметров.
В следующем примере показано, как настроить задачу для параллельного запуска тестов на четырех компьютерах с последующим объединением отчетов в один. Не забудьте добавить reporter: process.env.CI ? 'blob' : 'html', в файл playwright.config.ts, как показано в примере выше.
- Сначала добавим параметр
matrixв конфигурацию задачи: параметрshardTotal: [4]содержит общее количество создаваемых шардов, аshardIndex: [1, 2, 3, 4]— массив с номерами шардов. - Затем запустим тесты Playwright с параметром
--shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}. Это позволит выполнить команду тестирования для каждого шарда. - Наконец, загрузим отчет blob в артефакты GitHub Actions. Это сделает отчет blob доступным для других задач рабочего процесса.
name: Playwright Tests
on:
push:
branches: [ main, master ]
pull_request:
branches: [ main, master ]
jobs:
playwright-tests:
timeout-minutes: 60
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
shardIndex: [1, 2, 3, 4]
shardTotal: [4]
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: lts/*
- name: Install dependencies
run: npm ci
- name: Install Playwright browsers
run: npx playwright install --with-deps
- name: Run Playwright tests
run: npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
- name: Upload blob report to GitHub Actions Artifacts
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v4
with:
name: blob-report-${{ matrix.shardIndex }}
path: blob-report
retention-days: 1 - После завершения всех шардов можно запустить отдельную задачу, которая объединит отчеты и создаст общий HTML-отчет. Чтобы обеспечить правильный порядок выполнения, мы укажем, что задача
merge-reportsзависит от задачиplaywright-testsс шардами, добавивneeds: [playwright-tests].
jobs:
...
merge-reports:
# Merge reports after playwright-tests, even if some shards have failed
if: ${{ !cancelled() }}
needs: [playwright-tests]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: lts/*
- name: Install dependencies
run: npm ci
- name: Download blob reports from GitHub Actions Artifacts
uses: actions/download-artifact@v5
with:
path: all-blob-reports
pattern: blob-report-*
merge-multiple: true
- name: Merge into HTML Report
run: npx playwright merge-reports --reporter html ./all-blob-reports
- name: Upload HTML report
uses: actions/upload-artifact@v4
with:
name: html-report--attempt-${{ github.run_attempt }}
path: playwright-report
retention-days: 14 Теперь можно увидеть, что отчеты объединены, а общий HTML-отчет доступен на вкладке «Артефакты» в GitHub Actions.
Объединение отчетов из нескольких сред
Если нужно запускать одни и те же тесты в нескольких средах, а не распределять тесты по нескольким компьютерам, необходимо различать эти среды.
В этом случае полезно задать свойство testConfig.tag, чтобы пометить все тесты именем среды. Этот тег будет автоматически добавлен в отчет blob, а затем учтен инструментом объединения.
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: process.env.CI ? 'blob' : 'html',
tag: process.env.CI_ENVIRONMENT_NAME, // for example "@APIv2"
}); Интерфейс командной строки merge-reports
npx playwright merge-reports path/to/blob-reports-dir считывает все отчеты blob из указанного каталога и объединяет их в один отчет.
При объединении отчетов из разных ОС потребуется явно указать конфигурацию объединения, чтобы определить, какой каталог использовать в качестве корневого каталога тестов.
Поддерживаемые параметры:
-
--reporter reporter-to-useКакой отчет создать. Можно указать несколько репортеров, разделив их запятой.
Пример:
npx playwright merge-reports --reporter=html,github ./blob-reports
-
--config path/to/config/fileУказывает файл конфигурации Playwright с выходными репортерами. Используйте этот параметр, чтобы передать дополнительную конфигурацию выходному репортеру. Этот файл конфигурации может отличаться от файла, использованного при создании отчетов blob.
Пример:
npx playwright merge-reports --config=merge.config.ts ./blob-reports
export default { testDir: 'e2e', reporter: [['html', { open: 'never' }]], };
© 2026 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/test-sharding