Как выполнить модульное тестирование на основе производительности в Python - PullRequest
9 голосов
/ 22 марта 2009

Допустим, моя кодовая база настолько высока, насколько это имеет смысл. (За пределами определенного момента увеличение покрытия не дает хорошего ROI.)

Далее я хочу проверить производительность. Для сравнения кода, чтобы убедиться, что новые коммиты не замедляют работу без необходимости. * Я был очень заинтригован политикой нулевой терпимости Safari для замедлений от коммитов. Я не уверен, что уровень приверженности скорости имеет хорошую рентабельность инвестиций для большинства проектов, но, по крайней мере, я хотел бы получить предупреждение о том, что произошла регрессия скорости, и иметь возможность принять решение по этому поводу.

Среда - это Python для Linux, и предложение, которое также работало для скриптов BASH, сделало бы меня очень счастливым. (Но Python является основным направлением.)

Ответы [ 4 ]

7 голосов
/ 22 марта 2009

Вы, возможно, захотите провести тестирование производительности на системном уровне - протестируйте свое приложение в целом, в контексте, с данными и поведением, максимально приближенными к производственному использованию.

Это непросто, и еще сложнее будет автоматизировать его и получить последовательные результаты.

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

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

Кроме того, производительность модулей в модульном тестировании иногда не отражает их производительность в контексте, поэтому она может вообще не быть полезной.

5 голосов
/ 05 февраля 2010

Хотя я согласен с тем, что тестирование производительности на системном уровне в конечном итоге более актуально, если вы хотите выполнить нагрузочное тестирование стиля Python для UnitTest, FunkLoad http://funkload.nuxeo.org/ делает именно это.

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

2 голосов
/ 23 марта 2009

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

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

Если производительность слишком низкая, то я вырываюсь cProfile , запускаю его с теми же входными данными и пытаюсь определить узкие места.

2 голосов
/ 22 марта 2009

MarkR - это правильно ... тестирование производительности в реальных условиях является ключевым, и может быть несколько хитрым в юнит-тестах. Сказав это, взгляните на модуль cProfile в стандартной библиотеке. По крайней мере, он будет полезен для того, чтобы дать вам относительное представление о том, как быстро все работает, и вы можете запустить его в модульном тесте, хотя, конечно, вы получите результаты в деталях, включая накладные расходы. самой структуры модульного тестирования.

В целом, если ваша цель - нулевая терпимость, вам понадобится что-то гораздо более надежное, чем это ... cProfile в модульном тесте вообще его не урежет и может вводить в заблуждение.

...