如何在从Maven运行集成测试之前启动GAE / J devserver?

时间:2013-04-15 21:13:22

标签: java google-app-engine maven integration-testing

我想从KindleIT's切换到Google's App Engine Maven插件。使用KindleIT插件时,我在预集成测试阶段就启动了GAE开发服务器。在集成后测试中完成集成测试后,我会关闭开发服务器。我们使用surefire plugin来运行我们的单元和集成测试。

<plugin>
  <groupId>net.kindleit</groupId>
  <artifactId>maven-gae-plugin</artifactId>
  <version>0.9.5</version>
  <executions>
    <execution>
      <id>gae-start</id>
      <phase>pre-integration-test</phase>
      <goals>
        <goal>start</goal>
      </goals>
    </execution>
    <execution>
      <id>gae-stop</id>
      <phase>post-integration-test</phase>
      <goals>
        <goal>stop</goal>
      </goals>
    </execution>
  </executions> 
</plugin>

我这样做是因为我想再次运行本地运行的GAE应用程序的集成测试。 如何使用Google的App Engine插件执行相同操作?

<plugin>
  <groupId>com.google.appengine</groupId>
  <artifactId>appengine-maven-plugin</artifactId>
  <version>${gae.version}</version>
</plugin>

我想使用像

这样的东西
mvn appengine:devserver

目标。但这只是在前台启动devserver。我希望Maven在测试之前在后台启动开发服务器。

2 个答案:

答案 0 :(得分:2)

官方插件尚未支持此功能,但我们正在努力,我希望尽快将其转换为快照。我会告诉你,但这个问题是我跟踪我的工作的地方: https://code.google.com/p/appengine-maven-plugin/issues/detail?id=5

答案 1 :(得分:1)

使用maven-jetty-plugin。这个插件启动jettty实例并运行你的war / gae项目。

您可以在预集成测试阶段运行此插件,然后运行集成测试,在集成后测试阶段,服务器将关闭。

我正在使用gae应用程序,并且可以正常使用此插件。

这是我的配置,希望能帮到你:

        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1.15</version>
            <configuration>
                <contextPath>/</contextPath>
                <scanIntervalSeconds>3</scanIntervalSeconds>
                <stopKey>foo</stopKey>
                <stopPort>9999</stopPort> 
                <connectors>
                    <connector implementation ="org.mortbay.jetty.nio.SelectChannelConnector" >
                        <port>${deploy.server.port}</port>
                        <maxIdleTime>60000</maxIdleTime>
                    </connector>
                </connectors>
            </configuration>
            <executions>
                    <execution>
                            <id>start-jetty</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                    <goal>run</goal>
                            </goals>
                            <configuration>
                                    <scanIntervalSeconds>0</scanIntervalSeconds>
                                    <daemon>true</daemon>
                            </configuration>
                    </execution>
                    <execution>
                            <id>stop-jetty</id>
                            <phase>post-integration-test</phase>
                            <goals>
                                    <goal>stop</goal>
                            </goals>
                    </execution>
            </executions>
        </plugin>
     </plugins>

另外,也许你会在执行中找到这个执行: 线程“Shutdown”中的异常java.lang.NoClassDefFoundError:org / apache / jasper /运行/ JspApplicationContextImpl

这将解决将此依赖项添加到您的pom.xml

        <dependency>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jsp-2.1</artifactId>
            <version>6.0.0</version>
          </dependency>