Pest v4.6.0 отримав функцію Time-Based Sharding для ефективного розподілу тестів у CI.

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 22 квітня, 2026
Pest v4.6.0 впроваджує інтелектуальний розподіл шардів на основі реального часу виконання тестів для максимальної ефективності вашого CI. Дізнайтеся, як цей інструмент допоможе збалансувати навантаження та значно пришвидшити процес тестування.

Pest v4.6.0 представляє розподіл шардів за часом — новий режим, який балансує CI-шарди на основі реальної тривалості виконання тестів, а не просто кількості файлів. Якщо ви вже використовуєте --shard у CI, достатньо записати дані про час виконання за допомогою --update-shards та додати отриманий JSON-файл до репозиторію.

# Що нового

# Шардинг на основі часу

Під час паралельного запуску тестів на кількох CI-шардах поділ за кількістю файлів часто створює нерівномірне навантаження: один шард завершує роботу за секунди, тоді як інший працює кілька хвилин. Pest v4.6.0 розв'язує цю проблему завдяки збалансованому за часом шардингу.

Крок 1: Запустіть повний набір тестів із прапорцем --update-shards, щоб зафіксувати час виконання кожного класу:

./vendor/bin/pest --update-shards

Для пришвидшення процесу цей параметр можна комбінувати з --parallel:

./vendor/bin/pest --parallel --update-shards

Це запише тривалість виконання кожного тестового класу у файл tests/.pest/shards.json:

{
    "timings": {
        "Tests\\Feature\\Payments\\StripeCheckoutTest": 1.608,
        "Tests\\Feature\\Reports\\SalesReportTest": 2.105,
        "Tests\\Unit\\Models\\UserTest": 0.050
    },
    "checksum": "...",
    "updated_at": "2026-04-14T10:30:00+00:00"
}

Крок 2: Додайте (commit) tests/.pest/shards.json до вашого репозиторію.

Крок 3: Запускайте шардовані CI-завдання як зазвичай. Якщо файл із таймінгами наявний, Pest автоматично застосує збалансований розподіл:

./vendor/bin/pest --shard=1/5

Вивід підтвердить, що активовано режим time-balanced:

Shard:    1 of 5 — 12 files ran, out of 50 (time-balanced).

Якщо після створення файлу з таймінгами ви додасте або перейменуєте тестові файли, Pest виявить розбіжність і виведе попередження:

WARN The [tests/.pest/shards.json] file is out of date...

Тести все одно будуть запущені: нові файли розподіляться рівномірно, а вже відомі — згідно з часом їхнього виконання. Видалення файлів не викликає попереджень, а застарілі записи ігноруватимуться до наступного оновлення JSON-файлу.

Приклад налаштування матриці у GitHub Actions:

strategy:
  matrix:
    shard: [1, 2, 3, 4, 5]

steps:
  - name: Run tests
    run: ./vendor/bin/pest --shard=${{ matrix.shard }}/5

PR: #1671, розроблено @nunomaduro

# Посилання

Популярні

Logomark Logotype

Intervention Image: потужний інструмент для роботи з зображеннями у Laravel

Досліджуйте потужний пакет Intervention Image для PHP, який виводить редагування зображень на новий рівень з оновленою версією 3. Чи готові ви дізнатися, які нові можливості та функції чекають на вас у цьому інструменті

Logomark Logotype

Обробка геопросторових даних за допомогою Laravel Magellan

Ви готові відкрити нові горизонти у роботі з геопросторовими даними в Laravel? Дізнайтеся, як за допомогою PostGIS та пакету Laravel-Magellan можна легко зберігати, запитувати та маніпулювати інформацією про розташування, перетворюючи ваші проекти на вражаючі рішення у сфері картографії та геолокації!

Logomark Logotype

Усе, що нам відомо про Livewire 4

Нова версія Livewire 4, представленої Келебом Порзіо на Laracon US 2025, обіцяє значні покращення у швидкості та організації компонентів. Які з інноваційних функцій підкорять ваше серце? Читайте далі, щоб дізнатися більше про те, як Livewire 4 полегшить вашу роботу