0

我有一些消费者合同测试应该在 Jenkins 上以离线模式运行,因为生产者和消费者 API 使用服务器上相同的本地 Maven 存储库,如果他们尝试下载生产者的存根,测试会崩溃。已经在本地了。但是在本地,它们应该被禁用或在在线模式下运行,因为生产者 API 非常稳定并且接口很少更改。

我已经准备了一个解决方法,但可能有更好的方法来做到这一点。我的解决方案是:

1) 将消费者的测试配置为使用 workOffline = true 运行

2) 将此代码添加到测试类,以便在未设置系统属性“runContractTests”时禁用合约测试:

@BeforeClass
public static void checkContractTestsAreEnabled() throws IOException {

    boolean runContractTests = Boolean.parseBoolean(System.getProperty("runContractTests"));
    assumeTrue(runContractTests);
}

3) 在 Jenkins 上运行这样的测试:

mvn clean verify -DrunContractTests=true

有什么更好的方法建议吗?

4

2 回答 2

1

这个解决方案更标准。我添加了一个 Maven 配置文件,因此只有在使用“-P runContractTests”执行 Maven 命令时才会执行合同测试。

我在合同测试中使用了后缀 CT。除此之外,我还添加了项目其他类型测试的后缀,以便它们也被执行。在我的例子中,Spock 集成测试的 *Spec 和单元测试的 *Test。

<profiles>
    <profile>
        <id>runContractTests</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.20</version>

                    <configuration>
                        <includes>
                            <include>**/*CT.*</include>
                            <include>**/*Spec.*</include>
                            <include>**/*Test.*</include>
                        </includes>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
于 2018-01-26T14:44:28.257 回答
1

您可以修改 surefire 以仅在特定配置文件中运行合同测试。您还可以使用类路径扫描从类路径中获取存根。您还可以在某些条件下启用/禁用插件(系统道具/环境道具/等)

于 2018-01-25T16:50:22.740 回答