Maven-在JUnit测试之前将WebApp部署到tomcat
我有提供网络服务的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
阶段来执行 单元 测试。
关于 集成 测试,关于使用Maven处理测试的正确方法,有两种(半)思想流派。
学校1-故障安全和 integration-test/verify
这个想法使用了以下阶段package
来启动容器,运行集成测试,拆除容器,最后检查测试结果并在测试失败的情况下使构建失败。
再也离不开你mvn integration-test
因为不会正确地推倒容器,你觉得你想输入的任何时候mvn integration-
test你真的想类型mvn verify
(哦,看,这是短,也更容易输入…奖金)
因此,您可以执行以下操作:
- 绑定tomcat7:运行至
pre-integration-test
与相fork
=true
- 将故障安全:集成测试绑定到该
integration-test
阶段 - 绑定tomcat7:关机到该
post-integration-test
阶段 - 绑定故障安全:验证到
verify
阶段。
对于额外的布朗尼点,您可以使用绑定到该阶段的build-helper-maven-plugin:reserve-network-
port,validate
以确保测试服务器在未使用的网络端口上启动,然后对测试资源使用资源过滤以通过测试移植到测试,或使用通过systemPropertyVariables传递的系统属性使端口号可用于测试。
回答:
- 清理Maven版本
- 如果测试失败,则无法发布项目
run-its
如果测试太慢而无法运行每个构建,则可以将集成测试移到单独的配置文件中(按惯例称为)。
回答:
- 很难从IDE运行测试。所有集成测试都开始/结束
IT
,而Maven知道运行从Test
Surefire开始/结束的测试以及IT
以Failsafe 开始/结束的测试,而您的IDE可能没有。另外,您的IDE不会为您启动容器,因此您必须手动进行大量工作才能真正手动运行测试。 调试测试可能需要附加两个调试器,例如,一个调试器用于调试在容器中运行的应用程序,另一个调试器用于调试测试用例。
mvnDebug -Dmaven.failsafe.debug=true verify
将您的测试耦合到Maven构建过程。
学校2-独立模块
这种思路将集成测试移到依赖于该war
模块的单独模块中,并war
使用(例如,dependency:copy-
dependencies绑定到generate-test-
resources与要测试的Tomcat7依赖项耦合的阶段)将集成测试复制到测试资源中。
测试用例本身使用嵌入式模式启动Tomcat7容器
回答:
- 测试可以在IDE中运行
- 集成测试与单元测试分开,因此要求IDE运行所有测试不会启动较慢的测试
回答:
- 的
war
,如果你走过去的神器只是重建package
阶段,因此,你需要至少运行mvn clean package
定期使用IDE时刷新被测代码。 - 集成测试的失败不会破坏
war
模块的构建,因此您最终可能会释放出损坏的war
工件,然后使集成测试模块的反应堆构建失败。有些人通过在其中包含集成测试模块src/it
并使用Maven Invoker插件来运行测试来解决此问题,尽管这提供了较差的IDE集成,所以我不建议这样做。 - 很难从Maven获得合并的测试覆盖率报告。
- 必须在测试用例中编写容器的启动/停止代码。
School 2.5-使用测试案例启动他们自己的Tomcat7服务器的故障保护
这是两种方法的一种混合。
您使用Failsafe执行测试,但是测试本身负责启动和停止要测试的Tomcat7容器。
回答:
- 不必在Maven pom中配置服务器启动/停止
- IDE可以安全地运行所有测试(尽管集成测试可能会比较慢,并且您可能不希望运行它们,但是除非测试失败,否则它们不会全部失败)
- 更容易从IDE调试测试(只需附加一个进程,IDE通常通过提供特殊的测试运行程序使调试调试容易)
回答:
- 必须对容器进行编码,以便在测试用例中自行启动/停止
希望以上内容可以帮助您了解所拥有的选项。可能还有其他调整,但总体上,以上内容被认为是目前与Maven进行集成测试的最佳实践。
以上是 Maven-在JUnit测试之前将WebApp部署到tomcat 的全部内容, 来源链接: utcz.com/qa/399891.html