Kay*_*ser 10 junit integration-testing unit-testing maven jenkins
我有一个maven项目,里面有很多junit类.我用Eclipse开发.我想分离功能测试类和集成测试类.
当我在Eclipse中构建项目时,我只想要执行功能测试类.
通过詹金斯,他们两个都应该被执行.
我应该遵循哪种方法?
Nic*_*tti 13
我发现将集成测试放在单独的项目中更方便,然后依靠Maven的默认生命周期运行它们就好像它们是单元测试一样.由于我必须针对不同的环境运行测试,因此这种方法可以更轻松地管理特定于环境的测试.
假设我有一个应用程序,由applicationMaven聚合器项目表示,它包含一个名为的jar模块project.我将单元测试保留在project自身内部,以便在构建应用程序时执行它们.这也是詹金斯每晚都建造的; 理想情况下,成功的构建应自动部署到一个或多个测试环境,用于手动和自动测试.目前这是手工完成的.
对于我需要运行集成测试的每个环境,我都有一个applicationTestEnvXMaven聚合器项目.这至少包含一个projectTest模块,我保留那些与环境无关的集成测试,以及任何测试支持代码.我的project模块特定于环境X的测试保存在projectTestEnvX模块中.我为每个applicationTestEnvX项目都有一个Jenkins工作,每晚都会运行我的测试.理想情况下,这些应该针对应用程序构建的结果运行,但我还没有.
我的项目如何存储在Subversion和我的Eclipse工作区中也有直接的对应关系,但这是另一个故事;-)
看看两个Maven插件:Surefire(用于单元测试)和Failsafe(用于集成测试).它们非常相似,Failsafe是Surefire的克隆.
组织测试,使其命名模式符合建议的配置:**/*Test.java单元测试和**/*IT.java集成.默认情况下运行Surefire,对于Failsafe,您需要在POM中提供额外的摘录 - 示例和此答案中的更多信息.
然后它归结为mvn test或mvn integration-test.
如果只想在某些环境(Jenkins)中运行集成测试,则可以使Failsafe仅在配置文件中执行,例如:
<profiles>
<profile>
<id>env-itest</id>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<id>integration-test</id>
<goals><goal>integration-test</goal></goals>
</execution>
<!-- other executions, if needed -->
</executions>
</plugin>
</plugins>
</profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)
然后,在Jenkins上,您mvn clean install -P env-itest只能在本地环境中运行mvn clean install(或类似).
| 归档时间: |
|
| 查看次数: |
9686 次 |
| 最近记录: |