Как вы запускаете модульные тесты maven с помощью hprof

Я пытаюсь понять, почему модульные тесты выполняются за секунды, а не за миллисекунды. Это серьезная проблема, потому что более 300 тестовых классов занимают 20 минут. Я надеюсь использовать анализатор производительности (например, java HPROF) с моими модульными тестами maven. Затем я проанализирую вывод hprof самостоятельно.


person joseph    schedule 25.08.2017    source источник
comment
Если вы запустите тесты через maven, вы получите вывод о том, как каждый тестовый класс выполняет тесты. После этого вы можете погрузиться в классы с наиболее трудоемкими тестами...   -  person khmarbaise    schedule 26.08.2017
comment
Да. Проблема была не в том, что существует какой-то особый медленный тестовый класс. Это было у всех :(   -  person joseph    schedule 28.08.2017


Ответы (1)


Я добавил приведенную ниже конфигурацию argline в свой блок плагинов surefire.

<configuration>
    <forkMode>never</forkMode>
    <argLine>
        -agentlib:hprof=cpu=samples,lineno=y,depth=3,file=hprof.samples.txt
    </argLine>
    ...
<configuration>

Вы не должны разветвлять JVM. Все тесты должны повторно использовать один и тот же jvm, чтобы это работало.

Это создает файл hprof (см.: https://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html). Это дает вам подсказки о том, какая часть кода замедляет работу. В моем случае это была комбинация reuseFork=never и загрузки класса.

person joseph    schedule 28.08.2017