如何在Xvfb上启动mvn测试阶段?

Ale*_*pac 5 java junit unit-testing maven xvfb

我使用fest进行了一些单元测试,现在我需要在无头系统上使用maven运行mvn我的测试.我想使用Xvfb运行测试,但我需要帮助来配置maven在测试之前启动Xvfb并在完成所有操作后停止它.

Ale*_*pac 1

实际上我使用这个插件配置:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <id>start-xvfb</id>
            <phase>process-test-classes</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <echo message="Starting xvfb ..." />
                    <exec executable="Xvfb" spawn="true">
                        <arg value=":1" />
                    </exec>
                </tasks>
            </configuration>
        </execution>
        <execution>
            <id>shutdown-xvfb</id>
            <phase>test</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <echo message="Ending xvfb ..." />
                    <exec executable="killall">
                            <arg value="Xvfb" />
                    </exec>
                </tasks>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

好处是您可以获得一个后台进程(使用spawn = "true"),并且可以终止 Xvfb 进程(使用killall)而无需编写任何脚本。此外,在我的 Ubuntu 发行版中,我不必在 sudoers 文件中设置任何特殊设置即可使其正常工作。

shutdown-xvfb 执行在测试阶段结束时执行,但如果测试失败则不会执行(这是问题所在)。如果您想重新启动另一项测试(旧的 Xvfb 仍在运行,新的无法运行,但这不是问题),这不是问题,但问题是资源仍然被 Xvfb 占用。解决此问题的方法可能是添加testFailureIgnore = "true"到 maven-surefire-plugin 的配置中,但这样我就无法轻松查看某些测试是否失败。