Обработка и анализ логов

Эффективное тестирование веб-приложений невозможно без детального контроля за процессом выполнения тестов и анализа возникающих ошибок. Логи представляют собой ключевой инструмент для понимания поведения приложения и тестового кода. WebdriverIO предоставляет гибкие возможности для их сбора, структурирования и анализа.


Виды логов в WebdriverIO

  1. Логи браузера Позволяют отслеживать действия, происходящие на клиентской стороне, включая JavaScript ошибки, предупреждения и сообщения console.log. Основные типы:

    • browser — стандартный вывод консоли браузера.
    • driver — сообщения WebDriver, связанные с выполнением команд.
    • performance — данные о производительности страницы, время загрузки ресурсов.
  2. Логи WebdriverIO Включают информацию о выполнении команд WebDriver и внутренних действиях тестового фреймворка. Примеры:

    • успешное выполнение команд (click, setValue, navigateTo)
    • ошибки при ожидании элементов или тайм-ауты
    • события хуков (before, after, beforeStep, afterStep)
  3. Логи тестов Формируются с помощью reporter и включают:

    • старт и завершение тестов
    • статусы (passed, failed, skipped)
    • stack trace ошибок

Настройка логирования

WebdriverIO позволяет настраивать уровни логирования для разных компонентов через объект logLevels в wdio.conf.js:

exports.config = {
    logLevel: 'info',
    logLevels: {
        webdriver: 'error',
        '@wdio/sync': 'warn'
    }
};

Уровни логов:

  • trace — детальный вывод всех команд и событий
  • debug — вывод команд WebDriver и внутреннего состояния
  • info — основные события и ошибки
  • warn — предупреждения
  • error — критические ошибки

Для анализа производительности рекомендуется использовать уровень trace в сочетании с performance логами браузера.


Получение логов из браузера

Для получения логов браузера применяется метод getLogs:

const logs = browser.getLogs('browser'); // можно указать 'driver' или 'performance'
logs.forEach(entry => {
    console.log(`[${entry.level}] ${entry.timestamp}: ${entry.message}`);
});

Ключевые моменты:

  • entry.level — уровень сообщения (INFO, WARNING, SEVERE)
  • entry.timestamp — время события в миллисекундах
  • entry.message — текст сообщения

Использование фильтров по уровню позволяет игнорировать незначительные предупреждения и сосредоточиться на критических ошибках.


Хуки для автоматической записи логов

WebdriverIO поддерживает хуки, которые позволяют сохранять логи на каждом этапе теста. Основные хуки:

  • beforeStep / afterStep — логирование действий пользователя или системы после каждой команды.
  • afterTest — сохранение логов при падении теста:
afterTest: function(test, context, { error, result, duration, passed, retries }) {
    if (!passed) {
        const logs = browser.getLogs('browser');
        console.log('Ошибка теста:', test.title);
        logs.forEach(entry => console.log(entry.message));
    }
}

Такой подход позволяет сохранять только релевантные сообщения, облегчая последующий анализ.


Интеграция с системами анализа логов

Для крупных проектов полезно интегрировать логи с внешними системами, например:

  • ELK Stack (Elasticsearch, Logstash, Kibana) — структурированное хранение и визуализация логов.
  • Allure Reporter — поддерживает вложение логов и скриншотов к результатам тестов.
  • Sentry или Rollbar — сбор клиентских ошибок и уведомления о сбоях.

Пример интеграции с Allure:

const { addAttachment } = require('@wdio/allure-reporter').default;

afterTest: function(test, context, { error }) {
    if (error) {
        const logs = browser.getLogs('browser').map(l => `${l.level}: ${l.message}`).join('\n');
        addAttachment('Browser Logs', logs, 'text/plain');
    }
}

Парсинг и фильтрация логов

WebdriverIO не ограничивается стандартным выводом. Логи можно парсить и фильтровать программно:

const errors = browser.getLogs('browser')
    .filter(log => log.level === 'SEVERE')
    .map(log => log.message);

errors.forEach(err => console.error('Critical error:', err));

Фильтрация позволяет:

  • быстро выявлять критические ошибки
  • автоматически формировать отчеты о стабильности приложения
  • сокращать время на ручной анализ

Практические рекомендации

  • Использовать logLevel: 'info' для регулярного запуска и trace для отладки сложных сценариев.
  • Сохранять логи при падении тестов, чтобы иметь полную картину проблем.
  • Фильтровать несущественные сообщения, избегая “шумных” отчетов.
  • Интегрировать систему логирования с репортерами и внешними сервисами для долговременного мониторинга качества.
  • Разделять логи браузера, WebdriverIO и тестов для упрощения анализа и поиска корневой причины ошибки.

Логи являются основным инструментом диагностики в WebdriverIO, обеспечивая прозрачность работы тестового фреймворка и веб-приложения. Корректная настройка и систематический анализ логов позволяют повысить надежность автоматизированного тестирования и ускорить устранение ошибок.