Fuente
QA Co-pilot | Код з душком: Спільні тестові дані (або Прокляття [email protected])П...
17 Vistas/Alcance
2026-06-19 08:13
Mensaje №329
💩 Код з душком: Спільні тестові дані (або Прокляття [email protected])Привіт, екіпаж! П'ятниця — час вивітрювати антипатерни. Сьогодні говоримо про звичку, яка працює на локальному комп'ютері, але перетворює CI/CD пайплайн на суцільне мінне поле. ☕️Знайдіть проблему в цьому підході:// ❌ Антипатерн "Гуртожиток" (Shared State)test.beforeEach(async ({ page }) => { // Усі тести у сьюті логіняться під ОДНИМ юзером await loginPage.login('[email protected]', 'Qwerty1234');});test('Користувач може видалити товар з кошика', async ({ page }) => { await cartPage.deleteItem(); await expect(page.locator('.empty-cart')).toBeVisible();});
Чому цей код тхне:Коли ви запускаєте ці тести по одному на своєму ноуті — все ідеально. Але щойно ви налаштовуєте паралельний запуск (наприклад, workers: 4 у Playwright), починається хаос.Один тест намагається покласти товар у кошик, а паралельний тест ТІЄЇ Ж СЕКУНДИ натискає кнопку "Очистити кошик" (бо вони сидять під одним акаунтом!). Тести починають вбивати один одного. З'являються сотні "плаваючих" (flaky) багів.
✅ Як це виглядає після код-рев'ю Senior-інженера:Тести мають дотримуватись принципу F.I.R.S.T. (зокрема, бути Isolated/Ізольованими). Кожен тест повинен жити у своєму вакуумі і генерувати власні унікальні дані.// 🚀 Ідеально чистий код (Data Isolation)test.beforeEach(async ({ page, api }) => { // Динамічно створюємо УНІКАЛЬНОГО юзера для КОЖНОГО тесту через API const testUser = await api.createUser(); await loginPage.login(testUser.email, testUser.password);});test('Користувач може видалити товар з кошика', async ({ page }) => { // Тест працює у повній ізоляції. Ніхто інший не чіпає цей кошик. await cartPage.deleteItem(); await expect(page.locator('.empty-cart')).toBeVisible();});
Золоте правило: Ніколи не хардкодьте імейли чи ID сутностей у тестах. Використовуйте патерн Data Factory / API-генерацію. Тест має сам створити собі "пісочницю", погратися в ній і (бажано) прибрати за собою.А ваші тести б'ються за один імейл? 👇🔥 — Ні, у нас API генерує унікальні дані для кожного прогону!👀 — Грішу... У мене є файл test-users.json на 5 акаунтів...🤯 — То ось чому мої паралельні тести вічно падають!