Как в pytest реализовать soft assert для нескольких проверок в тесте, чтобы тест не падал на первой ошибке, а выполнил все проверки?

Можно накопить результаты независимых проверок и выполнить один итоговый assert, либо использовать библиотеку soft assertions. Важно, чтобы наличие ошибок всё равно делало тест неуспешным.

Короткий ответ

Что ответить на собеседовании

Можно накопить результаты независимых проверок и выполнить один итоговый assert, либо использовать библиотеку soft assertions. Важно, чтобы наличие ошибок всё равно делало тест неуспешным.

Подробный разбор

Ответ с пояснениями

Можно накопить результаты независимых проверок и выполнить один итоговый assert, либо использовать библиотеку soft assertions. Важно, чтобы наличие ошибок всё равно делало тест неуспешным.

Простой вариант без плагина:

def test_user(user):
    errors = []
    if user.get("name") != "Anna":
        errors.append("Неверное имя")
    if user.get("active") is not True:
        errors.append("Пользователь не активен")
    assert not errors, "\n".join(errors)

Так выполнятся обе проверки. Не продолжайте зависимые действия, если сломано их предусловие: после неудачного создания пользователя остальные ошибки будут шумом. Перехват AssertionError без итогового провала превращает тест в ложноположительный.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее