Что означает Flaky: проверка гипотез дает ненадежные результаты?

Я использую пакет python гипотезы для тестирования.

Я получаю следующую ошибку:

Ненадежный: Гипотеза test_visiting дает ненадежные результаты: сфальсифицировано при первом вызове, но нет при последующем.

Насколько я могу судить, тест работает корректно.

Как мне обойти это?


person sureshvv    schedule 02.08.2015    source источник


Ответы (2)


Это означает более или менее то, что оно говорит: у вас есть тест, который не прошел в первый раз, но прошел успешно во второй раз при повторном запуске с тем же примером. Это может быть ошибкой гипотезы, но обычно это не так. Наиболее распространенной причиной этого является то, что у вас есть тест, который зависит от некоторого внешнего состояния, например. если вы используете системный генератор случайных чисел, а не предоставленный Hypothesis, или если ваш тест создает некоторые файлы и терпит неудачу только в том случае, если файлы не существовали в начале теста. Вторая наиболее распространенная причина этого заключается в том, что ваш сбой является ошибкой рекурсии, а пример, который вызвал ее на одном уровне вызовов функций, не сработал на другом.

Вы действительно не предоставили достаточно информации, чтобы сказать, что на самом деле происходит, поэтому трудно дать более конкретный совет. Если вы используете последнюю версию Hypothesis (например, 1.9.0, безусловно, делает это), вам должна была быть предоставлена ​​довольно подробная диагностика того, что происходит — она расскажет вам, какое исходное исключение вы получили, и сообщит, если переданные значения, казалось, менялись между вызовами.

person DRMacIver    schedule 02.08.2015
comment
Как провалился тест? В тесте не было ошибочных утверждений. Моему тесту снова предоставляются те же аргументы, и когда они предоставляются во второй раз, внутри теста выбирается другой путь. Но он не делает никаких ошибочных утверждений. - person sureshvv; 02.08.2015
comment
Любое исключение вызовет сбой, а не только утверждения. Как я уже сказал: вам должна быть показана трассировка стека исключения, вызвавшего ваш первоначальный сбой. Очень сложно диагностировать, что происходит, если вы не предоставите никакой соответствующей информации. - person DRMacIver; 02.08.2015
comment
Трассировка стека не печаталась. Единственная ошибка, которая отображалась, была ошибка Flaky. При возникновении указанной ошибки может отображаться дополнительная информация. - person sureshvv; 03.08.2015
comment
Мой тест не является идемпотентным по отношению к входным данным и работает иначе, когда одни и те же входные данные предъявляются во второй раз. Может с этим как-то связано. - person sureshvv; 03.08.2015
comment
Ok. Тогда да, это именно то, что происходит. Как я и сказал. Эта ошибка вызвана тестом, который не выполняет одно и то же действие при повторном запуске. Если вы не получаете трассировку стека, значит, вы используете старую версию Hypothesis. - person DRMacIver; 04.08.2015

Одна вещь, о которой я не часто упоминал, и это может быть относительно новым поведением, заключается в том, что вы можете захотеть увеличить крайний срок своих тестов. По моему опыту, если один тестовый пример не проходит из-за пропущенного срока, а второй проходит успешно, вы будете рассматривать это как «ненадежный» сбой теста.

@hypothesis.settings(deadline=500)

Мне было трудно найти подходящую документацию об этом поведении, которую я мог бы полностью понять лично, но это, похоже, исправило это для меня.

person damd    schedule 25.11.2019
comment
Это хороший момент, но я, кажется, припоминаю, что на самом деле он упоминает сбой в сроках как причину ненадежного сбоя. - person Matthew Schinckel; 15.03.2021