【发布时间】:2017-08-24 06:55:59
【问题描述】:
我有一个 maven 多模块项目,其中一个模块使用集成测试针对我的本地数据库。我们使用 Jenkins,当然,由于需要数据库,我不希望 IT 在 Jenkins 上运行。我找到了使用 maven-failsafe 和选项“-DskipITs”的解决方案。工作就像一个魅力,我可以提交 IT 并且不必担心 Jenkins 抱怨执行 IT。但后来我为我的所有 IT 人员创建了一个测试套件,以便同时运行它们:
package mypackage;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
AccountManagerImportServiceIT.class,
AccountManagerToClientImportServiceIT.class,
ClientImportServiceIT.class,
ContactPersonImportServiceIT.class,
InvoiceImportServiceIT.class,
MeteringPointImportServiceIT.class,
MeteringPointToRoleImportServiceIT.class,
RoleImportServiceIT.class,
WhitelistImportServiceIT.class
})
public class TestSuiteIT {
}
现在看来,Jenkins 忽略了 TestSuite 的故障保护并尝试执行它,这当然会使构建不稳定。我不知道该怎么做才能告诉 Jenkins 也忽略 TestSuite!奇怪的是:如果我在本地系统上执行“mvn clean install -DskipITs”(Jenkins 执行相同的命令),它就可以工作。但 Jenkins 总是试图执行 TestSuite。 :-(
【问题讨论】:
-
你使用的是surefire还是failsafe插件?
-
故障安全,正如我在我的问题中所写的那样。它使得将单元测试与集成测试“分开”成为可能。
-
在您的
pom.xml中,您是否对您的fails-safe-plugin进行了任何配置以跳过测试?像这样:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>2.20</version> <configuration> <skipITs>true</skipITs> </configuration> </plugin> -
我不想跳过所有测试,只跳过集成测试。而且我不想通过默认跳过它们,但只能使用 Jenkins-Build 上的 maven 参数“-DskipITs”。正如我之前写的,没有 Testsuite 它可以完美运行,但是如果 Jenkins 找到了一个 Testsuite,它会忽略这个参数。
标签: jenkins maven-failsafe-plugin