Рубрики
Без рубрики

7 функций Pytest и плагинов, которые сэкономит вам тонны времени

В этом уроке мы узнаем лучшие функции Pytest и плагины, чтобы ускорить вашу разработку … Tagged с Python, начинающими, тестированием, учебником.

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

Оглавление

  1. Как остановить сеанс теста на первом сбое
  2. Как перезапустить только последние неудачные тесты
  3. Как перезапустить всю сеанс теста, начиная с последних неудачных тестов сначала
  4. Как отобразить локальные переменные неудачного теста
  5. Как запустить только подмножество тестов
  6. Как запустить тесты параллельно
  7. Как повторно запустить тревожные тесты и устранить прерывистые неудачи
  8. Вывод

Как остановить сеанс теста на первом сбое

Запуск полного тестового набора большого проекта может занять много времени. Независимо от того, выполняете ли вы их локально или на сервере CI, всегда расстраивает, что тест выходит из строя после терпеливого ожидания. В определенных случаях вы, возможно, захотите преодолеть весь сеанс после первого сбоя, чтобы вы могли немедленно исправить сломанный тест. К счастью, pytest Поставляется с очень удобной опцией CLI для этого, -x/-exitfirst Анкет

$ pytest -x tests/

Как перезапустить только последние неудачные тесты

При разработке локально вы можете запустить все тесты, прежде чем перейти к вашему репо. Если вы работаете над небольшим проектом с несколькими тестами, это нормально, чтобы перезапустить их всех. Однако, если полный набор тестов займет минуты, чтобы запустить, вы, вероятно, захотите выполнить только те, которые не удались. pytest позволяет это через --lf или -Last-Pailed вариант. Таким образом, вы можете сэкономить драгоценное время и повторить гораздо быстрее!

$ pytest --lf tests/

Как запустить всю сеанс теста Начиная с последних неудачных тестов сначала

Аналогичный предыдущей команде, было бы полезно повторно заполнить все. Единственное отличие в том, что вы хотите сначала начать с неудачного теста. И чтобы сделать это, используйте --Ф или -Парень-первый флаг.

$ pytest --ff tests/

Как отобразить локальные переменные неудачного теста

Мы узнали, насколько важно итерацию быстрее и как это может сэкономить вам драгоценное время. Точно так же очень важно, чтобы мы могли подобрать ключевые подсказки, которые помогут нам отладить неудачные тесты. С помощью -Showlocals флаг, или просто -l , мы можем увидеть значение всех локальных переменных в Tracebacks.

$ pytest tests/test_variables.py -l               
================ test session starts ================
...                                                                                                                                                
tests/test_variables.py FF                                                                                                                                                     [100%]

================ FAILURES ================
_____________________________________________________________________________ test_local_variables[name] _____________________________________________________________________________

key = 'name'

    @pytest.mark.parametrize("key", ["name", "age"])
    def test_local_variables(key):
        result = person_info()
>       assert key in result
E       AssertionError: assert 'name' in {'height': 180}

key        = 'name'
result     = {'height': 180}

tests/test_variables.py:11: AssertionError
_____________________________________________________________________________ test_local_variables[age] ______________________________________________________________________________

key = 'age'

    @pytest.mark.parametrize("key", ["name", "age"])
    def test_local_variables(key):
        result = person_info()
>       assert key in result
E       AssertionError: assert 'age' in {'height': 180}

key        = 'age'
result     = {'height': 180}

tests/test_variables.py:11: AssertionError
================ short test summary info ================
FAILED tests/test_variables.py::test_local_variables[name] - AssertionError: assert 'name' in {'height': 180}
FAILED tests/test_variables.py::test_local_variables[age] - AssertionError: assert 'age' in {'height': 180}
================ 2 failed in 0.05s ================

Как запустить только подмножество тестов

Иногда вам нужно запустить только подмножество тестов. Одним из способов сделать это является запуск всех тестовых случаев отдельного файла. Например, вы могли бы сделать pytest test_functions.py Анкет Хотя это лучше, чем запустить все, мы все равно можем улучшить это. С помощью -K Опция, можно указать выражения ключевых слов, которые pytest будет использовать для выбора тестов для выполнения.

# tests/test_variables.py
def test_asdict():
    ...

def test_astuple():
    ...

def test_aslist():
    ...

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

$ pytest -k "asdict or astuple" tests/test_variables.py

Выход:

$ pytest -k "asdict or astuple" tests/test_variables.py
==================================== test session starts ====================================
...                                          

tests/test_variables.py ..                                                            [100%]

============================== 2 passed, 1 deselected in 0.02s ==============================

Как запустить тесты параллельно

Чем больше тестов проекта, тем дольше нужно, чтобы запустить их все. Это звучит неоспоримо, но оно обычно упускается из виду. Запуск обширного испытательного набора One Test после другого – невероятная трата времени. Лучший способ ускорить выполнение – это параллелизировать его и воспользоваться несколькими процессорами.

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

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

$ pytest -n NUMCPUS

Если вы не знаете, сколько процессоров у вас есть, вы можете сказать pytest-xdist Чтобы запустить тесты на всех доступных процессорах с Авто ценность.

$ pytest -n auto

Как повторно запустить тревожные тесты и устранить прерывистые неудачи

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

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

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

Самый простой способ его использовать – это пройти -Реруны Опция с максимальным количеством раз, когда вы хотели бы запустить тесты.

$ pytest --reruns 5

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

@pytest.mark.flaky(reruns=5)
def test_flaky():
    assert get_resut() is True

Вывод

Большой тестовый набор может принести большую гарантию в проект, но он также поставляется с стоимостью. Долгое время тестирования можно съесть много времени для разработки и сделать итерации медленнее. Используя pytest Особенности и его плагины экосистемы, можно резко ускорить процесс разработки. В этом уроке мы рассмотрели 7 советов, которые мы можем принять, чтобы улучшить нашу жизнь и тратить меньше времени на выполнение тестов.

Если вам понравился этот пост, подумайте о том, чтобы поделиться им со своими друзьями! Кроме того, не стесняйтесь следить за мной https://miguendes.me Анкет

7 функций питеста и плагинов, которые сэкономит вам тонны времени впервые появился на Блог Мигендеса Анкет

Оригинал: “https://dev.to/miguendes/7-pytest-features-and-plugins-that-will-save-you-tons-of-time-2o7e”