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

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

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Разработка E2E Smoke Tests для мониторинга продакшена
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

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

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

Отличие от обычных e2e тестов

Обычные e2e тесты запускаются в CI перед деплоем и могут выполняться 10–30 минут. Smoke tests для мониторинга:

  • Запускаются постоянно на продакшене (synthetic monitoring)
  • Выполняются за 1–3 минуты
  • Покрывают только critical happy paths
  • При падении сразу триггерят алерт (PagerDuty, Slack, email)

Выбор инструмента

Playwright — рекомендуется для большинства проектов. Надёжнее Selenium, современный API, встроенная поддержка сетевых моков, 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,  // Последовательно — не нагружаем продакшен
  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 дня.