我的Java项目中有一个带有多个集成测试的模块。其中两个是UpgradeDatabase.java和CreateDatabase.java,它们在预集成阶段的每次运行中当前执行。 我想安排这些只运行一次(让我们说每月),因为它们执行时间太长(创建了许多数据库等),我怎样才能实现这一目标? 我的故障安全插件配置如下所示(注意,skip.selenium.tests参数为false):
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<forkMode>${tests.forkMode}</forkMode>
<skip>${skip.selenium.tests}</skip>
<environmentVariables>
...this area skipped...as it's non important
</environmentVariables>
<systemPropertyVariables>
<!--<rc.count.firefox>${rc.count.firefox}</rc.count.firefox>-->
<selenium.browser>firefox</selenium.browser>
<user.home>${env.USERPROFILE}</user.home>
</systemPropertyVariables>
</configuration>
<executions>
<!--before the tests-->
<execution>
<id>upgrade-the-database</id>
<configuration>
<includes>
<include>**/UpgradeDatabase.java</include>
</includes>
</configuration>
<phase>pre-integration-test</phase>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
<!--before the tests-->
<execution>
<id>recreate-the-database</id>
<configuration>
<testFailureIgnore>false</testFailureIgnore>
<includes>
<include>**/CreateDatabase.java</include>
</includes>
</configuration>
<phase>pre-integration-test</phase>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
答案 0 :(得分:1)
简而言之。用以下内容封闭您的配置:
<profiles>
<profile>
<id>monthly</id>
... your configuration ...
</profile>
</profiles>
如果您希望默认激活它,请将其添加到settings.xml
:
<activeProfiles>
<activeProfile>monthly</activeProfile>
</activeProfiles>
或者在cmd行上激活它:
mvn -P monthly ...
答案 1 :(得分:0)
如果您使用的是TestNG,我建议您通过测试组来处理。
您可以为每个测试指定测试所属的组/组(例如@Test(groups = { "SlowIntegrationTest" })
)。与运行maven时相比,您可以指定应执行哪些组(例如clean test -Dgroups=UnitTest,IntegrationTest
)。
当然,这涉及开发人员对正确标记测试的纪律。 但是,如果有人忘记标记测试,它将不会被执行,它应该出现在特定模块的覆盖统计中(这可归结为CI过程的质量)。
答案 2 :(得分:0)
您可以将数据库设置/升级代码移动到new module。然后,您可以使用build profiles在标准版本中隐藏此新模块(即,在没有配置文件的情况下调用Maven时)。在CI服务器上,您可以偶尔(可能每晚)使用-P name
运行Maven,以启用应包含新模块的配置文件name
。
请注意,Maven按照您指定的顺序执行模块,除非它们相互依赖。在第二种情况下,Maven将重新排序模块以确保首先构建依赖关系。
答案 3 :(得分:0)
@misha重新发表你对my previous answer的评论:
纯外部Maven配置文件激活:
使用参数 PROFILE 创建常规构建作业参数化,并使用空参数值(如果不支持空值,则只是空格字符) )默认情况下。将此参数添加到mvn cmd行:
mvn ${PROFILE} ...
这样,一个空的(或空格)值被添加到你的cmd行,不做任何事情。
创建一个触发常规的月度构建作业,并使用 -P monthly 值注入此参数,以便常规构建的cmd行变为:
mvn -P monthly ...
混合外部和POM内部Maven配置文件激活:
请参阅5.3. Profile Activation或 Introduction to Build Profiles, Details on profile activation
在您的个人资料中添加激活部分,如:
<activation> <property> <name>monthly</name> </property> </activation>
...并为您的常规版本的mvn cmd行提供适当的属性:
mvn -D monthly ...
...例如,使用上述方法1.