Розробка E2E Smoke Tests для моніторингу продакшену

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Розробка E2E Smoke Tests для моніторингу продакшену
Середня
~3-5 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Розробка E2E Smoke Tests для моніторингу production

Smoke tests — мінімальний набір e2e тестів, які перевіряють критичні шляхи програми. Їх завдання — не вичерпне тестування, а швидке виявлення того, що «щось сломалося» після розгортання або через зовнішній інцидент. Запускаються кожні 5–15 хвилин на production.

Різниця від звичайних E2E тестів

Звичайні e2e тести запускаються в CI перед розгортанням і можуть виконуватися 10–30 хвилин. Smoke tests для моніторингу:

  • Запускаються постійно на production (синтетичний моніторинг)
  • Виконуються за 1–3 хвилини
  • Покривають тільки критичні happy paths
  • При падінні одразу тригерять alert (PagerDuty, Slack, email)

Вибір інструменту

Playwright — рекомендується для більшості проектів. Надійніший за Selenium, сучасний API, вбудована підтримка мережевих mock, trace viewer для налагодження.

Cypress — хороший для React/Vue програм, але складніший для запуску в headless оточеннях без додаткової конфігурації.

k6 browser — якщо вже використовується k6 для нагрузного тестування, browser module дозволяє додати e2e перевірки до того ж інструменту.

Приклади smoke tests на Playwright

// tests/smoke/critical-paths.spec.ts
import { test, expect } from '@playwright/test';

test.describe('Smoke: Critical paths', () => {
  test('Homepage loads and key elements visible', async ({ page }) => {
    await page.goto('/');
    await expect(page.getByRole('navigation')).toBeVisible();
    await expect(page.getByRole('main')).toBeVisible();
    // Не тестуємо весь контент — тільки структуру
  });

  test('Login flow works end-to-end', async ({ page }) => {
    await page.goto('/login');
    await page.fill('[name="email"]', process.env.SMOKE_TEST_EMAIL!);
    await page.fill('[name="password"]', process.env.SMOKE_TEST_PASSWORD!);
    await page.click('[type="submit"]');
    await expect(page).toHaveURL('/dashboard', { timeout: 10000 });
    await expect(page.getByTestId('user-menu')).toBeVisible();
  });

  test('API health endpoint responds 200', async ({ request }) => {
    const response = await request.get('/api/health');
    expect(response.status()).toBe(200);
    const body = await response.json();
    expect(body.status).toBe('ok');
  });

  test('Checkout page loads with correct elements', async ({ page }) => {
    // Логінимся через API для швидкості, не через UI
    const authResponse = await page.request.post('/api/auth/login', {
      data: { email: process.env.SMOKE_TEST_EMAIL, password: process.env.SMOKE_TEST_PASSWORD }
    });
    const { token } = await authResponse.json();
    await page.addInitScript(t => {
      localStorage.setItem('auth_token', t);
    }, token);

    await page.goto('/checkout');
    await expect(page.getByTestId('checkout-form')).toBeVisible();
  });
});

Конфігурація для production

// playwright.config.smoke.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
  testDir: './tests/smoke',
  timeout: 30000,
  retries: 2,  // Повторюємо при мережевих помилках
  workers: 1,  // Послідовно — не перевантажуємо production
  use: {
    baseURL: process.env.SMOKE_BASE_URL || 'https://app.example.com',
    extraHTTPHeaders: {
      'X-Smoke-Test': 'true',  // Помічаємо трафік для аналітики/логів
    },
  },
  reporter: [
    ['list'],
    ['json', { outputFile: 'smoke-results.json' }],
  ],
});

Запуск за розписанням через GitHub Actions

# .github/workflows/smoke-monitor.yml
name: Smoke Tests Monitor
on:
  schedule:
    - cron: '*/15 * * * *'  # Кожні 15 хвилин
  workflow_dispatch:

jobs:
  smoke:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 20, cache: npm }
      - run: npm ci
      - run: npx playwright install chromium --with-deps
      - name: Run smoke tests
        run: npx playwright test --config=playwright.config.smoke.ts
        env:
          SMOKE_BASE_URL: https://app.example.com
          SMOKE_TEST_EMAIL: ${{ secrets.SMOKE_TEST_EMAIL }}
          SMOKE_TEST_PASSWORD: ${{ secrets.SMOKE_TEST_PASSWORD }}

      - name: Notify on failure
        if: failure()
        uses: slackapi/slack-github-action@v1
        with:
          payload: |
            {"text": "Smoke tests FAILED on production! <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Run>"}
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

Облікові дані для тестування

Окремий smoke-test користувач у системі з:

  • Специфічним флагом у БД (is_synthetic: true) для фільтрування з аналітики
  • Мінімальними правами (тільки для читання, де можливо)
  • Неможливістю здійснити реальні платіжні операції
  • Ротацією пароля через CI secrets

Метрики моніторингу

Крім проходження тестів, збираємо: час виконання кожного тесту (відхилення > 50% — ознака деградації продуктивності), відсоток успішних запусків за останні 24 години, середній час відповіді API health endpoint.

Часовий графік

Написання 5–10 smoke тестів для критичних шляхів програми — 2–3 дні. Налаштування GitHub Actions з розписанням та Slack-повідомленнями — 0,5 дня. Створення ізольованих тестових облікових даних — 0,5 дня.