Один общий файл комплекта TestNG для всех веток проекта maven? - PullRequest
0 голосов
/ 10 апреля 2020

Я работаю над проектом с трехуровневой иерархией 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...