В Cypress та Playwright термін «фікстура» (fixture) використовується в різному контексті та вирішує різні завдання, хоча обидва інструменти призначені для автоматизації тестування.
1. Фікстури в Cypress
У Cypress під fixture розуміють статичні тестові дані (зазвичай у форматі JSON, TXT або зображень), які зберігаються в папці cypress/fixtures.
- Основне призначення: Завантаження статичних даних, мокування (mocking) мережевих відповідей API (через
cy.intercept()) та підстановка тестових файлів. - Як працюють: Завантажуються за допомогою команди
cy.fixture('filename.json'). - Приклад:JavaScript
cy.fixture('user.json').then((userData) => { cy.intercept('GET', '/api/user', userData); });
2. Фікстури в Playwright
У Playwright під fixture розуміють механізм впровадження залежностей (Dependency Injection) та управління оточенням/станом тесту. Це аналог фікстур у PyTest або setup/teardown-блоків (beforeEach / afterEach).
- Основное призначення: Підготовка тестового середовища (створення нового контексту браузера, ізоляція
page, авторизація, ініціалізація Page Objects) та їхнє коректне очищення після завершення тесту. - Як працюють: Передаються безпосередньо в аргументи функції
test(). Playwright сам запускає фікстуру, передає готовий об’єкт у тест, а після завершення тесту виконує очищення (teardown). - Приклад вбудованих фікстур:
page,browser,context,request. - Приклад:TypeScript
test('User login', async ({ page }) => { // 'page' — це фікстура, Playwright автоматично створив ізольовану сторінку await page.goto('https://example.com'); }); - Кастомні фікстури: У Playwright можна створювати свої фікстури (наприклад, автоматично залогіненого користувача або готовий екземпляр Page Object), загортаючи їх через
test.extend().
Порівняння пліч-о-пліч
| Критерій | Cypress Fixtures | Playwright Fixtures |
| Що це таке? | Дані (JSON, файли) для тестів та моків. | Оточення, об’єкти та сервіси (Dependency Injection). |
| Аналог в іншому світі | JSON-файлы / Mocks / Stubs. | PyTest fixtures / Dependency Injection / Setup-Teardown. |
| Життєвий цикл | Завантажуються за запитом у коді тесту. | Автоматично ініціалізуються ДО тесту та очищаються ПІСЛЯ. |
| Управління браузером | Не керують об’єктом браузера/сторінки. | Керують контекстами браузера, сторінками, сесіями. |
| Як мокувати дані? | Завантажити файл через cy.fixture(). | У Playwright для даних використовують звичайні JSON-імпорти або route.fulfill({ json }). |