Автоматически обнаруживать недетерминированное поведение в Python

Это может быть невозможно, но мне просто интересно, есть ли какие-либо инструменты, помогающие обнаруживать недетерминированное поведение при запуске скрипта Python. Возможно, какие-то причудливые опции в отладчике? Я думаю, я воображаю, что теоретически возможно сравнить стек по каждой инструкции или что-то в этом роде между двумя последующими запусками одного и того же кода и, таким образом, выбрать, где начинается какое-либо расхождение.

Я понимаю, что многое происходит под капотом, так что это может быть слишком сложно спросить у отладчика или любого другого инструмента...

По сути, моя проблема заключается в том, что у меня иногда сбой теста, почти наверняка из-за того, что где-то код случайно полагается на порядок вывода при итерации по словарю или что-то в этом роде, где порядок на самом деле не гарантируется. Мне просто нужен инструмент, который поможет мне найти источник такой проблемы :).

Следующий вопрос аналогичен, но было не так много предложений о том, как на самом деле справиться с этим автоматическим или общим способом: Тестирование недетерминированного поведения функции python


person Ben Farmer    schedule 16.07.2021    source источник


Ответы (1)


Я не знаю, как сделать это автоматически, но я бы рекомендовал запускать отладчик при сбое теста, а затем запускать его автоматически (ночью?), пока не произойдет сбой. Затем вы можете изучить переменные и посмотреть, выделяется ли что-нибудь. Если вы используете pytest, запуск с флагом --pdb запустит отладчик в случае сбоя.

Вы также можете использовать Hypothesis для запуска генеративных тестов.

Вы также можете запускать тесты снова и снова, собирая результаты каждого запуска (успешные или неудачные). Когда у вас есть репрезентативная выборка, сравните их, особенно порядок выполнения тестов!

person asthasr    schedule 16.07.2021