WireMock 有时表现得很奇怪

bre*_*Dev 9 java wiremock spring-boot-test

在大多数集成测试中,我使用 spring-boot-test(2.1.9.RELEASE) 和 spring-cloud-contract-wiremock(2.0.2.RELEASE)。测试基于 @AutoConfigureWireMock(port = 0) 启动 WireMock 服务器,因此我没有使用任何 WireMockRule 或其他配置设置。

有时验证失败并出现一个非常奇怪的错误:

com.github.tomakehurst.wiremock.client.VerificationException:` com.github.tomakehurst.wiremock.client.VerificationException:com.github.tomakehurst.wiremock.client.VerificationException:没有完全匹配的请求。最相似的请求是:预期:< POST /api/id/delete

但是:< POST /api/id/delete

正如您在上面看到的,预期端点与实际调用完全相同。

你有什么想法 ?或者你以前见过吗?这里有一个未解决的问题: https: //github.com/tomakehurst/wiremock/issues/706,但回复不是很有帮助。

bre*_*Dev 5

因此,经过几个月的随机失败构建后,似乎唯一的解决方案是等待存根注册。所以新的验证包装方法如下所示:

    public static void verify(int count, RequestPatternBuilder requestPatternBuilder) {
    int maxRetries = 5;
    while (count != WireMock.findAll(requestPatternBuilder)
            .size() && maxRetries > 0) {
        Thread.sleep(1000);
        maxRetries--;
    }
    WireMock.verify(count, requestPatternBuilder);
}
Run Code Online (Sandbox Code Playgroud)

调用者这样使用它:

        WireMockHelper.verify(1, putRequestedFor(urlMatching((URL.BASE_URL.ACTION).replace("%s", ".*"))));
Run Code Online (Sandbox Code Playgroud)

现在我们终于可以依赖我们的 IT 构建管道了。祝大家都只做绿色建筑:)

  • 感谢您在近 9 个月后回来发布此答案❤ (4认同)