Ответ
Я активно использую параметризацию в pytest для тестирования одного сценария с разными наборами входных и ожидаемых данных. Это позволяет избежать дублирования кода и четко структурировать тестовые случаи.
Основной инструмент — декоратор @pytest.mark.parametrize.
Простой пример: Тестирование функции валидации email.
import pytest
# Функция, которую тестируем (условно)
def is_valid_email(email):
return "@" in email and "." in email.split("@")[-1]
# Параметризованный тест
@pytest.mark.parametrize(
"email, expected",
[
("user@example.com", True), # Валидный email
("invalid-email", False), # Не содержит @
("user@com", False), # Нет точки в домене
("", False), # Пустая строка
]
)
def test_email_validation(email, expected):
"""Тест проверяет валидацию email для разных входных данных."""
result = is_valid_email(email)
assert result == expected, f"Failed for email: {email}"
При запуске pytest создаст и выполнит четыре отдельных тестовых случая.
Параметризация фикстур: Когда нужно, чтобы разные тесты получили разные предустановленные данные, можно параметризовать саму фикстуру.
import pytest
@pytest.fixture(params=["chrome", "firefox", "edge"])
def browser(request):
"""Фикстура запускает тест для каждого из перечисленных браузеров."""
browser_name = request.param
# Код инициализации драйвера для browser_name
driver = webdriver.Remote(command_executor=URL, options=options)
yield driver
driver.quit()
def test_login(browser):
"""Этот тест запустится три раза — для каждого браузера."""
browser.get("https://example.com/login")
# ... шаги теста
Чтение данных из внешних источников: Для сложных сценариев я выношу тестовые данные в JSON, CSV или YAML файлы.
import json
import pytest
def load_test_data():
with open("test_data/login_cases.json") as f:
return json.load(f)
@pytest.mark.parametrize("credentials", load_test_data())
def test_login_with_external_data(credentials):
username = credentials["username"]
password = credentials["password"]
expected_result = credentials["expected"]
# ... логика теста
Ключевые преимущества такого подхода в QA:
- Наглядность: Все тестовые случаи видны сразу в одном месте (декораторе или файле с данными).
- Легкость поддержки: Добавление нового тест-кейса — это просто добавление новой строки в список параметров.
- Детальные отчеты: В отчете Allure каждый параметризованный запуск отображается как отдельный тест-кейс с его уникальными параметрами, что упрощает анализ падений.