Уровни логирования

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

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

Уровень логирования задается через конфигурационный файл wdio.conf.js. Параметр logLevel определяет, какая информация будет выводиться в консоль или сохраняться в файлы:

exports.config = {
    logLevel: 'info', // Уровни: 'trace', 'debug', 'info', 'warn', 'error', 'silent'
};

Доступные уровни логирования:

  • trace – самый детализированный уровень. Отображает каждый шаг выполнения команды, включая внутренние процессы WebdriverIO и взаимодействие с драйвером браузера. Используется для глубокого анализа проблем.
  • debug – выводит подробные сообщения о шагах теста, полезно для отладки сложных сценариев. Не содержит столь обширной информации о внутренних процессах, как trace.
  • info – основной уровень для большинства тестов. Показывает ключевые события: запуск сессии, завершение тестов, результаты команд.
  • warn – отображает предупреждения, такие как использование устаревших методов или потенциальные конфликты настроек.
  • error – вывод только ошибок, которые привели к сбою теста или критическим проблемам в работе WebdriverIO.
  • silent – отключает все сообщения, полезно при автоматическом запуске тестов без необходимости просмотра логов.

Использование логирования в тестах

WebdriverIO позволяет создавать собственные логгеры через встроенный объект logger. Это удобно для ведения логов, специфичных для определенных модулей или тестов.

const logger = require('@wdio/logger').default;
const log = logger('my-test-logger');

log.info('Тест стартовал');
log.warn('Этот шаг использует устаревший метод');
log.error('Произошла ошибка при клике на элемент');

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

Влияние логирования на производительность

Высокие уровни логирования (trace, debug) могут существенно замедлить выполнение тестов, так как каждая команда и внутренние процессы будут выводиться в консоль. Для регрессионного тестирования на CI/CD часто используют info или warn для сокращения объема выводимых данных и повышения скорости тестов.

Логирование WebDriver команд

WebdriverIO позволяет включать отдельное логирование для команд браузера через beforeCommand и afterCommand хуки:

beforeCommand: function (commandName, args) {
    console.log(`Выполняется команда: ${commandName} с аргументами: ${args}`);
},
afterCommand: function (commandName, args, result, error) {
    if (error) {
        console.error(`Ошибка команды ${commandName}: ${error}`);
    } else {
        console.log(`Команда ${commandName} успешно выполнена`);
    }
}

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

Логирование сетевых запросов

Для анализа взаимодействия с сервером можно использовать плагин @wdio/devtools-service, который позволяет перехватывать и логировать сетевые запросы:

browser.on('Network.requestWillBeSent', (request) => {
    console.log('Запрос:', request.request.url);
});
browser.on('Network.responseReceived', (response) => {
    console.log('Ответ:', response.response.status, response.response.url);
});

Это помогает тестировать API внутри браузерного контекста и отслеживать поведение приложения при различных сценариях.

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

WebdriverIO легко интегрируется с внешними системами логирования, такими как Winston или Pino. Это дает возможность сохранять логи в файлы, базы данных или системы мониторинга:

const winston = require('winston');

const logger = winston.createLogger({
    level: 'info',
    format: winston.format.json(),
    transports: [
        new winston.transports.File({ filename: 'combined.log' }),
        new winston.transports.Console()
    ]
});

logger.info('Тестовая запись лога');

Комбинируя встроенное логирование WebdriverIO с внешними инструментами, можно строить мощные системы мониторинга и отладки тестов.

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

Для CI/CD важен баланс между информативностью и объемом логов. Обычно используют logLevel: 'info' и фильтруют сообщения через хуки или внешние системы. Детальные уровни применяют только при локальной отладке или при анализе ошибок, чтобы не перегружать отчеты и консоль.