Лучший способ измерить время выполнения в автоматических регрессионных тестах - PullRequest
6 голосов
/ 04 февраля 2009

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

В псевдокоде я хочу что-то вроде этого:

cpuTimer.start
runTest
cpuTimer.stop

diff = cpuTimer.getDuration

if diff > prevDiff // Perhaps to within a tolerance
    failTest

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

Будет ли это работать, или цифры будут неправильными?

Как решить эту проблему? Есть ли способ лучше? Существует ли стандартный инструмент для этого типа каперсов?

Ответы [ 2 ]

3 голосов
/ 04 февраля 2009

Вы можете попытаться взглянуть на Perf4J . Я еще не использовал это, но это в моем списке вещей, чтобы исследовать.

С их домашней страницы:

Perf4J для System.currentTimeMillis (), а log4j для System.out.println ()

Руководство разработчика - хорошее введение.

0 голосов
/ 04 февраля 2009

Один из подходов заключается в анализе стандартных файлов xml, которые выводятся из junit, работающего как в maven, так и в ant. Они содержат все данные, которые вам нужны. Хотя существуют инструменты для создания отчетов на их основе, я не знаю ни о каких агрегаторах / наблюдателях.

Если вы поместите их в таблицу базы данных с полями hostname, testname, executetime и buildNumber, вы сможете выполнять большинство необходимых вам действий.

...