Hypothesis. Тестирование, которое находит ошибки за вас
Библиотека Hypothesis меняет этот подход. Вы перестаёте придумывать данные вручную. Вы описываете закон, который должен выполняться всегда. А библиотека сама создаёт сотни и тысячи вариантов входных данных, чтобы найти тот единственный, где ваш закон нарушается.
Как это работает в pytest
Перед запуском тестов вы импортируете библиотеку. Вместо обычной тестовой функции вы используете декоратор. Внутри декоратора указываете, какие типы данных библиотека должна генерировать. Например, целые числа, строки или списки. Запускаете pytest, и тест начинает работать автоматически.
Дальше происходит интересное. Hypothesis создаёт случайные данные, прогоняет вашу функцию и проверяет, выполняется ли описанное свойство. Если свойство нарушается, библиотека сужает поиск и находит минимальный пример, который ломает код. Вы получаете точный набор данных: «Вот на этих цифрах всё падает». Вы исправляете код и снова запускаете тест.
Что такое стратегии
Стратегии — это генераторы данных. Библиотека поставляет их в большом количестве. Среди них есть базовые: целые числа, числа с плавающей точкой, строки, логические значения. Есть сложные: списки, словари, кортежи. Есть специализированные: даты, адреса электронной почты, URL, IP-адреса.
Вы комбинируете стратегии, чтобы получить нужные данные. Например, для проверки функции, которая рассчитывает стоимость заказа, вы создаёте генератор, который создаёт цены, количество товаров и процент скидки. Каждый тестовый прогон получает новые комбинации.
Настройка количества примеров
По умолчанию библиотека создаёт сто примеров для одного теста. Это значение можно менять. Для быстрых проверок на локальной машине можно установить меньшее количество. Для серьёзных проектов, где нужно тщательное покрытие, количество увеличивается. Настройка выполняется через параметр в декораторе или через файл конфигурации.
Какие свойства можно проверять
Подойдут любые утверждения, которые должны выполняться всегда. Например: если сложить два числа, сумма не зависит от порядка. Если умножить число на ноль, результат всегда ноль. Если отсортировать список, его длина не меняется, а элементы идут по возрастанию.
В бизнес-логике это работает так. Вы проверяете, что итоговая цена заказа всегда меньше или равна сумме цен отдельных товаров. В работе с датами — что добавление и вычитание одного и того же количества дней возвращает вас в исходную точку. В сетевых протоколах — что после обработки пакета его размер не превышает допустимый лимит.
Поиск граничных значений
Одна из главных функций библиотеки — автоматическое обнаружение ошибок на границах диапазонов. Код часто ломается в крайних точках. Например, функция, которая обрабатывает лимит трафика, может некорректно работать при значениях, близких к максимальному. Hypothesis сама подберёт число, которое вызывает ошибку, и покажет, где именно происходит сбой.
Такой подход экономит часы ручной работы. Вместо того чтобы перебирать десятки значений, вы описываете одно свойство. Библиотека делает остальное. Вы получаете ту же уверенность в качестве, но с минимальными затратами времени.
Практический совет
Начинайте с простых стратегий. Целые числа, строки, списки. Напишите один тест на одно свойство. Посмотрите, как работает библиотека, и какие ошибки находит. Постепенно переходите к составным структурам и специфическим форматам. Так вы получите навык, который повысит качество ваших проверок и освободит время для более важных задач.