Каковы особенности снятия и анализа логов веб-приложения при тестировании?

«Каковы особенности снятия и анализа логов веб-приложения при тестировании?» — вопрос из категории Логирование и отчётность, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Анализ логов — это мой основной инструмент для расследования неочевидных багов, особенно в интеграционном и end-to-end тестировании. Вот ключевые аспекты, на которые я обращаю внимание:

1. Понимание структуры и уровней логирования Я знаю, как в нашем проекте настроены уровни логирования (ERROR, WARN, INFO, DEBUG, TRACE) для разных окружений (dev, staging, prod). При тестировании на staging я часто временно повышаю уровень логирования для микросервиса, который тестирую, чтобы получить больше деталей.

2. Поиск по контексту Современные логи структурированы (обычно JSON). Ключевые поля для поиска:

  • Корреляционные ID: traceId, requestId — позволяют отследить один запрос через все сервисы.
  • Идентификаторы пользователя и сессии: userId, sessionId.
  • Метка времени: timestamp.
  • Компонент/сервис: service.name, logger.name.

Пример логирования ошибки в формате JSON, который я ищу в Kibana или Grafana Loki:

{
  "timestamp": "2023-10-01T12:00:00.123Z",
  "level": "ERROR",
  "service": "payment-service",
  "traceId": "abc-123-def-456",
  "userId": "user_789",
  "message": "Failed to process payment",
  "error": "Insufficient funds",
  "orderId": 10042
}

3. Инструменты и процесс

  • Centralized Logging: Использую ELK-стек (Elasticsearch, Logstash, Kibana) или Grafana Loki для агрегации логов со всех инстансов и контейнеров.
  • Поиск: Составляю запросы по traceId или orderId, чтобы восстановить полную картину события.
  • Мониторинг в реальном времени: Настраиваю дашборды в Kibana/Grafana для отслеживания ошибок (уровень ERROR) во время выполнения тестовой сессии.

4. Практическое применение в тест-кейсах

  1. Воспроизведение бага: При получении шагов воспроизведения от пользователя, первым делом ищу логи по времени и действиям пользователя.
  2. Проверка интеграций: Если тест падает на стыке сервисов, логи показывают, где именно прервалась цепочка вызовов и с какой ошибкой.
  3. Валидация негативных сценариев: После отправки некорректного запроса через API проверяю, что в логах появилась ожидаемая ошибка валидации (например, с уровнем WARN), а не внутренняя ошибка сервера (ERROR).

5. Безопасность и чистота Я слежу, чтобы в логи (особенно на уровне INFO/DEBUG) не попадали чувствительные данные: пароли, полные номера карт, токены. Это проверяется как ручным review, так и автоматическими security-сканерами в пайплайне.