TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.3K subscribers
Post #7583 3.26K
🛠 Проблема: «грязные» тестовые данные

Когда вы тестируете функции, работающие с многострочным текстом, JSON или сложными объектами, декоратор @pytest.mark.parametrize быстро превращается в «простыню» текста.

Основные боли:
- Нарушение отступов: Многострочные строки (`"""`) ломают структуру кода.
- Дублирование логики: В каждом тесте приходится вызывать textwrap.dedent или Path().read_text().
- Нечитаемые ID: По умолчанию pytest генерирует ID теста из самих данных. Если данных много, лог тестов превращается в хаос.

Вместо того чтобы передавать в parametrize сырой список кортежей, создайте функцию (например, `nb_case`), которая подготавливает данные.

1. Умная обработка данных

Ваш хелпер может сам решать, что перед ним: путь к файлу или текст.

def nb_case(text, short, long, id=None):
if "\n" in text:
# Это текст: убираем лишние отступы
text = textwrap.dedent(text.lstrip("\n"))
else:
# Это путь: читаем файл
id = id or text
text = Path(text).read_text()

# Возвращаем специальный объект pytest.param
return pytest.param(text, short, long, id=id)


2. Использование pytest.param

Главный секрет — возвращать не просто кортеж, а pytest.param.

Это позволяет:
- Назначать понятные ID (имена тестов).
- Добавлять метки (например, `marks=pytest.mark.xfail`) к конкретным наборам данных.

🔗 Ссылка на статью

📍 Навигация: Вакансии • Задачи • Собесы

Библиотека питониста

#буст
  • 👍 7
  • ❤‍🔥 2
  • ❤ 1
More from @pyproglib
  1. Sep 25, 2026🔥 Курс «ИИ для разработчиков» уже стартовал И мы решили открыть первое занятие всем — мож…
  2. Sep 20, 2026👻 94% токенов уходят не на код Анализ запусков показал: основная часть токенов уходит на…
  3. Sep 19, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  4. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  5. Sep 15, 2026⏱️ Справочник по Big-O в Python Для тех, кто хочет писать не просто работающий, а эффектив…
  6. Sep 14, 2026🤪 Если бы можно было задать один вопрос про AI в разработке — что бы вы спросили? Как выб…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →