我有以下设置:通常我的webapp将部署在独立服务器上并连接到MySQL数据库。但是,我希望能够使用Selenium“自我测试”应用程序。因此,在 mvn clean install 期间,将有嵌入式服务器(Jetty 7),Selenium Server和内存数据库(HSQLDB),它们将允许执行某些操作(Web应用程序的示例用户输入)。 现在我已经使用maven插件设置了Selenium /嵌入式服务器设置:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.10</version>
<configuration>
<!-- Log to the console. -->
<requestLog implementation="org.mortbay.jetty.NCSARequestLog">
<!-- This doesn't do anything for Jetty, but is a workaround for a Maven bug
that prevents the requestLog from being set. -->
<append>true</append>
</requestLog>
</configuration>
</plugin>
<!--
*******************************************************
Start selenium-server before the integration test start
*******************************************************
-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>selenium-maven-plugin</artifactId>
<executions>
<execution>
<id>start-selenium-server</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start-server</goal>
</goals>
<configuration>
<background>true</background>
<logOutput>true</logOutput>
<multiWindow>true</multiWindow>
</configuration>
</execution>
<execution>
<id>stop-selenium-server</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop-server</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- ********************************************************
Force to run the testcases in the integration-test phase
******************************************************** -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- Skip the normal tests, we'll run them in the integration-test phase -->
<skip>true</skip>
</configuration>
<executions>
<execution>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<skip>false</skip>
</configuration>
</execution>
</executions>
</plugin>
<!-- ***********************************************************
Deploy the war in the embedded jetty of cargo2-maven-plugin
*********************************************************** -->
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.4.1-SNAPSHOT</version>
<executions>
<execution>
<id>start-container</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop-container</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
<configuration>
<wait>false</wait>
<container>
<containerId>jetty7x</containerId>
<type>embedded</type>
</container>
</configuration>
</plugin>
它工作得很好。不幸的是,当在嵌入式服务器上部署应用程序以进行集成测试时,我在尝试使Spring / Maven使用不同的XML配置文件时遇到了一些问题。
我尝试使用:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:servlet-context-test.xml" })
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestWebapp extends SeleneseTestCase{
( servlet-context-text.xml 位于 src / test / resources 中) 但是当Selenium测试运行时,webapp仍然以默认配置启动。
我正在尝试加载不同的xml文件,因为我基本上想要使用它:
<jdbc:embedded-database id="dataSource">
<jdbc:script location="classpath:sql/schema.sql"/>
<jdbc:script location="classpath:sql/fk.sql"/>
<jdbc:script location="classpath:sql/data.sql"/>
</jdbc:embedded-database>
而不是我正常的dataSource声明。
答案 0 :(得分:0)
您应该查看Spring配置文件(http://blog.springsource.org/2011/02/14/spring-3-1-m1-introducing-profile/)。使用配置文件,您可以以不同的方式激活/停用bean(以编程方式,使用环境变量等)。
答案 1 :(得分:0)
也许对那里的人有帮助。我最后使用Maven配置文件(用于集成测试和生产构建的单独配置文件)和过滤(在导入dataSource.xml或dataSourceIntegrationTesting.xml方面参数化我的servlet-context.xml)解决了这个问题。像魅力一样。