Многомодульный модуль Maven 2

Недавно я начал переносить свой проект с муравья на maven. У меня есть два модуля в моем приложении, которые я могу построить с помощью maven.

Теперь у меня есть проект автоматизированных тестов, который использует веб-драйвер для тестирования функциональности пользовательского интерфейса. Что я пытаюсь сделать с помощью maven, так это построить обе войны модулей и развернуть их на tomcat. Затем запустите для них тесты автоматизации и пройдите сборку, если тест автоматизации пройден. Я настроил свой pom следующим образом (просто упомянул важную часть):

<packaging>pom</packaging>
<modules>
        <module>../module1</module>
        <module>../module2</module>
</modules>

Теперь оба проекта собираются и развертываются, но не запускают тесты автоматизации. Причина, по которой я думал, в том, что тип упаковки POM. Но если я изменю его на войну, он начнет выдавать ошибку.

Я могу подумать о создании третьего pom для автоматизации и родительского pom, чтобы включить его также как модуль. Но я думаю, правильный ли это путь. Это должен быть очень распространенный сценарий, и maven должен поддерживать его напрямую.


person Ankit Bansal    schedule 07.10.2010    source источник
comment
ваш тестовый модуль - это другой проект или просто часть структуры упаковки?   -  person jmj    schedule 07.10.2010
comment
Затем я бы предложил создать pom для этого проекта и правильно установить его в иерархии, а затем запустить mvn compile test   -  person jmj    schedule 07.10.2010
comment
Как правильно установить иерархию. Единственное, что я хочу удостовериться, это то, что всякий раз, когда я запускаю эту сборку, она должна собирать оба зависимых проекта, а затем запускать эти тесты.   -  person Ankit Bansal    schedule 07.10.2010
comment
О каком модуле автоматизации идет речь? Где находятся тесты? Как вы развертываете на сервере tomcat? Для получения ответа ИМО не хватает многих важных деталей.   -  person Pascal Thivent    schedule 07.10.2010
comment
Привет, Паскаль, модуль автоматизации — это тесты автоматизации на основе WebDriver для тестирования пользовательского интерфейса. Это зависит от веб-войны, но нет зависимости от пакета. Я развертываю tomcat с помощью плагина грузового maven. Я хочу создавать веб-войны из исходного кода, на лету, непосредственно перед запуском тестов автоматизации, затем развертывать на tomcat и затем запускать тесты. Я могу сделать все это, используя сборку ant, но не могу использовать maven.   -  person Ankit Bansal    schedule 07.10.2010


Ответы (3)


(...) модуль автоматизации — это тесты автоматизации на основе WebDriver для тестирования пользовательского интерфейса. Это зависит от веб-войны, но нет зависимости от пакета. Я развертываю tomcat с помощью плагина грузового maven. Я хочу создавать веб-войны из исходного кода, на лету, непосредственно перед запуском тестов автоматизации, затем развертывать на tomcat и затем запускать тесты. Я могу сделать все это, используя сборку ant, но не могу использовать maven

Это определенно выполнимо (и я делал это много раз). Но я не уверен, что понимаю вашу текущую структуру проекта (особенно, где находятся тесты).

Вот структура, которую я предлагаю:

.
├── functests
│   ├── pom.xml            // here we configure maven to run cargo & it tests
│   └── src
│       └── it
│           ├── java
│           │   └── ...    // functional tests will go here
│           └── resources
├── pom.xml                // aggregating pom
└── mywebapp               // the application under test
    ├── pom.xml
    └── src
        ├── main
        │   ├── java
        │   ├── resources
        │   └── webapp
        └── test
            ├── java
            └── resources

Подробную информацию о настройке pom см. в разделе Функциональное тестирование с помощью Maven, Cargo и Selenium, он содержит все необходимые данные.

person Pascal Thivent    schedule 08.10.2010

Я не думаю, что 2 боевых модуля с общим тестовым модулем интеграции — это очень распространенный сценарий.

Однако вы можете заставить это работать с Hudson.

  • Настройте задание в Hudson для развертывания pom родительского уровня, что приведет к развертыванию военных модулей, как у вас сейчас.
  • В случае успеха предыдущего задания запустите другое задание для запуска интеграционных тестов.

Вы можете использовать профили для активации интеграционного тестирования и т. д. специально для предотвращения выполнения интеграционных тестов во время первого задания.

Ранее в этом году я настроил базовый сервер Hudson примерно за час.
Hudson напрямую поддерживает сборки maven, а также предоставляет место для сайта maven для ваших проектов, включая все отчеты о качестве и т. д.
также можно настроить Hudson для «отслеживания» вашего SCM и инициирования сборки, когда он идентифицирует фиксацию.

person crowne    schedule 07.10.2010
comment
Спасибо, Crowne. Я тоже думал следовать аналогичному подходу. Я использую круиз-контроль для непрерывной интеграции. Я хотел получить представление о том, является ли создание веб-войн и их развертывание из файла сборки тестов автоматизации (которые мы делаем в настоящее время с помощью ant) ​​хорошей идеей или нет, и если да, то как это сделать с помощью maven. - person Ankit Bansal; 07.10.2010

"Я могу подумать о создании третьего POM"
У вас есть только два POM? Каждому проекту/модулю нужен свой POM.

Дополнительную информацию об интеграционных тестах с maven см. здесь: http://docs.codehaus.org/display/MAVENUSER/Maven+and+Integration+Testing

Изменить: я не совсем понимаю, как выглядит макет вашего проекта. Но я предполагаю, что это должно выглядеть как-то так:

Структура файла

myWebApp/
    pom.xml
    myWebApp-web/
        pom.xml
    myWebApp-integration-tests/
        pom.xml

/myWebApp/pom.xml

<packaging>pom</packaging>
<modules>
    <!-- packaging: war; here are the sources and unit tests -->
    <module>myWebApp-web</module>

    <!-- packaging: java; here are the integration tests -->
    <module>myWebApp-integration-tests</module>
</modules>

При такой настройке /myWebApp/mvn deploy выполнит следующие шаги:

  1. Сборка корневого проекта (ничего не делает, так как нет исходников)
  2. Построить myWebApp-веб
  3. Разверните myWebApp-web (должен быть настроен в /myWebApp/myWebApp-web/pom.xml)
  4. Выполнение тестов в myWebApp-integration-tests

Это должно делать то, что вы хотите.

person Cephalopod    schedule 07.10.2010
comment
Спасибо за ответ Ариан. У меня уже три помпона. Я пытаюсь добиться того, чтобы эта третья сборка проекта должна была построить первые два, а затем запускать только тесты. - person Ankit Bansal; 07.10.2010
comment
Я расширил свой ответ соответственно. - person Cephalopod; 07.10.2010
comment
Большое спасибо, Ариан... но это не помогает. Я попытался сделать свой вопрос более содержательным. Посмотрим, смогу ли я сейчас ясно объяснить. Я не думаю, что предоставленное вами решение поможет в моем случае. - person Ankit Bansal; 07.10.2010