是否有适合 Maven 的 HTML Junit 报告插件?

Posted

技术标签:

【中文标题】是否有适合 Maven 的 HTML Junit 报告插件?【英文标题】:Is there a decent HTML Junit report plugin for Maven? 【发布时间】:2011-02-20 05:58:42 【问题描述】:

我发现surefire-report 插件非常不适合我的工作方式。我一直在清理项目,我不想每次想在浏览器中查看测试报告时都花费 5 分钟来重建整个站点。

如果我输入mvn surefire-report:report-only,生成的报告太难看,难以阅读。

我正在寻找类似 ant 的 JUnitReport 任务。是否已经有一个可用的?

【问题讨论】:

【参考方案1】:

确实,在每次构建时生成整个站点显然不是一种选择。但问题是 mvn surefire-report:report-only 没有创建 css/*.css 文件,因此结果很糟糕。这是在SUREFIRE-616 登录的(但这并不意味着会发生某些事情)。就我个人而言,我不太会使用 html 报告,所以我可以忍受,但这不是一个好的答案,所以这里有一个基于 ant 任务 (*sigh*) 的解决方法:

  <plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
      <execution>
        <id>test-reports</id>
        <phase>test</phase>
        <configuration>
          <tasks>
            <junitreport todir="target/surefire-reports">
              <fileset dir="target/surefire-reports">
                <include name="**/*.xml"/>
              </fileset>
              <report format="noframes" todir="target/surefire-reports"/>
            </junitreport>
          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
    <dependencies>
      <dependency>
        <groupId>ant</groupId>
        <artifactId>ant-junit</artifactId>
        <version>1.6.2</version>
      </dependency>
    </dependencies>
  </plugin>

更新:我最初的想法是“按需”运行 Maven AntRun 插件以生成报告……但这不是我发布的内容,我将其绑定到 test 阶段。 .. 但是我没有考虑测试失败的情况(这会停止构建并阻止 AntRun 插件的执行)。所以,要么:

    不要将 AntRun 插件绑定到test 阶段,将配置移到execution 之外,并在需要时在命令行上调用mvn antrun:run 以生成报告。

    或使用 test mojo 的 testFailureIgnore 选项,并在surefire插件配置中将其设置为true:

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

    或使用 -D 参数从命令行设置此表达式:

    $ mvn test -Dmaven.test.failure.ignore=true
    

我认为选项 #1 是最佳选项,您不一定要生成报告(尤其是在测试通过时)并系统地生成它们可能会长期减慢构建速度。我会“按需”生成它们。

【讨论】:

它是打开一个子进程还是只运行嵌入的蚂蚁?如果这只是嵌入 ant 和它的任务,这正是我需要的。 @jimmy 在同一个进程中运行ant任务。 谢谢,这正是我需要知道的! 看看maven.apache.org/surefire/maven-failsafe-plugin。构建到“验证”阶段,在生成报告后,它将在该点失败。 是否可以更改 html 报告名称?所有的 html 报告都是以“junit-noframes”的名称生成的。【参考方案2】:

感谢 Pascal,我找到了一个改进的解决方案来做我想做的事:

<plugin>
    <!-- Extended Maven antrun plugin -->
    <!-- https://maven-antrun-extended-plugin.dev.java.net/ -->
    <groupId>org.jvnet.maven-antrun-extended-plugin</groupId>
    <artifactId>maven-antrun-extended-plugin</artifactId>
    <executions>
      <execution>
        <id>test-reports</id>
        <phase>test</phase>
        <configuration>
          <tasks>
            <junitreport todir="target/surefire-reports">
              <fileset dir="target/surefire-reports">
                <include name="**/*.xml"/>
              </fileset>
              <report format="noframes" todir="target/surefire-reports"/>
            </junitreport>
          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
    <dependencies>
      <dependency>
        <groupId>org.apache.ant</groupId>
        <artifactId>ant-junit</artifactId>
        <version>1.8.0</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ant</groupId>
        <artifactId>ant-trax</artifactId>
        <version>1.8.0</version>
      </dependency>
    </dependencies>
  </plugin>

这个版本使用了更新版本的 ant,最重要的是。但是,我仍然没有找到在测试失败时生成测试报告的方法。我该怎么做?

【讨论】:

你有没有办法在测试失败后生成报告? 您好,在 MAVEN 中配置 ANT 后,Surefire 报告在 html 报告中生成重复测试。我怎样才能避免这种情况?【参考方案3】:

您可以设置-Dmaven.test.failure.ignore=true在测试失败时生成测试报告。

【讨论】:

【参考方案4】:

这是我使用目标 site maven-surefire:report 的方法:

    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-report-plugin</artifactId>
                <version>2.16</version>
                <configuration>
                    <showSuccess>false</showSuccess>
                    <outputDirectory>$basedir/target/surefire-reports</outputDirectory>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <outputDirectory>$basedir/target/surefire-reports</outputDirectory>
                </configuration>
            </plugin>
        </plugins>
    </reporting>

</project>

【讨论】:

【参考方案5】:

这就是我的工作:

# Run tests and generate .xml reports
mvn test

# Convert .xml reports into .html report, but without the CSS or images
mvn surefire-report:report-only

# Put the CSS and images where they need to be without the rest of the
# time-consuming stuff
mvn site -DgenerateReports=false

转到 target/site/surefire-report.html 以获取报告。

测试运行后,其余两个对我来说大约在 3.5 秒内运行。

希望对您有所帮助。享受吧!

【讨论】:

这应该被认为是获得结果和答案的最简单方法。【参考方案6】:

创建一个新的 maven 运行配置和目标 =>

surefire-report:report site -DgenerateReports=false

这可以帮助您使用 css 获得更好的报表视图。

【讨论】:

谢谢!对于故障安全:mvn surefire-report:failsafe-report-only site -DgenerateReports=false【参考方案7】:

运行以下命令

mvn clean install surefire-report:report  

您可以在以下位置找到报告

basedir/target/site/surefire-report.html

更多详情请参考以下链接

http://maven.apache.org/surefire/maven-surefire-report-plugin/usage.html

【讨论】:

您使用的是哪个版本?因为在 2.22.0 中运行该命令时缺少 css 和图像文件【参考方案8】:

如上所述添加这个pom 1.option从执行阶段取出配置 保持在外面,运行 mvn 'verify' 然后再次运行 mvn 'antrun:run'.. 然后你也可以看到失败的测试用例

<plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
            <execution>
                <id>test-reports</id>
                <phase>test</phase>
                <goals>
                    <goal>run</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <tasks>
                <junitreport todir="target/surefire-reports">
                    <fileset dir="target/surefire-reports">
                        <include name="**/*.xml" />
                    </fileset>
                    <report format="noframes" todir="target/surefire-reports" />
                </junitreport>
            </tasks>
        </configuration>
        <dependencies>
            <dependency>
                <groupId>ant</groupId>
                <artifactId>ant-junit</artifactId>
                <version>version</version>
            </dependency>
        </dependencies>
    </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
                  <version>version</version>
            </plugin>

【讨论】:

以上是关于是否有适合 Maven 的 HTML Junit 报告插件?的主要内容,如果未能解决你的问题,请参考以下文章

在 Maven/Junit/DBUnit 项目的集成测试之前/之后创建/删除数据库的最佳方法?

Maven - 在 JUnit 测试之前将 webapp 部署到 tomcat

Java 9 + maven + junit:测试代码是不是需要自己的 module-info.java 以及放在哪里?

JUnit要执行的方法列表

在Maven项目中运行JUnit 5测试用例

使用 Maven 命令运行 Junit Suite