Знакомство
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.