Интеграционные тесты Maven с 2 модулями

У меня есть приложение с 2 модулями:

  • Web JSF (WAR развернут на Tomcat)

  • Службы REST (WAR развернут на Wildfly)

Для интеграционных тестов я использую плагины maven:

  • плагин maven failsafe

  • Fabric8 плагин maven

Исходный код и ресурсы моих тестов находятся в обоих приложениях src / integration-test / java.

На этапе интеграционных тестов fabric8 создает образ докера Wildfly, копирует построенный артефакт (REST Services WAR), запускает контейнер и запускает тесты. Работает корректно.

Но ... Я хотел бы настроить maven для развертывания 2 приложений (артефакт Web JSF WAR и WAR REST Services) и запускать интеграционные тесты из JSF WAR / src / integration-test / java. Используя плагин fabric8, легко создавать и запускать контейнеры Tomcat и Wildfly, но я не могу найти, как развернуть 2 разных артефакта из разных модулей maven. Может у вас есть идеи?

С уважением, MJ.


person user6492999    schedule 23.12.2017    source источник
comment
Сначала я предлагаю сохранить ваши интеграционные тесты в src/test/java и следовать соглашениям об именах, таким как модульные тесты *Test.java и т. Д., И интеграционные тесты, такие как *IT.java и т. Д. Если вы хотите развернуть 2 приложения, я бы сделал отдельный модуль, который имеет зависимости от двух приложений, которые вы должны нравится развертывать и выполнять развертывание там ... (также контейнеры Docker ..)   -  person khmarbaise    schedule 23.12.2017


Ответы (1)


io.fabric8 docker-maven-plugin поддерживает несколько образов. Вы можете создать модуль, отвечающий за запуск интеграционных тестов. Этот модуль будет зависеть от 2 артефактов WAR, упомянутых вами в вопросе.

    <dependencies>
        <dependency>
            <groupId>com.your.maven.group.here</groupId>
            <artifactId>your-maven-artifact</artifactId>
            <version>${project.version}</version>
            <type>war</type>
        </dependency>

        <dependency>
            ...
        </dependency>
    </dependencies>

Затем вы можете настроить необходимые контейнеры с помощью io.fabric8. Вот пример из моего проекта (некоторые детали удалены для простоты и лаконичности ответа). Этот пример не о Tomcat и Wildfly, а просто для иллюстрации идеи.

    <plugin>
        <groupId>io.fabric8</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <configuration>
            <images>
                <image>
                    ....
                </image>
                <image>
                    <name>my-admin-site</name>
                    <alias>admin-ux</alias>
                    <build>
                        <from>jetty</from>
                        <ports>
                            <port>8080</port>
                        </ports>
                        <runCmds>
                            <run>mkdir -p /run/jetty /tmp/jetty</run>
                            <run>chmod -R 1777 /tmp</run>
                            <run>chown -R jetty:jetty /var/lib/jetty /run/jetty /tmp/jetty</run>
                        </runCmds>
                        <assembly>
                            <mode>dir</mode>
                            <basedir>/var/lib/jetty</basedir>
                            <inline xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2">
                                <id>my-admin-ux</id>
                                <dependencySets>
                                    <dependencySet>
                                        <includes>
                                            <include>com.your.maven.group.here:your-maven-artifact:war</include>
                                        </includes>
                                        <outputDirectory>./webapps</outputDirectory>
                                        <outputFileNameMapping>myAdminSite.war</outputFileNameMapping>
                                    </dependencySet>
                                </dependencySets>
                                <files>
                                    <file>
                                        <source>src/main/docker/admin-ux/resources/service.properties</source>
                                        <outputDirectory>./resources</outputDirectory>
                                    </file>
                                </files>
                            </inline>
                            <user>jetty:jetty</user>
                        </assembly>
                    </build>
                    <run>
                        <ports>
                            <port>10540:8080</port>
                        </ports>
                        <links>
                            <link>zookeeper:zookeeper</link>
                        </links>
                    </run>
                </image>
                <image>
                    .....
                </image>
            </images>
        </configuration>
    </plugin>
person Alex M981    schedule 23.12.2017