← назад к разделу

Любой тест сводится к одному: сравнить то, что ожидали, с тем, что получилось. Всё остальное — подготовка данных вокруг этого сравнения. Поэтому сравнения и условия — самая нужная тестировщику часть языка.

проверки идут сверху вниз, срабатывает первая подошедшая if код == 200 elif код == 404 else «успех» «не найдено» «неожиданный код» последняя ветка ловит то, чего не ждали, — и это не формальность

Значение проходит проверки по очереди: сработала первая подходящая — остальные пропускаются.

Сравнение даёт «да» или «нет»

живой пример

код = 200
print(код == 200)     # True
print(код == 404)     # False
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

Два знака равенства == — это вопрос «равно ли?», один = — «положи значение». Перепутать их легко, и ошибка получается тихой, поэтому проговорите вслух: один — кладу, два — спрашиваю.

Операторы сравнения:

живой пример

a, b = 200, 404
print(a == b)     # False — равно
print(a != b)     # True  — не равно
print(a > b)      # False — больше
print(a < b)      # True  — меньше
print(a >= b)     # False — больше или равно
print(a <= b)     # True  — меньше или равно
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

Результат всегда True или False. Эти значения называют логическими, и они пишутся с большой буквы — true с маленькой Python не знает.

Условие: сделать одно или другое

живой пример

код = 404

if код == 200:
    print("Всё хорошо")
else:
    print("Что-то пошло не так")
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

Читается как по-английски: «если код равен 200 — напечатай одно, иначе — другое».

Отступ здесь — часть языка. То, что относится к if, сдвигается вправо на четыре пробела. В большинстве языков для этого фигурные скобки, в Python — отступ. Сдвинули не так — программа либо упадёт с IndentationError, либо сделает не то.

Веток может быть больше двух — тогда посередине elif (сокращение от «else if»):

живой пример

код = 500
if код == 200:
    print("Успех")
elif код == 404:
    print("Не найдено")
elif код == 500:
    print("Ошибка на сервере")
else:
    print(f"Неожиданный код: {код}")
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

Проверки идут сверху вниз, срабатывает первая подошедшая, остальные пропускаются. Последний else ловит всё, что не подошло, — и он не формальность: тест, который молча пропускает неожиданный ответ, хуже, чем тест, который о нём кричит.

Несколько условий сразу

живой пример

код, сумма, найден = 200, 4990, False

if код == 200 and сумма > 0:
    print("Заказ создан и не пустой")

if код == 404 or код == 410:
    print("Заказа нет")

if not найден:
    print("Не нашли")
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

  • and — истина, когда истинны оба условия;
  • or — когда истинно хотя бы одно;
  • not — переворачивает: было True, стало False.

Скобки расставляют так же, как в арифметике, и по той же причине: a or b and c считается не слева направо.

Что считается «пустым»

В условие можно поставить не только сравнение, но и само значение. Пустые вещи считаются ложью, непустые — истиной:

if ответ:          # истина, если строка непустая
    ...
if not список:     # истина, если список пуст
    ...

Ложью считаются: 0, пустая строка "", пустой список [], пустой словарь {} и None — особое значение «ничего нет». Всё остальное — истина.

None заслуживает отдельного внимания: это не ноль и не пустая строка, а «значения нет вовсе». В ответах сервисов оно встречается там, где поле не заполнено, и сравнивают его особым оператором:

живой пример

дата_оплаты = None
if дата_оплаты is None:
    print("Заказ не оплачен")
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

is None, а не == None — так принято и так надёжнее.

Как это выглядит в проверке

Соберём вместе всё, что было:

живой пример

ожидаемый = 200
фактический = 404

if фактический == ожидаемый:
    print("OK")
else:
    print(f"FAIL: ожидали {ожидаемый}, получили {фактический}")
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

Это уже настоящая проверка — только записанная вручную. В настоящем тесте вместо if пишут assert, и сообщение об ошибке язык собирает сам; до этого дойдём в статье про assert и ошибки.

Частые ошибки

Забыли двоеточие в конце строки с ifSyntaxError. Двоеточие обязательно, оно открывает блок.

Сравнили строку с числом"200" == 200 всегда False. Приведите к одному типу: int(код) == 200.

Написали = вместо == — Python не даст это сделать внутри if и скажет SyntaxError; в других языках такая ошибка проходит молча, и это одна из причин, почему Python удобен новичку.

Что решать

Коротко

  • = кладёт значение, == спрашивает «равно ли»; результат сравнения — True или False.
  • if / elif / else выбирает ветку; срабатывает первая подошедшая, else ловит остальное — и он нужен, чтобы неожиданный ответ не проходил молча.
  • Отступ в четыре пробела — часть языка, а не оформление.
  • and, or, not соединяют условия; пустая строка, пустой список, 0 и None считаются ложью.
  • «Значения нет» — это None, и проверяют его через is None.

Что почитать дальше