Rusau LearnВойти

Инструменты тестировщика

Логи для тестировщика: где искать, как читать и уровни логирования

Логи – это записи о том, что происходит в приложении, на сервере или в операционной системе: какое действие выполнено, когда и с каким результатом. Каждая запись помечена уровнем. FATAL и ERROR сообщают об ошибках, WARN о предупреждениях, INFO о штатных событиях, а DEBUG и TRACE добавляют подробности для отладки. Тестировщик читает логи, чтобы найти причину бага, которую не видно в интерфейсе, и прикладывает нужный фрагмент к баг-репорту.

Мой видеоурок: Логи для тестировщика / Работа с логами в тестировании / XAMPPОткрыть на YouTube
FATAL, ERROR, WARN
уровни, с которыми тестировщик работает чаще всего
access.log и error.log
два журнала веб-сервера: все запросы и ошибки
Бесплатно
урок с заданиями в моём базовом курсе

Какие бывают логи

Лог – это журнал, в который программа записывает свои действия и время, когда они произошли. По тому, где они пишутся, логи делят на три вида.

  • Логи приложения

    Их пишет браузер, мобильное приложение или программа на компьютере. В браузере это консоль DevTools: нажмите F12, и на вкладке Console появятся ошибки и предупреждения клиентской части. С мобильных устройств логи тоже можно собрать и изучить.

  • Логи сервера

    Их пишет веб-сервер, на котором развёрнуто приложение. Что именно попадёт в лог, обычно настраивает разработчик или DevOps-инженер, потому что настройки по умолчанию дают не всю нужную картину. У веб-сервера два журнала: access log со всеми запросами и ответами и error log с ошибками и другими служебными сообщениями. В access log хранится обобщённая информация: из заголовков туда попадают только Referer и User-Agent, а тел запросов и ответов нет, поэтому при разборе бага его смотрят вместе с DevTools или анализатором трафика.

  • Системные логи

    Записи операционной системы: Windows, Linux или macOS. Это довольно специфичная тема, и в уроке я её не разбираю.

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

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

Чаще всего тестировщик работает с FATAL, ERROR и WARN. INFO пригодится, когда нужна статистика о том, как работает сервер. Названия уровней взяты из распространённых библиотек логирования вроде log4j, а в других системах шкала своя. У веб-сервера Apache, например, между warn и info есть уровень notice, и такие строки встречаются в его error.log.

  • OFF

    Логирование выключено: ничего не записывается, и анализировать нечего.

  • FATAL

    Фатальная ошибка, после которой работать с системой дальше нельзя. О таких записях обязательно сообщают команде.

  • ERROR

    Обычная ошибка. Система в целом работает, но что-то в ней сломано, и по такой записи тоже заводят баг-репорт.

  • WARN

    Предупреждение. Само по себе оно не так серьёзно, как ошибка, но предупреждения накапливаются и бывают зачатком будущих ошибок. Сообщать стоит и о них, а насколько это критично, решать вместе с командой: бывают предупреждения по умолчанию, с которыми ничего не сделать, и предупреждения от внешних сервисов.

  • INFO

    Служебные сообщения о штатных событиях: пользователя создали или удалили, выдали права, установили соединение. По ним видно, что всё прошло так, как задумано.

  • DEBUG

    Отладочный уровень. В журнал попадают все уровни выше и подробности, которые разработчик заложил для отладки. Многое в таких логах лежит на поверхности, и долго расследовать проблему не приходится.

  • TRACE

    Самые подробные записи обо всём, что происходит в системе. Нужны они редко, я называю их информационным шумом.

  • ALL

    Записываются все уровни сразу.

Где лежат логи: локальный сервер на XAMPP

Чтобы изучить логи сервера, нужен сам сервер. Я поднимаю его на своём компьютере с помощью XAMPP, бесплатной сборки из веб-сервера Apache, базы данных и PHP. Локальный сервер пригодится и для учебных заданий: на многих курсах просят развернуть его и сделать страницу со своей фотографией и именем.

