Изучите лучшие команды PyTest, чтобы ускорить процесс разработки

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

1. Остановка сеанса тестирования при первом сбое

Выполнение полного набора тестов для большого проекта может занять много времени. Независимо от того, выполняете ли вы их локально или на сервере CI, всегда неприятно видеть сбой теста после терпеливого ожидания.

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

К счастью, pytest поставляется с очень удобной опцией CLI для этого -x / --exitfirst.

2. Повторный запуск только последних неудачных тестов

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

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

Однако, если для запуска полного набора тестов требуется несколько минут, вы, вероятно, захотите выполнить только те, которые не прошли проверку. pytest позволяет это с помощью параметра --lf или --last-failed.

Таким образом вы сэкономите драгоценное время и сможете выполнять итерации намного быстрее!

3. Повторите весь сеанс тестирования, начиная с последних неудачных тестов.

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

Единственная разница в том, что вы хотите сначала начать с неудавшегося теста. И для этого используйте флаг --ff или --failed-first.

4. Отображение локальных переменных неудачного теста

Мы узнали, насколько важно выполнять итерацию быстрее и как это может сэкономить ваше драгоценное время.

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

Используя --showlocalsflag или просто -l, мы можем увидеть значение всех локальных переменных в трассировке.

5. Выполнение только части тестов

Иногда вам нужно выполнить только часть тестов. Один из способов сделать это - запустить все тестовые примеры отдельного файла.

Например, вы можете сделать pytest test_functions.py. Хотя это лучше, чем запускать все подряд, мы все же можем это улучшить.

Используя опцию -k, можно указать ключевые выражения, которые pytest будут использовать для выбора тестов, которые будут выполняться.

Скажем, вам нужно запустить первые два теста, вы можете передать список ключевых слов, разделенных or:

Выход:

6. Параллельное выполнение тестов.

Чем больше тестов в проекте, тем больше времени требуется на их выполнение. Это звучит бесспорно, но обычно его игнорируют.

Выполнение обширного набора тестов одного теста за другим - невероятная трата времени.

Лучший способ ускорить выполнение - распараллелить его и использовать несколько процессоров.

К сожалению, pytest не имеет подобной функции, поэтому мы должны вернуться к плагинам. Лучшим pytest плагином для этого является pytest-xdist.

Чтобы отправить тесты на несколько процессоров, используйте параметр n или --numprocesses.

Если вы не знаете, сколько у вас ЦП, вы можете указать pytest-xdist запустить тесты на всех доступных ЦП со значением auto.

7. Повторно запускайте нестандартные тесты и устраняйте периодические сбои.

Одна из самых обескураживающих ситуаций - видеть, что все тесты проходят локально, а на сервере CI терпят неудачу. Подобные сбои могут быть вызваны несколькими причинами, но чаще всего они являются результатом «нестандартного» теста.

«Нестандартный» тест - это тест, который периодически и недетерминированно дает сбой. Обычно их достаточно перезапустить.

Проблема в том, что если у вас есть длительный набор тестов, вам нужно повторно запустить этап CI и подождать несколько минут. Это отличное времяпровождение, и, к счастью, этого можно избежать.

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

Лучший pytest плагин для этого - pytest-rerunfailures. Этот плагин повторно запускает тесты столько, сколько мы хотим, тем самым устраняя периодические сбои.

Самый простой способ его использования - передать параметр --reruns с максимальным числом запусков тестов.

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

Заключение

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

Используя pytest функции и экосистемы плагинов, можно значительно ускорить процесс разработки.

В этом руководстве мы рассмотрели 7 советов, которые можно использовать, чтобы улучшить свою жизнь и тратить меньше времени на выполнение тестов.

Хотите связаться с автором?

Изначально это сообщение было опубликовано на miguendes.me.