Раздел 43 · Автотестирование с нуля

HTTP-клиент в коде: сессия, базовый URL, таймауты и ретраи

middle~30 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Оля · DevOps, #qa-antrakt

Ночной прогон опять занял раннер на шесть часов, пока его не убил лимит задачи в CI. В логе последняя строка test_users.py::test_user_in_list и дальше тишина. Стенд в 02:10 перезапускался: соединение принял, а ответить не успел. Тест ждал ответа до утра. Утренние PR из-за этого стояли в очереди. Можно сделать так, чтобы тест падал, а не висел?

В прошлом уроке мы решили, что проверять в ответе. Теперь посмотрим, как ответ вообще получается. У Глеба каждый тест сам собирает URL, сам добавляет заголовок с токеном и сам вызывает requests. Это работает, пока стенд отвечает. Когда стенд молчит, оказывается, что ждать молча тест готов вечно. Разберём, как набору тестов работать с HTTP: одна сессия, базовый URL в одном месте, таймаут на каждом запросе и повторы только там, где они безопасны.

Звонок в пустоту

Ты звонишь в кассу театра. Гудок, второй, десятый. Нормальный человек на двадцатом гудке кладёт трубку и пробует позже. Тест без таймаута трубку не кладёт никогда: он будет слушать гудки, пока его не выключат из розетки.

Бывает и хуже. Касса сняла трубку, сказала «алло» и замолчала. Соединение есть, ответа нет. Это ровно то, что случилось ночью со стендом.

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

урок из курса

Урок из курса «Автотестирование с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.