Вхід Реєстрація
Реклама
Ваше рекламне місце
Забронюйте цей слот без конкуренції на обраний період.
Купити рекламу →
Логотип телеграм спільноти - QA Co-pilot
Додано 06 гру 2025

QA Co-pilot

@qa_copilot
Кількість підписників: 94
Фото: 279
Посилання: 46
Опис:
QA Co-pilot 🚀 Ваш другий пілот у світі тестування. 👨‍💻 Для кого: Для тестувальників-практиків, які хочуть рости. 🎯 Про що: Делегуємо рутину нейромережам, прискорюємо роботу та звільняємо час на головне. ❌ Чого тут немає: Нудної теорії та води.
Джерело

QA Co-pilot | Код з душком: Спільні тестові дані (або Прокляття [email protected])П...

Логотип телеграм спільноти - QA Co-pilot QA Co-pilot @qa_copilot
17 Охват/переглядів 2026-06-19 08:13 Повідомлення №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 акаунтів...🤯 — То ось чому мої паралельні тести вічно падають!