Ответ
Да, работал. В контексте автоматизации тестирования на Python я использовал декораторы для решения нескольких задач.
Основные сценарии применения:
-
Параметризация тестов в
pytest: Декоратор@pytest.mark.parametrize— это основной инструмент для запуска одного теста с разными наборами входных данных и ожидаемых результатов.import pytest @pytest.mark.parametrize("input, expected", [ ("admin", 200), ("user", 200), ("", 401), ("invalid", 403) ]) def test_login_status_code(input, expected): # Код теста, использующий input status = login(username=input) assert status == expected -
Маркировка тестов: Декораторы
@pytest.mark.smoke,@pytest.mark.regression,@pytest.mark.skipили@pytest.mark.xfailдля категоризации и управления выполнением тестовых наборов.@pytest.mark.smoke @pytest.mark.api def test_api_health_check(): response = requests.get(API_URL + "/health") assert response.status_code == 200 -
Кастомные декораторы для логирования и обработки исключений: Например, декоратор для логирования начала и окончания выполнения каждого теста или для перехвата и логирования определенных исключений без прерывания падения теста.
def log_test_execution(func): def wrapper(*args, **kwargs): test_name = func.__name__ logger.info(f"Starting test: {test_name}") result = func(*args, **kwargs) logger.info(f"Finished test: {test_name}") return result return wrapper @log_test_execution def test_complex_workflow(): # ... код теста
Декораторы позволяют сохранять тестовый код чистым и сфокусированным на бизнес-логике, вынося вспомогательную функциональность (логирование, повторные попытки, setup/teardown) в отдельные, переиспользуемые компоненты.