Инкрементальный прогон тестового набора

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

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

Я гуглил это и нашел несколько похожих вещей, но не идеально подходит:

  • Ekstazi http://www.ekstazi.org/ выглядит именно так, но он не работает "из коробки" с TestNG (используется в тестовом комплекте) и не является открытым исходным кодом.
  • Infinitest https://infinitest.github.io/ видимому, сосредоточен в основном на интеграции IDE - возможно ли запускать тесты только по требованию (так же, как mvn infinitest)?
  • PIT http://pitest.org/ - это не совсем то, что я ищу, но также необходимо проанализировать охват каждого теста

Также было бы очень полезно запомнить покрытие тестов с (последним) git commit и запустить тесты против последних изменений кода.

Дальнейшие предложения и комментарии по вышеупомянутым приветствуются.

1 ответ

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

Насколько я вижу, он предоставляет довольно надежный API, поэтому написание плагина не должно быть большой проблемой. Вы можете сначала взглянуть на интерфейс InfinitestCore. Если вы используете среду CI, вы можете предоставить список файлов для Infinitest непосредственно из git diff --name-only HEAD~1 который выдаст список файлов, измененных в последнем коммите (например, если вы запускаете свои сборки против каждого коммита).

UPD. Кажется, что есть обходной путь, включающий maven-exec-plugin для явного запуска Infinitest в сборке Maven: вы можете запустить mvn exec:exec из командной строки или из средства запуска Maven Build m2eclipse, чтобы запустить Infinitest против вашего проекта. Я бы посоветовал указать явную фазу сборки, на которой он должен быть запущен, используя executions элемент в POM:

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

Другие вопросы по тегам