我使用fest创建了一些单元测试,现在我需要在无头系统上使用maven运行我的测试。我想使用Xvfb运行测试,但我需要帮助配置maven在测试之前启动Xvfb,并在所有测试完成后停止它。
exec-maven-plugin
插件: <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>exec-at-test-compile</id>
<phase>test-compile</phase> <!-- runs right before 'test' -->
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>/home/anew/bin/manage-xvfb.sh</executable>
<arguments>
<argument>start</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>exec-at-prepare-package</id>
<phase>prepare-package</phase> <!-- runs right after 'test' -->
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>/home/anew/bin/manage-xvfb.sh</executable>
<arguments>
<argument>stop</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
#!/bin/bash
XVFB_CMD="sudo /usr/bin/Xvfb :15 -ac -screen 0 1024x768x8"
function stop_xvfb {
XVFB_PID=`ps ax | pgrep "Xvfb"`
if [ "${XVFB_PID}" != "" ]; then
sudo kill ${XVFB_PID}
fi
}
if [ "${1}" == "start" ]; then
stop_xvfb
${XVFB_CMD} &
elif [ "${1}" == "stop" ]; then
stop_xvfb
fi
NOPASSWD
。<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>
spawn = "true"
),并且您可以在不编写任何脚本的情况下杀死 Xvfb 进程(使用 killall
)。此外,在我的 Ubuntu 发行版中,我不需要在 sudoers 文件中设置任何特殊设置才能让它工作。testFailureIgnore = "true"
添加到 maven-surefire-plugin 的配置中,但这样我就不能轻松地看到是否有测试失败。start-xvfb
时,在Xvfb
之前添加<exec executable="killall"><arg value="Xvfb" /></exec>
呢?或者你主要担心不因为其他(童子军营地)原因而让Xvfb继续运行?另外,使用类似Jenkins这样的CI环境,触发其他构建以处理失败是微不足道的(例如,“停止Xvfb”构建)。 - Anew这项工作可以通过 selenium-maven-plugin 轻松完成:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>selenium-maven-plugin</artifactId>
<executions>
<execution>
<id>setup-xvfb</id>
<phase>pre-integration-test</phase>
<goals>
<goal>xvfb</goal>
</goals>
</execution>
</executions>
</plugin>
很遗憾,这个插件似乎已经不再维护了。它曾是mojohaus项目的一部分,该项目最近从codehaus.org
迁移到了github.com
。目前似乎还没有人将selenium-maven-plugin
移植到github上,因此源代码和文档目前在mojohaus的github页面上无法获取。
然而,JAR包可以在Maven Central上获取,插件仍然可以使用。如果您需要查找更多配置参数,可以在github上找到源代码和站点的分支here。
kill \
ps axuf | pgrep Xvfb`的操作来杀死它。并且b)如果没有运行,则使用行末的
&运算符启动Xvfb,以便您的shell脚本可以退出但会异步地保留Xvfb运行,如下所示:
/usr/X11R6/bin/Xvfb :15 -ac -screen 0 1024x768x8 &`。 - Anew