Интеграция Allure с мультимодульным набором тестов

У нас есть набор тестов, основанный на структуре maven и состоящий из мультимодуля. Используемые модули -

  • project [нет кода]
  • test [@Test классы включены в /src/main/java, testng.xml в /src/main/resources ]
  • core [настроен для выполнения основных утилит для настройки среды]
  • driver [настраивает тестовые ведра и модулирует генерацию отчетов с помощью testng]

Попытка интегрировать создание отчета с использованием allure, я добавил следующее к проекту pom.xml -

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven-surefire-plugin.version}</version>
                <configuration>
                    <testFailureIgnore>false</testFailureIgnore>
                    <argLine>
                        -javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar
                    </argLine>
                    <properties>
                        <property>
                            <name>listener</name>
                            <value>ru.yandex.qatools.allure.junit.AllureRunListener</value>
                        </property>
                    </properties>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjweaver</artifactId>
                        <version>${aspectj.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>${maven-deploy-plugin.version}</version>
            </plugin>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.2.10.v20150310</version>
                <configuration>
                    <webAppSourceDirectory>${project.build.directory}/site/allure-maven-plugin</webAppSourceDirectory>
                    <stopKey>stop</stopKey>
                    <stopPort>1234</stopPort>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

<reporting>
    <excludeDefaults>true</excludeDefaults>
    <plugins>
        <plugin>
            <groupId>ru.yandex.qatools.allure</groupId>
            <artifactId>allure-maven-plugin</artifactId>
            <version>2.2</version>
        </plugin>
    </plugins>
</reporting>

Также зависимости для того же самого теста pom.xml as -

<!--allure related dependencies-->
        <dependency>
            <groupId>ru.yandex.qatools.allure</groupId>
            <artifactId>allure-testng-adaptor</artifactId>
            <version>1.4.16</version>
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.github.detro.ghostdriver</groupId>
            <artifactId>phantomjsdriver</artifactId>
            <version>1.0.4</version>
        </dependency>
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-all</artifactId>
            <version>1.3</version>
        </dependency>
        <dependency>
            <groupId>ru.yandex.qatools.allure</groupId>
            <artifactId>allure-java-annotations</artifactId>
            <version>1.5.0.RC2</version>
        </dependency>

Шаг 1. После выполнения тестов mvn exec:java -pl driver я вижу созданную папку /target/allure-results.

Шаг 2 - mvn jetty:run читает начатый сервер Jetty

Шаг 3. Но когда я перехожу к localhost: 8080 в моем браузере, у него есть заголовок

Каталог:/

Вопрос

  • Я сомневаюсь, что указанный мной путь некорректен, поэтому причал не может найти отчеты, но не мог понять, где. Это для тестов, которые выполняются или для testng.xml в ресурсах? Или мне нужно исправить путь где-то только в помпе?

  • Также я пытаюсь использовать зависимости (в родительском project pom) правильно?


Обновление 1

Используемая конфигурация exec следующая:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.5.0</version>
            <configuration>
                <mainClass>com.driver.Driver</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

Оцените любой ответ.

Ответ 1

Есть много открытых пунктов по этому вопросу, которые не ясны из-за отсутствия деталей.

В соответствии с вашим описанием структура проекта имеет следующий вид:

project
  |
  |--- test-module
  |--- core-module
  |--- driver-module (depends on `core` and `test`)
  |
   \ pom.xml

Фактически вы выполняете тесты только через модуль driver и через exec-maven-plugin, однако в документации allure указан классический подход, чтобы выполнить фазу test, то есть фазу Maven, предназначенную для выполнения тестов (через maven-surefire-plugin, автоматически вызываемую Maven во время этот этап через привязки по умолчанию).

Фактически вы настроите maven-surefire-plugin, как указано в его документации: указание его в родительский файл pom.xml будет в этом случае прекрасным, в разделе pluginManagement > Maven заберет свою глобальную конфигурацию во время default-test выполнение привязки по умолчанию maven-surefire-plugin.

Однако весь механизм связан с фазой test. Вы выполняете его?

Вы не указали подробности о exec-maven-plugin и о том, что он должен делать в отношении модуля driver и почему вы должны использовать jetty-maven-plugin для просмотра отчета. Обычно отчеты об испытаниях доступны и могут быть видны прямые файлы html, не нужно размещать их на встроенном сервере причала, если это не требуется общим процессом (CI, развертывание на сервер компании и т.д.). Эти отчеты также должны быть доступны на сайте проектной документации, которые могут быть сгенерированы с помощью site жизненного цикла и maven-site-plugin.

Из ваших данных вы делитесь конфигурацией jetty-maven-plugin, указывающей на папку site: это папка, сгенерированная во время фазы test (если вы ее вызываете)? Или во время вызова exec?

Относительно того, как вы используете зависимости в родительском помпе, вы фактически не делились им в своем вопросе, поэтому нелегко помочь. Обычно вы добавляете зависимости в разделе dependencies родительского pom, которые являются общими для всех модулей (например, классический пример - log4j, то, что будет использовать каждый модуль). В противном случае вы должны использовать раздел dependencyManagement родительского pom для управления версиями определенных зависимостей, которые могут использоваться одним или несколькими модулями (но модули должны будут повторно объявить их эффективно использовать их, не указывая их версии, хотя, указали родителем). То есть родительский пот является центральным местом управления и гармонизации.


Обновить

Что касается созданной папки /target/allure-results, вам также необходимо проверить ее содержимое как допустимого каталога сайта (то есть, например, он должен содержать index.html).

Создание нового проекта Maven Webapp и добавление следующего в его файл pom.xml:

<build>
    <plugins>
        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>9.2.10.v20150310</version>
            <configuration>
                <webAppSourceDirectory>${project.build.directory}/site</webAppSourceDirectory>
                <stopKey>stop</stopKey>
                <stopPort>1234</stopPort>
            </configuration>
        </plugin>
    </plugins>
</build>

(Примечание: точно в соответствии с вашим вопросом, но указывая просто на каталог site)

И выполнение:

mvn clean install site
mvn jetty:run

сайт Maven (сгенерированный в фазе site, как показано выше) будет доступен по адресу localhost:8080 (по умолчанию URL-адрес приземления). Это потому, что был создан index.html.

Однако, если я вручную удалю index.html, причал покажет страницу Directory: /, в которой перечислены доступные файлы.

Следовательно, скорее всего, отчет allure не генерирует файл index.html, потому что, скорее всего, он не предназначен для его создания, а просто HTML-отчет, созданный во время фазы test.