Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Allure автоматическое создание репорта mvn site


(Ok Tober) #1

Привет, подскажите как сделать автоматичекую генерацию репорта после прохождения тестов на мавене.
Да, я могу ручками прописать mvn site перед тем как захочется посмотреть репорт, но хотелось бы как-то это дело сделать автоматическим.


(Andrew Zakordonets) #2

Вариант 1 : mvn clean test site

Вариант 2 : Добавить в свой pom.xml следующее

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <configuration>
                <executable>mvn</executable>
                <arguments>
                    <argument>clean</argument>
                    <argument>test</argument>
                    <argument>site</argument>
                </arguments>
            </configuration>
        </plugin>
    </plugins>
</build>

И потом запустить mvn exec:exec


(Maksim Smolyakov) #3

В pom.xml для maven-surefire-plugin добавьте параметр testFailureIgnore:

<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
    <testFailureIgnore>true</testFailureIgnore>
...
</configuration>

Отчет Allure будет формироваться даже при наличии проваленных тестов. Поэтому можете добавлять фазу site сразу при запуске прогона:
mvn clean test site jetty:run …


(Ok Tober) #4

Я наверное должен был уточнить, что тесты запускаю с помощью testNG (а вообще в перспективе хочу прикрутить Аллюр к ТимСити, но там свои пироги, так что пока к Мавену) и, грубо говоря, хочу, чтоб когда я из IDE ранил тесты - репорт генерился автоматически, без дополнительных запусков чего-либо руками из командной строки или откуда-либо еще .


(Andrew Zakordonets) #5

Allure ты в любом случае будешь делать через maven. Даже если к Тим Сити подключать, то нужно будет вкрутить депенденси, а дальше уже плагин подберет артифакты и сделает отчет ( да, тут уже мейвен сайт не нужно будет вызывать). Если ты хочешь через ИДЕ запускать, то добавь опцию которую порекомендовал @msmolyakov и создай в IDE кастомную конфигурацию, которая будет запускать твои тесты через maven. Если же ты хочешь запустить один конкретный suite и посмотреть отчет, то тут скорей всего мало чем можно помочь - тебе все равно прийдется запускать генерацию отчетов ручками


(Eugene Moskalenko) #6

Не подскажите как такую команду: mvn clean test site jetty:run - забиндить в мавене на одну кнопку? Я вот как сделал:

  • в правом верхнем углу ИДЕИ выбрал "Run/Debug Configuration"
  • создал там настройку “Maven” и в поле “Comand line” - указал “clean test site jetty:run” (команду в поле указал без кавычек)

тест проходит, но потом Allure выкидывает ошибки:

окт 26, 2015 11:07:36 PM org.sonatype.guice.bean.reflect.Logs$JULSink warn
WARNING: Error injecting: ru.yandex.qatools.allure.report.AllureReportMojo
com.google.inject.ProvisionException: Guice provision errors:

1) No implementation for org.eclipse.aether.RepositorySystem was bound.
  while locating ru.yandex.qatools.allure.report.AllureReportMojo

1 error
  at com.google.inject.internal.InjectorImpl$3.get(InjectorImpl.java:974)
  at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1000)
  at org.sonatype.guice.bean.reflect.AbstractDeferredClass.get(AbstractDeferredClass.java:45)
  at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:84)
  at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision(InternalFactoryToInitializableAdapter.java:52)
  at com.google.inject.internal.ProviderInternalFactory$1.call(ProviderInternalFactory.java:70)
  at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:100)
  at org.sonatype.guice.plexus.lifecycles.PlexusLifecycleManager.onProvision(PlexusLifecycleManager.java:138)
  at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:108)
  at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:55)
  at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:68)
  at com.google.inject.internal.InternalFactoryToInitializableAdapter.get(InternalFactoryToInitializableAdapter.java:45)
  at com.google.inject.internal.InjectorImpl$3$1.call(InjectorImpl.java:965)
  at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1011)
  at com.google.inject.internal.InjectorImpl$3.get(InjectorImpl.java:961)
  at com.google.inject.Scopes$1$1.get(Scopes.java:59)
  at org.sonatype.guice.bean.locators.LazyBeanEntry.getValue(LazyBeanEntry.java:83)
  at org.sonatype.guice.plexus.locators.LazyPlexusBean.getValue(LazyPlexusBean.java:49)
  at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:253)
  at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:245)
  at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:455)
  at org.apache.maven.reporting.exec.DefaultMavenReportExecutor.getConfiguredMavenReport(DefaultMavenReportExecutor.java:318)
  at org.apache.maven.reporting.exec.DefaultMavenReportExecutor.buildReportPlugin(DefaultMavenReportExecutor.java:267)
  at org.apache.maven.reporting.exec.DefaultMavenReportExecutor.buildMavenReports(DefaultMavenReportExecutor.java:148)
  at org.apache.maven.plugins.site.AbstractSiteRenderingMojo.getReports(AbstractSiteRenderingMojo.java:240)
  at org.apache.maven.plugins.site.SiteMojo.execute(SiteMojo.java:121)
  at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
  at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
  at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
  at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
  at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
  at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
  at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
  at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
  at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
  at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
  at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
  at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
  at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:497)
  at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
  at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
  at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
  at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
  at org.codehaus.classworlds.Launcher.main(Launcher.java:47)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:497)
  at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

но если ввести все через терминал - mvn clean test site jetty:run, то все ОК, ошибок нет…

Спасибо :slight_smile: