Ассерты
Что такое ассерты?
подробнее
Ассерты (Asserts) — это проверки, которые подтверждают, что ожидаемое поведение совпадает с реальным. В Python для этого используется встроенное ключевое слово
assert. Если условиеTrue— тест идет дальше, еслиFalse— тест падает с ошибкойAssertionError.
Примеры
# стандартный assert
assert 5==6
# assert с текстом ошибки
assert 1==2, "Этот текст выведется при ошибке"
Что такое hard и soft assert?
подробнее
Hard Asserts (Жесткие ассерты) - Это стандартный
assert. Как только одинassertвнутри теста не выполняется, выполнение теста немедленно прерывается.
Soft Asserts (Мягкие ассерты) - Доступны с плагиномpytest-check. Если проверка не прошла, тест не останавливается, а продолжает идти до конца, фиксируя все ошибки по пути. В финале отчет покажет список всех найденных нестыковок.
Пример
import pytest_check as check
def test_user_profile(user):
check.equal(user.name, "Alice")
check.equal(user.email, "alice@work.com") # Даже если упадет, тест пойдет дальше
check.is_true(user.is_admin)
Как проверить исключения (Exception)?
подробнее
Иногда нужно проверить, что код должен выдать ошибку (например, при вводе неверного пароля).
Контекстный менеджерpytest.raises«ловит» исключение. Если оно возникло — тест пройден. Если код выполнился без ошибок или упал с другой — тест провален.
Примеры
# простой пример
def test_zero_division():
with pytest.raises(ZeroDivisionError):
1 / 0
# проверка текста ошибки
def test_error_text():
with pytest.raises(ValueError, match="Invalid age"):
user_create(age=-5)
# доступ к деталям исключения
def test_complex_error():
with pytest.raises(MyCustomError) as exc_info:
do_something()
assert exc_info.value.code == 404 # Проверяем атрибуты ошибки
Как проверить предупреждения?
подробнее
Проверка предупреждений полезна например при работе с библиотеками, которые скоро обновятся (deprecation warnings). Работает по той же логике, что и исключения.
Контекстный менеджерpytest.warnsиспользуется, когда код должен выдатьWarning.
Пример
import warnings
def test_warning():
with pytest.warns(UserWarning, match="Deprecated"):
warnings.warn("This is Deprecated", UserWarning)