На рабочем проекте логи могут лежать где угодно, поэтому где хранятся лог-файлы и как устроено логирование, уточняют у разработчиков. Бывает, что на одном физическом сервере работает несколько виртуальных, и файлов становится много. Тогда хорошо, если по имени файла сразу понятно, что в нём. На крупных проектах логи собирают в системы вроде Kibana.

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

  • 1. Установить XAMPP

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

  • 2. Запустить базу и сервер

    В панели нажимают Start сначала у MySQL, потом у Apache. В новых версиях XAMPP вместо MySQL ставится MariaDB, но строка в панели называется по-старому. Если Apache не запускается, обычно его стандартный порт занят другой программой: порт освобождают или меняют в настройках.

  • 3. Проверить, что всё работает

    Кнопка Admin у Apache открывает в браузере страницу на localhost, а у MySQL открывает phpMyAdmin, где можно создавать базы данных.

  • 4. Сделать свою страницу

    По умолчанию XAMPP ставится в C:\xampp, а сайты лежат в C:\xampp\htdocs. Создайте там папку test с файлом index.php, и страница откроется по адресу localhost/test.

  • 5. Открыть логи

    Логи Apache лежат в папке C:\xampp\apache\logs: access.log с общими сведениями о запросах и error.log с ошибками и служебными сообщениями. Это обычные текстовые файлы, их открывает любой редактор.

Как читать строку access.log

Строки в логах сервера устроены одинаково: одна строка описывает один запрос и ответ на него. После того как вы откроете localhost в браузере, в access.log появится строка примерно такого вида (user agent здесь сокращён).

::1 - - [27/Apr/2021:14:05:12 +0300] "GET /dashboard/ HTTP/1.1" 200 7576 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) …"

Ниже поля этой строки по порядку.

  • Адрес клиента

    ::1 – это localhost в записи IPv6, поэтому адрес выглядит непривычно. На рабочем сервере здесь стоит IP-адрес того, кто отправил запрос.

  • Два дефиса

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

  • Время

    Дата и время, когда сервер получил запрос, с часовым поясом.

  • Строка запроса

    Метод, путь и версия протокола: GET, /dashboard/ и HTTP/1.1.

  • Статус-код

    200 означает, что запрос выполнен успешно. При 302 сервер перенаправил клиента, но куда, в логе не видно: заголовки ответа access.log не хранит.

  • Размер ответа

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

  • Referer и user agent

    Откуда пришёл переход (дефис значит, что ниоткуда) и чем пользовался клиент: операционная система и браузер.

  • Строка error.log

    В журнале ошибок строка тоже начинается со времени, за ним в квадратных скобках идёт тип записи, например warn или notice, и текст сообщения. На свежем локальном сервере там в основном предупреждения и замечания, а на рабочем проекте сюда смотрят первым делом, когда что-то упало.

Зачем тестировщику логи и какие баги в них находят

Чаще всего логи открывают, чтобы найти причину ошибки. Если баг проявляется, а повторить его нажатием кнопок не получается, лог покажет, что происходило в системе в ту минуту. Фрагмент лога прикладывают к баг-репорту вместе с описанием действий, после которых появилась ошибка, и разработчику сразу понятнее, с чего начать.

Пример: в интернет-магазине оплата заказа заканчивается сообщением "Что-то пошло не так", и больше интерфейс ничего не говорит. В access.log в ту же минуту видна строка с POST-запросом на оплату и статусом 500, а в логе приложения рядом стоит ERROR о том, что платёжный сервис не ответил за отведённое время. В баг-репорт идут время, номер заказа и эти две строки, и разработчик сразу видит, что искать надо в интеграции с платёжным сервисом.

В логах видно, где отвалилась интеграция со сторонним сервисом или связь между компонентами системы, например пропало соединение с базой данных. Своё логирование есть у Jenkins и других систем CI/CD, и когда падает сборка, причину можно поискать самому, прежде чем идти к разработчику. Если у приложения пока есть только бэкенд, по логам можно изучать его работу без интерфейса.

