Знакомство

Завершено

Pytest может не только обнаруживать тесты, но и проверять результаты утверждений. По мере роста набора тестов Python повторяющаяся логика тестирования и код общего начального состояния усложняют чтение, отладку и расширение тестов. В этом модуле вы узнаете три возможности pytest, которые помогают вашим тестам на Python быть читаемыми и удобными в обслуживании: параметризация, фикстуры и встроенный monkeypatch.

В этом модуле предполагается, что можно писать Python скрипты, выполнять команды в терминале и выполнять простые тесты pytest в виртуальной среде с Python 3.10 или более поздней версии. Если вам нужна помощь по настройке Windows, см. раздел Настройка среды разработки Python в Windows. Дополнительные сведения о виртуальной среде см. в документации Python venv.

Параметризация с @pytest.mark.parametrize выполняет одну и ту же функцию теста с несколькими наборами аргументов, а pytest собирает каждое созданное выполнение как отдельный тестовый элемент. Фикстуры — это функции, зарегистрированные в pytest, обычно с помощью @pytest.fixture, которые тесты или другие фикстуры запрашивают по имени. Они могут возвращать повторно используемые значения и при необходимости выполнять очистку после завершения области тестирования или светильника. Исправление monkeypatch временно изменяет атрибуты, элементы словаря, переменные sys.pathсреды или текущий рабочий каталог, а затем автоматически отменяет эти изменения после завершения запроса теста или исправления.

Примеры этого модуля — это модульные тесты, но те же функции pytest применяются к более крупной интеграции или функциональным наборам тестов. В примерах используется оператор Python assert; pytest предоставляет возможность проверки утверждений, чтобы в отчетах о сбоях были полезные значения из выражения.

Когда следует использовать эти функции

  • Используйте параметризацию, когда вам нужно перебрать входные данные в тесте или копировать почти одинаковые тестовые функции для немного разных входных данных. Параметризация преобразует описание теста в несколько тестовых элементов, так что каждый вход получает отдельный отчет о пройденном или не пройденном тесте.
  • Используйте исправления , если несколько тестов требуют той же настройки (например, тестовых данных, временного файла или подключения к базе данных) или требуют прогнозируемой очистки после их выполнения.
  • Используйте monkeypatch , когда тесту требуется изолировать код от внешнего состояния, например переменные среды, текущий рабочий каталог или функция, которая вызывает удаленную службу, без постоянного изменения этого состояния.

Сначала вы замените циклы и почти повторяющиеся тесты параметризацией. Затем вы будете использовать фикстуры для совместного использования настройки и очистки, просмотра встроенных фикстур, таких как tmp_path и monkeypatch, а также практики рефакторинга методов настройки и удаления xUnit в фикстуры.

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

Дополнительные сведения см. в документации pytest по assertions, параметризации тестов, фикстуры и monkeypatch.