Під час створення проекту тестів (як приклад Playwright JavaScript – перший end-to-end тест), після виконання команди:
npm init playwright@latestв корені проекту Playwright автоматично створює файл playwright.config.js, котрий містить наступний перелік базових налаштувань:
const { defineConfig, devices } = require('@playwright/test');
module.exports = defineConfig({
testDir: './',
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 1 : undefined,
reporter: 'html',
use: {
trace: 'on-first-retry',
},
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},
],
});
Вміст файлу playwright.config.js можна розбити на кілька розділів:
General config (загальні налаштування)
Цей розділ, одразу після генерації файлу playwright.config.js, містить наступні властивості, котрі знаходяться на верхньому рівні об’єкту конфігурації:
testDir – задає каталог, в якому буде відбуватись пошук файлів з тестами. За замовчуванням – це каталог конфігураційного файлу.
fullyParallel – якщо встановлено true, усі тести в усіх тестових файлах, будуть виконуватись паралельно.
forbidOnly – для запуску окремого тесту, у Playwright можна додати до нього .only (тобто test.only), що може бути зручно під час локальної роботи над одним з тестів. Але зазвичай відсутня потреба виконувати лише один окремий тест у вашому pipeline, і ви не хочете щоб test.only туди потрапив. Встановлення властивості forbidOnly у true (наприклад !!process.env.CI), призведе до завершення запуску тестів з загальною помилкою, якщо буде виявлено тести або групи, визначені як test.only() або test.describe.only().
retries – визначає кількість спроб, за яку Playwright намагатиметься отримати успішний результат тесту, у випадку невдалої спроби. Значення за замовчуванням дорівнює 0.
workers – максимальна кількість паралельних робочих процесів, задіяних для розпаралелювання тестів. Також можна задати значення у відсотках, від кількості логічних ядер процесора (наприклад "50%").
reporter – визначає генератор для звітів про виконання тестів. Приклади вбудованих репортерів: dot, github, html, json, junit, line, list. Докладніше за посиланням: Playwright Reporters
Також сюди можна власноруч додати деякі корисні властивості для налаштувань, як наприклад:
timeout – максимальний час для виконання кожного тесту. За замовчуванням, Playwright встановлює timeout для кожного тесту 30 секунд. Сюди включається час витрачений тестовою функцією, її тестовими фікстурами та хуками beforeEach.
globalTimeout – максимальний час виконання всього набору тестів. Налаштування цієї опції дозволить завершити виконання тестів, якщо заданий час буде перевищено.
globalSetup та globalTeardown – визначають файли, які будуть виконані перед запуском та після завершення набору тестів (test suite) відповідно. При цьому, файли глобальних налаштувань повинні експортувати лише одну функцію. Докладніше у документації: Test Config Globat Setup
name – ім’я вашого тестового набору, що буде відображатись під час виконання тестів та у звіті.
snapshotDir – шлях до каталогу, де зберігаються знімки екрану (використовуються для візуальних регресійних тестів).
outputDir – шлях до каталогу, де зберігаються результати тестів (трасування, відео, скріншоти). Ця директорія автоматично очищується, в момент запуску набору тестів. Далі, під час запуску тесту, всередині outputDir для нього створюється унікальний підкаталог, що гарантує відсутність конфлікту між паралельно запущеними тестами. За замовчуванням має значення, що дорівнює <package.json-directory>/test-results
testMatch – визначає шаблон, який використовується для іменування тестових файлів (наприклад testMatch: "**/?(*.)@(spec|test).*"). Тільки файли, абсолютний шлях яких відповідає шаблону, виконуються в якості тестів.
testIgnore – по аналогії з testMatch, можна використовувати testIgnore, щоб задати шаблон імен файлів, які будуть проігноровані під час виконання тестів.
maxFailures – у цій властивості, можна вказати максимальну кількість збоїв (невдалих тестів), допустиму під час запуску набору тестів (test suite), після яких test run завершиться з кодом 1 (невдало). Це може бути зручним в CI Jobs, щоб не витрачати ресурси даремно, коли вже відомо, що pipeline не пройде. Приклад налаштування:
maxFailures: process.env.CI ? 1 : 0reportSlowTests – тести, час виконання яких перевищує встановлений максимум, вважаються повільними (slow), і найбільш повільні з них потрапляють до звіту про test run (але не більше кількості, заданої у властивості reportSlowTests). За замовчуванням дорівнює 5, тобто в кінці вашого тестового прогону, до 5 самих повільних тестів, потрапить у звіт як slow. Щоб вимкнути цю функцію, потрібно встановити значення null. Якщо вказати 0, в якості максимального значення, буде повідомлено про всі тести, що перевищують часовий поріг. Тут же можна вказати і порогове значення у мілісекундах, для повільного тесту. Приклад налаштування:
reportSlowTests: { max: 5, threshold: 15000 }expect – ця властивість стосується тверджень у тестах. Тут можна перевизначити timeout для тверджень за замовчуванням (5000 мілісекунд), якщо у ваших тестах вони потребують більше часу. Приклад налаштування:
expect: {
timeout: 6000,
}Докладніше про цей розділ налаштувань в документації: Playwright TestConfig
Use
Playwright надає багато параметрів для налаштування тестового середовища, браузера, контекста браузера, тощо. Ці опції містяться в об’єкті use: {}, з об’єкта конфігурації. Розглянемо деякі з них:
trace – за замовчуванням, файл playwright.config створюється з налаштуванням цієї опції встановленим як 'on-first-retry'. Це означає, що трасування (файл trace.zip) буде записано лише під час першої повторної спроби виконання тесту, після невдачі. Якщо тест проходить вдало з першого разу, трасування не зберігається, що допомагає зменшити використання ресурсів та обсяг збережених логів.
baseURL – базова URL-адреса, встановивши котру, ви можете переходити на різні сторінки вашого додатку за допомогою відносного шляху (замість того, щоб повторювати повну URL-адресу кожного разу, коли ви використовуєте page.goto() у своїх тестах).
actionTimeout – якщо не встановлено, то має значення за замовчуванням 0. Додає timeout в мілісекундах для дій на сторінці, таких як click(), type(), тощо.
navigationTimeout – задає timeout в мілісекундах для кожної дії навігації(за замовчуванням 0). Дає змогу почекати, поки сторінка завантажиться, у випадках коли наприклад page.goto() в додатку виконується трохи довше.
geolocation – якщо є потреба перевірити, як виглядає і працює ваш додаток, коли ним користується користувач з іншої частини світу (чи змінюється локалізація, чи бачить користувач відповідну мовну версію, тощо), є можливість вказати бажану геолокацію у цій властивості.
permissions – надає певні дозволи контексту браузера. Приклад налаштування:
permissions: ['notifications', 'geolocation']headless – режим браузера, в якому запускаються тести. За замовчуванням true (безголовий), тобто вікно браузера не відображається під час виконання тестів (що економить ресурси).
ignoreHTTPSErrors – визначає, чи потрібно ігнорувати помилки HTTPS в результаті мережевих запитів (що надсилаються в процесі взаємодії з вашим додатком). Значення за замовчуванням false.
screenshot , video та trace – у цих властивостях можна вказати, чи потрібно зберігати відповідні артефакти тестів у каталозі результатів. Доступні варіанти значень: on, off, retain-on-failure.
viewport – визначає розмір області перегляду під час тестів, яка використовується для всіх сторінок (за замовчуванням – 1280×720). Приклад налаштування:
viewport: { width: 1280, height: 720 }storageState – використовується для завантаження збереженого storage браузера (local storage, session storage, cookie). Це наприклад дозволяє уникати повторного входу до системи (login) у кожному тесті, що може зекономити час для виконання тестів:
storageState: 'storageState.json', // Шлях до файлу зі станомproxy – дозволяє налаштувати проксі-сервер, через який будуть направлятись запити з браузера, під час виконання тестів. Приклад налаштування:
use: {
proxy: {
server: 'http://proxy.example.com:8080', // Адреса проксі-сервера
username: 'user', // Ім'я користувача (необов’язково)
password: 'password', // Пароль (необов’язково)
},
}Докладніше про цей розділ налаштувань в документації: Playwright TestOptions
Projects
Project – це логічна група тестів, що запускаються з однаковою конфігурацією. У Playwright проекти також використовуються, щоб мати можливість запускати тести у різних браузерах та пристроях (chromium, webkit, firefox, тощо).
Проекти налаштовуються у файлі playwright.config.js за допомогою властивості projects, об’єкту конфігурації. Після налаштування, ви можете запускати тести на всіх проектах, або тільки на певному проекті. При цьому, для кожного об’єкту з projects, ви можете встановити власні опції (як наприклад baseURL)
Докладніше про цей розділ налаштувань в документації: Playwright Projects
Підсумок
Наостанок, приклад ще однієї версії файлу playwright.config.js, котрий містить деякі з розглянутих вище властивостей:
const { defineConfig, devices } = require('@playwright/test');
module.exports = defineConfig({
testDir: './tests', // Директорія з тестами
timeout: 30000, // Максимальний час виконання тесту (мс)
expect: {
timeout: 5000, // Тайм-аут для перевірок expect (мс)
},
retries: 1, // Кількість повторних спроб у разі невдачі тесту
reporter: 'html', // Формат звіту
use: {
headless: true, // Запуск у безголовому режимі браузера
viewport: { width: 1280, height: 720 }, // Розмір вікна браузера
ignoreHTTPSErrors: true, // Ігнорування помилок HTTPS
video: 'retain-on-failure', // Збереження відео тільки для невдалих тестів
screenshot: 'only-on-failure', // Зняття скріншотів після кожного невдалого тесту
},
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},
],
});