От DevTools логи отличаются историей. В браузере запросы видны за текущий сеанс, и сохраняют их обычно, когда ошибку уже поймали, например в HAR-файл. Сервер пишет журнал постоянно и хранит архивы. По user agent из access.log собирают статистику о браузерах и системах пользователей, и с ней можно предложить заказчику не тестировать старый браузер, которым почти никто не пользуется.

Логи проверяют и сами по себе. Вот несколько правил, нарушение которых – повод для баг-репорта.

  • Нет персональных данных

    Логинов, паролей, данных платёжных карт и других персональных или чувствительных данных в логах быть не должно. Если они туда попали, логирование настраивают так, чтобы они не записывались. Здесь пригодятся требования к защите персональных данных, например GDPR. Если в логе платёжного сервиса номер карты записан целиком, это тоже баг: стандарт платёжных карт PCI DSS запрещает хранить полный номер в открытом виде, и логи здесь не исключение.

  • Есть время

    У каждой записи должно быть время. Если его нет, заводят баг-репорт.

  • Логирование не тормозит систему

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

  • Ошибки и предупреждения разобраны

    Записи FATAL, ERROR и WARN, которые влияют на систему, не оставляют без внимания: по ним заводят баги или обсуждают их с разработчиком.

Видеоурок, шпаргалки и тренажёр

Логи я разбираю в отдельном видео на YouTube: виды логов, уровни логирования, установку XAMPP, строки access.log и error.log. Домашнее задание в конце – поднять локальный сервер, изучить его логи и сделать страницу со своей фотографией и именем. В бесплатном базовом курсе по тестированию тема идёт уроком "Работа с логами", и после теории в нём есть задания.

В тренажёре по логам нужно прочитать фрагмент лога и выбрать верное описание того, что произошло. Новые задания он генерирует под вашу функцию, например корзину или оплату. Шпаргалки по DevTools и кодам ответов помогут связать запись в логе с тем, что видно в браузере.

Курсы по теме

Вопросы и ответы

Что такое логи в тестировании?

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

Какие бывают уровни логирования?

OFF (логирование выключено), FATAL, ERROR, WARN, INFO, DEBUG, TRACE и ALL (все уровни). Выбранный уровень работает как порог: в журнал попадают записи этого уровня и более серьёзные. Тестировщику чаще всего нужны FATAL, ERROR и WARN.

Чем access log отличается от error log?

В access log веб-сервер пишет по строке на каждый запрос: адрес клиента, время, метод и путь, статус-код, размер ответа и user agent. В error log попадают ошибки, предупреждения и другие служебные сообщения сервера. Тел запросов и большинства заголовков в access log нет, их смотрят в DevTools или в анализаторе трафика.

Где найти логи сервера?

Это зависит от проекта, поэтому место хранения уточняют у разработчиков. На локальном сервере XAMPP под Windows логи Apache лежат в папке C:\xampp\apache\logs. На больших проектах логи собирают в системы вроде Kibana.

Что не должно попадать в логи?

Персональные и чувствительные данные: логины, пароли, данные платёжных карт. Если тестировщик видит их в логе, он заводит баг. Багом считаются и записи без времени, и логирование, которое замедляет систему.

Обязательно ли тестировщику работать с логами?

Не на каждом проекте, я и сам на текущей работе почти их не читаю. Но основы знать нужно: какие бывают логи и уровни логирования и где искать лог-файлы. Когда баг не удаётся объяснить через интерфейс, ответ часто находится в логах.

Посмотреть программы курсов

Программа каждого курса открыта целиком: видны все модули, уроки и число шагов.

Все курсы

Здесь используются cookies: без них сайт не работает, и по ним видно, откуда о платформе узнают.Cookies нужны для входа и учёта переходов. Подробнее