Приложение упало на стенде, разработчик просит «посмотри, что в логах» — а лог лежит на сервере с Linux, и попасть в него можно только через терминал: текстовое окно, где команды набирают, а не кликают мышкой. Пугаться не стоит: чтобы дойти до нужной строки, хватает пяти команд.
Лог целиком глазами не читают: в файле 8 240 строк. Команда grep оставляет только строки про нужный заказ — их четыре, а tail берёт из них две последние. За три шага поток сузился до одной строки, в которой видно причину: заказ упал по таймауту.
Зачем тестировщику терминал
Терминал открывают не ради него самого, а ради трёх обычных дел. Главное — логи: текстовые файлы, куда приложение пишет, что делает и какие ошибки ловит; когда на сервере что-то пошло не так, ответ обычно там. Второе — проверить файл: дошёл ли, те ли в нём данные. Третье — стенд, к которому иначе и не подступиться: интерфейса у него нет.
Сам терминал — диалог: пишете команду, жмёте Enter, система выполняет и показывает результат.
Навигация по папкам
Файлы в Linux разложены по папкам (директориям), как на любом компьютере, и первым делом нужно попасть в ту, где лежат логи:
pwd— показать, где я сейчас.ls— что лежит в текущей папке;ls -l— подробно (размер, дата),ls -a— вместе со скрытыми файлами.cd имя_папки— зайти в папку,cd ..— подняться на уровень выше,cdбез ничего — в домашнюю.
Просмотр файлов и логов
Четыре команды, которыми лог и читают:
cat файл— вывести файл целиком. Годится, пока файл маленький.tail файл— показать последние строки;tail -n 50 файл— последние 50,tail -f файл— следить вживую: новые строки появляются по мере записи, прямо пока воспроизводишь баг.head файл— наоборот, первые строки.grep "текст" файл— найти строки с нужным текстом:grep "ERROR" app.logпокажет все строки с ошибками. Логи бывают огромными, аgrepсразу вытаскивает нужное.-nдобавит номер строки,-C 3— три строки вокруг: у ошибки ценен не заголовок, а стек под ним.
Воспроизвели баг — заходите в логи и сужаете вывод, как на картинке:
cd /var/log/app # где лежат логи
ls -l # какие файлы есть и когда в них писали
grep "ORD-77" app.log | tail -n 2 # строки про заказ, из них две последние
tail -f app.log | grep "ERROR" # следить за новыми ошибками вживую
Вертикальная черта | — конвейер: вывод левой команды становится входом правой, и порядок решает. grep "ERROR" app.log | tail -n 20 отберёт ошибки по всему файлу и покажет последние двадцать. А tail -n 20 app.log | grep "ERROR" поищет ошибку только в двадцати последних строках файла — и чаще всего вернёт пусто, хотя ошибка в логе есть.
Где потренироваться
Устанавливать Linux не нужно: есть онлайн-терминалы (запрос «online linux terminal», например webminal) — открываете в браузере и работаете настоящими командами, ничего не ломая у себя. На Mac терминал уже встроен и понимает то же самое, на Windows похожее поведение даёт WSL или Git Bash.
Где теряют время
Найденные строки лога прикладывают к баг-репорту — и дефект перестаёт быть «что-то пошло не так». Мешают этому три вещи:
- Терминала боятся как «программирования» — а нужно пять команд.
- Огромный лог читают глазами вместо
grep "ERROR"— и тонут в тысячах строк. - Незнакомую команду набирают на боевом сервере. Читать (
cat,tail,grep) безопасно, всё остальное — только с пониманием.
Коротко
- Хватает пяти команд:
lsиcd— где я и что тут;cat,tail,grep— что внутри файла. cat— для маленьких файлов; у большого лога смотрят конец (tail -n 50), аtail -f— строки прямо во время воспроизведения бага.grepсужает лог до нужных строк — по словуERRORили по номеру заказа;-nдаёт номер строки,-C 3— соседние.- В конвейере решает порядок:
grepотбирает по всему файлу,tailсначала обрежет файл — и ошибка в остаток может не попасть. - Чтение файлов безопасно, изменение — нет: незнакомую команду на боевом сервере не набирают.
Что почитать дальше
- Как писать баг-репорт — куда прикладывают найденные строки лога.
- Основы сетей — почему в логе бывает пусто: запрос не дошёл.
- Локализационное тестирование — следующий вид проверок.
- QA в Agile и Scrum — дальше о работе в команде.