Я работаю над проектом с трехуровневой иерархией POM. На всех уровнях существуют тесты, и я хочу иногда запускать их все, интеграционные, функциональные и модульные, иногда только модульные, иногда только интеграционные и так далее. Если вся система работает, будет много интересных вариантов.
Если я использую какой-нибудь файл XML для комплекта TestNG и хочу, чтобы его тест выполнялся в IntelliJIdea, достаточно указать «весь проект» для конфигурации запуска костюма. Если у меня разные костюмы, я выбираю их вручную, когда звоню. Но, конечно, я легко могу ошибиться и запустить неправильный костюм, и мы вообще не можем использовать его на сервере хранилища.
Итак, необходимо сделать так, чтобы он автоматически переключался на общий mvn test
команда. И здесь возникает несколько проблем. Что касается нескольких костюмов, я могу выбрать их, создав профили в настройках maven и выбрав активный.
Но даже если у меня есть только один костюм и я указываю на него в root POM, как:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>${testng.suite}</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
( $ {testng.suite} * имя файла передается из настроек maven),
У меня есть следующие проблемы:
1. Дочерний и внучатый модули не видят комплект, поскольку он находится в root. Итак, я должен вставить абсолютный путь для набора. 2. После этого maven или / и его плагин surefire
ищут тестовые классы в домашней папке пакета. В root. И не найти их, конечно.
Итак, у меня есть два хороших варианта на выбор - TestNG и Maven не находят костюм и запускают все тесты, игнорируя пакет. Или они находят набор, не находят тесты и игнорируют их все. И то, и другое неприемлемо.
Конечно, я могу создать соответствующий набор костюмов для каждого модуля, но тогда вся система тестирования становится недоступной для редактирования - любое изменение в группах приводит к выпускам с неизвестным количеством костюмов в кучах. разных модулей. Это даже хуже, чем массовое включение / отключение тестов с помощью какого-либо рукописного скрипта.
Практический обходной путь - не использовать костюмы вообще, а только группы и включать и выключать их, как здесь:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>
<configuration>
<excludedGroups>${groups.off}</excludedGroups>
<groups>${groups.on}</groups>
</configuration>
</plugin>
, передавая разделенные запятыми списки ${groups.off}
и ${groups.on}
из настроек maven. Это работает, но без использования костюмов. Я не могу использовать мощную иерархию включенных / выключенных групп и детских костюмов, предоставляемую TestNG. Это приемлемо для небольшого реального проекта, но неудобно для большого проекта со сложной иерархией. Сила костюмов - главная причина, почему мы в конце концов используем TestNG вместо JUnit!
Итак, последний вопрос: есть ли в Maven или maven-surefire-plugin, или в другом плагине, как, к переключателю «Весь проект» - «Только модуль», который работает в IntelliJIdea?
Перевод для пользователей Eclipse и NetBeans: как мы можем использовать один root файл комплекта TestNG для всех ветвей и подотраслей проекта maven?