Интеграция Allure с многомодульным набором тестов
у нас есть набор тестов, который основан на Maven framework и состоит из нескольких модулей. Используемые модули -
-
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
а -
<!--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-результаты создается.Шаг 2 -
mvn jetty:run
запущен сервером JettyШаг 3 - но когда я иду в localhost: 8080 в моем браузере, у него просто есть заголовок
:/
вопрос
я сомневаюсь, что путь, указанный мной, неверен где-то, поэтому jetty не может найти отчеты, но не мог понять, где. Это для тестов, которые выполняются или для
testng.xml
ресурсов? Или мне нужно исправить путь где-то только в pom?также я пытаюсь использовать зависимости (в parent
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
, однако привлекательность документация указывает классический подход, чтобы выполнить 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
вызов?
что касается того, как вы используете зависимости в Родительском pom, вы на самом деле не разделяли его в своем вопросе, поэтому нелегко помочь. Обычно вы помещаете зависимости в из Родительский pom, которые являются общими для всех модулей (например, классический пример log4j
, то, что каждый модуль будет использовать). В противном случае вы бы использовали dependencyManagement
раздел родительского pom для управления версиями определенных зависимостей, которые могут использоваться одним или несколькими модулями (но модулям нужно будет повторно объявить их, чтобы эффективно использовать их, опуская их версии, указанные родителем). То есть родительский пом является центральным местом управления и гармонизация.
обновление
о /target/allure-results
папка сгенерирована, вам также нужно проверить ее содержимое, чтобы быть допустимым каталогом сайта (то есть, например, он должен содержать index.html
).
создание нового проекта Maven webapp и добавление к нему :
<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>
(Примечание: точно в соответствии с вашим вопросом, но указывая просто на )
и выполнение:
mvn clean install site
mvn jetty:run
сайт Maven (генерируется во время site
фаза, как указано выше) будет доступна в localhost:8080
(URL пристани по умолчанию). Это потому что index.html
был создан.
однако, если я вручную удалю index.html
, пристань покажет Directory: /
страница, список доступных файлов.
следовательно, скорее всего, отчет allure не генерировал index.html
файл, потому что, скорее всего, он не предназначен для его генерации, а просто HTML-отчет, созданный во время test
этап.