Время использования, прошедшее с момента утверждения в модульных тестах

Я столкнулся с ситуацией, в которой я хочу убедиться, что если метод изменен, для выполнения не требуется больше, чем X ms (по сути, если эта функция медленнее, это замедлит результаты поиска на нашей веб-странице, и это плохо влияет на продажи).

У нас есть модульные тесты (в частности, код выполняется под python, и мы используем py.test), первая идея состоит в том, чтобы утверждать, что если функция не выполнялась менее чем за X ms, то отметьте тест как сбой ( или поднять предупреждение).

Однако это кажется опасным (например, не все компьютеры имеют одинаковую скорость), а также я не совсем уверен, что работа unit test.

Кто-то сталкивался с подобной ситуацией? Для меня скорость - это особенность, и я хочу, чтобы такая функция не терялась в будущем по мере развития кода.

Если модульное тестирование не является ответом, какие другие альтернативы вы бы порекомендовали?

Спасибо

Ответы

Ответ 1

Вы можете изучить возможность использования плагина pytest-timeout для начала. В настоящее время он позволяет указывать секунды (как плавающие). Но он может быть расширен, чтобы работать с более адаптируемыми таймингами, такими как числа pystone, поэтому было бы измерение того, насколько быстро ваш компьютер выполнит тестовый тест pystone, который может быть кэширован, а затем вы укажете, сколько "pystones" вашего теста (ов) разрешено брать.

Ответ 2

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

Там pyunitperf доступен модуль, который имеет ограничения по времени, а также нагрузочное тестирование. Он не был обновлен в течение длительного времени (2009), но будет хорошим местом для начала, если вы собираетесь катить свои собственные.

И помните, что время теста в ms не собирается ничего вам говорить - но пока вы используете это только для сравнения производительности по версиям, все должно быть в порядке.