使用maven进行集成测试:在测试之前运行jar并在之后终止

我有一个可运行的jar,我希望在集成测试开始之前(在pre-integration-test )在新进程中运行,并在集成测试完成后(在集成后pre-integration-test )终止它。

我可以使用的一个东西是maven-antrun-plugin或exec-maven-plugin来启动pre-integration-test新进程,但是如何终止呢?

也许对于我想要实现的目标有更好的解决方案?

PS:我在Windows和Linux上都构建了我的项目,因此可移植性对我很重要。

您可以使用BV开源的maven-process-plugin分别在集成前和集成后阶段启动和停止任何过程。 自述文件中有一个例子可以完全符合您的要求(启动一个可运行的jar)。 希望有所帮助。

主要想法是写一个有两个目标的maven插件 – 开始和停止。 开始在预集成阶段运行并运行您想要运行的任何进程。 Java的流程构建器可用于启动运行jar等流程。将已启动的流程存储在数据结构(如Map或Stack)中。 “停止”将停止它已启动的所有进程。 由于这是一个普遍的问题,我建议使用上面的插件来轻松启动和停止任何进程以进行集成测试。 只需添加以下插件:

  com.bazaarvoice.maven.plugins process-exec-maven-plugin 0.4    start-jar pre-integration-test start  app  java -jar app.jar      stop-jar-process post-integration-test stop-all    

我用maven-antrun-plugin解决了这个问题。

如果你的后台进程是java进程,你可以使用java ant目标并给它一个停止超时。 如果你知道你的集成测试将在N秒后结束,那么fork并生成进程并在超时后停止进程(N)

   maven-antrun-plugin 1.6   start-my-Application pre-integration-test  run              

如果这只是Linux,我会将PID写入文件,然后稍后使用此PID终止进程。

我的猜测是你可以在Windows上实现类似的function,但是你需要一些非标准的工具。

另一种方法是在新进程中打开一个套接字并在此套接字上侦听kill命令。 这适用于所有平台,但您需要修改JAR。

注意:如果需要并行运行多个集成测试,这也会导致问题。

最简单的方法是在外部jar中包含某种停止机制(与tomcat的停止端口相比)。

这样你就不需要处理PID或任何东西了。

最简单,最节省资源的方法是在预定义(可覆盖)端口上打开服务器套接字。

使用call bash杀死它