Оля · DevOps, #qa-antrakt
Ночной прогон опять занял раннер на шесть часов, пока его не убил лимит задачи в CI. В логе последняя строка
test_users.py::test_user_in_listи дальше тишина. Стенд в 02:10 перезапускался: соединение принял, а ответить не успел. Тест ждал ответа до утра. Утренние PR из-за этого стояли в очереди. Можно сделать так, чтобы тест падал, а не висел?
В прошлом уроке мы решили, что проверять в ответе. Теперь посмотрим, как ответ вообще получается. У Глеба каждый тест сам собирает URL, сам добавляет заголовок с токеном и сам вызывает requests. Это работает, пока стенд отвечает. Когда стенд молчит, оказывается, что ждать молча тест готов вечно. Разберём, как набору тестов работать с HTTP: одна сессия, базовый URL в одном месте, таймаут на каждом запросе и повторы только там, где они безопасны.
Звонок в пустоту
Ты звонишь в кассу театра. Гудок, второй, десятый. Нормальный человек на двадцатом гудке кладёт трубку и пробует позже. Тест без таймаута трубку не кладёт никогда: он будет слушать гудки, пока его не выключат из розетки.
Бывает и хуже. Касса сняла трубку, сказала «алло» и замолчала. Соединение есть, ответа нет. Это ровно то, что случилось ночью со стендом.
А ещё есть повторный звонок. Перезвонить и спросить «во сколько начало» можно сколько угодно раз. Перезвонить и повторить «запишите на меня два билета» опасно: если в первый раз тебя услышали, у тебя теперь четыре билета.
урок из курса
Урок из курса «Автотестирование с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.