我有提供网络服务的webapp。我想用SoapUI执行JUnit测试,以检查此服务是否正常运行。 但是要测试Web服务应用程序,必须将其部署到我的Tomcat 7服务器上。
我不知道如何配置Maven进行战争,然后将其部署到tomcat(理想情况是:为此运行单独的tomcat实例),然后运行JUnit测试。 我将不胜感激。
我正在使用Maven 2.2.1
关于如何使用Maven 处理这种类型的 集成测试 ,有很多想法。
我应该指出,当您将应用程序部署到应用程序服务器时,您不再处于单元测试的领域。由于整个应用程序都部署在容器中,因此您正在测试这两个组件的集成。
现在,使用JUnit运行 集成测试 没有什么问题(尽管您可能会遇到一些限制,例如, 单元测试 不应该考虑单个测试的顺序- 假设您编写正确,所以JUnit 不会 强制执行 此操作保证执行的任何顺序…在Java 1.7之前,执行顺序是由类中的测试方法的顺序意外暗示的,但是它不是JUnit合同的一部分…有些人转向其他测试框架来进行 集成 测试,例如TestNG,如果他们发现JUnit 的 单元测试重点 正在阻碍他们的测试开发)
要记住的关键点是,Maven生命周期使用test阶段来执行 单元 测试。
test
关于 集成 测试,关于使用Maven处理测试的正确方法,有两种(半)思想流派。
integration-test/verify
这个想法使用了以下阶段package来启动容器,运行集成测试,拆除容器,最后检查测试结果并在测试失败的情况下使构建失败。
package
再也离不开你mvn integration-test因为不会正确地推倒容器,你觉得你想输入的任何时候mvn integration- test你真的想类型mvn verify(哦,看,这是短,也更容易输入…奖金)
mvn integration-test
mvn integration- test
mvn verify
因此,您可以执行以下操作:
pre-integration-test
fork
=true
integration-test
post-integration-test
verify
对于额外的布朗尼点,您可以使用绑定到该阶段的build-helper-maven-plugin:reserve-network- port,validate以确保测试服务器在未使用的网络端口上启动,然后对测试资源使用资源过滤以通过测试移植到测试,或使用通过systemPropertyVariables传递的系统属性使端口号可用于测试。
validate
run-its
IT
Test
调试测试可能需要附加两个调试器,例如,一个调试器用于调试在容器中运行的应用程序,另一个调试器用于调试测试用例。
mvnDebug -Dmaven.failsafe.debug=true verify
将您的测试耦合到Maven构建过程。
这种思路将集成测试移到依赖于该war模块的单独模块中,并war使用(例如,dependency:copy- dependencies绑定到generate-test- resources与要测试的Tomcat7依赖项耦合的阶段)将集成测试复制到测试资源中。
war
dependency:copy- dependencies
generate-test- resources
测试用例本身使用嵌入式模式启动Tomcat7容器
mvn clean package
src/it
这是两种方法的一种混合。
您使用Failsafe执行测试,但是测试本身负责启动和停止要测试的Tomcat7容器。
希望以上内容可以帮助您了解所拥有的选项。可能还有其他调整,但总体上,以上内容被认为是目前与Maven进行集成测试的最佳实践。