Любой тест сводится к одному: сравнить то, что ожидали, с тем, что получилось. Всё остальное — подготовка данных вокруг этого сравнения. Поэтому сравнения и условия — самая нужная тестировщику часть языка.
Значение проходит проверки по очереди: сработала первая подходящая — остальные пропускаются.
Сравнение даёт «да» или «нет»
живой пример
код = 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 и ошибки.
Частые ошибки
Забыли двоеточие в конце строки с if — SyntaxError. Двоеточие
обязательно, оно открывает блок.
Сравнили строку с числом — "200" == 200 всегда False. Приведите к одному
типу: int(код) == 200.
Написали = вместо == — Python не даст это сделать внутри if и скажет
SyntaxError; в других языках такая ошибка проходит молча, и это одна из
причин, почему Python удобен новичку.
Что решать
Коротко
=кладёт значение,==спрашивает «равно ли»; результат сравнения —TrueилиFalse.if / elif / elseвыбирает ветку; срабатывает первая подошедшая,elseловит остальное — и он нужен, чтобы неожиданный ответ не проходил молча.- Отступ в четыре пробела — часть языка, а не оформление.
and,or,notсоединяют условия; пустая строка, пустой список,0иNoneсчитаются ложью.- «Значения нет» — это
None, и проверяют его черезis None.
Что почитать дальше
- Списки и словари — где живут данные, которые вы проверяете.
- assert и ошибки — как из
ifполучается настоящий тест.