Тестирование производительности в unittest - PullRequest
0 голосов
/ 16 ноября 2018

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

Я написал несколько тестов на правильность результата, используя unittest, и я доволен результатом. Мой рабочий процесс заключается в использовании команды «Выполнить юнит-тесты в [FOLDER]» в PyCharm, а затем экспортировать результаты в HTML.

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

Я нашел простой тест: я вижу, сколько времени требуется моей функции для обработки строки, и сравниваю ее со временем, которое занимает string.split(). Конечно, оба метода слишком быстры, поэтому я запускаю их несколько тысяч раз. Поскольку оба являются методами обработки строк, я считаю, что сравнение является разумным в первом приближении. Затем я создал тестовый метод, который берет отношение времени выполнения моего метода к split и проверяет, что оно не превышает 1000. «В пределах 3 порядков функции библиотеки» кажется «достаточно близким» "для меня, так что теперь у меня все работает нормально.

Однако было бы неплохо узнать, каково это соотношение на самом деле. Например, если я переписываю метод для исправления ошибки, но в итоге он работает вдвое медленнее, это то, что мне было бы интересно узнать (даже если он все еще удовлетворяет моему требованию «3 порядка»). Я хотел бы, чтобы в отчете по тестированию HTML отображался фактический результат измерения, а также проход / нет, чтобы я мог вручную осмотреть его и решить, нужно ли ему дополнительное внимание (даже если оно прошло). HTML-отчет уже показывает, сколько времени потребовалось для выполнения данного теста, но он включает в себя не только время выполнения моей функции, но также функцию тестирования и различные настройки / демонтаж, которые не имеют отношения к тому, что я измеряю (как быстро работает функция через строку).

Итак, как я могу включить произвольное измерение в свой тестовый отчет HTML?

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