You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pact测试远程Broker报No Pact files were found to verify异常

Pact契约测试切换远程Broker后报无可用契约文件问题

问题现象

  • 相同测试代码连接本地部署的Pact Broker时可正常执行通过,切换为远程环境Pact Broker地址后测试执行失败
  • 涉及的测试配置如下:
// 测试执行失败的远程Broker配置
systemProperty 'pactbroker.url', 'https://pact-broker.internal-dev.com/'
// 测试执行通过的本地Broker配置:本地部署、已提前完成对应契约发布
systemProperty 'pactbroker.url', 'http://localhost:9292/'
  • 测试执行时抛出的核心错误栈:
No Pact files were found to verify
Provider: Provider1
Source: Pact Broker https://pact-broker.internal-dev.com/
au.com.dius.pact.provider.junitsupport.loader.NoPactsFoundException: No Pact files were found to verify
Provider: Provider1
Source: Pact Broker https://pact-broker.internal-dev.com/
    at au.com.dius.pact.provider.junit5.PactVerificationInvocationContextProvider.provideTestTemplateInvocationContexts(PactJUnit5VerificationProvider.kt:49)
    at au.com.dius.pact.provider.spring.junit5.PactVerificationSpringProvider.provideTestTemplateInvocationContexts(PactVerificationSpringProvider.kt:24)
    at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$0(TestTemplateTestDescriptor.java:102) and more

补充背景信息

  • 异常影响范围:该问题仅在单个服务上出现,其余所有服务使用完全相同的配置连接远程Pact Broker均可正常运行;出问题的服务连接本地Pact Broker时无任何异常。调试发现resolvePactSources方法返回的tests集合为空,对应调试断点截图:
    调试断点截图
  • 异常触发逻辑:触发点为PactVerificationInvocationContextProvider的provideTestTemplateInvocationContexts方法,当方法返回的tests集合为空且测试类未添加IgnoreNoPactsToVerify注解时,就会抛出上述NoPactsFoundException,对应源码逻辑如下:
override fun provideTestTemplateInvocationContexts(context: ExtensionContext): Stream<TestTemplateInvocationContext> {
    logger.trace { "provideTestTemplateInvocationContexts called" }
    val tests = resolvePactSources(context)
    return when {
      tests.first.isNotEmpty() -> tests.first.stream() as Stream<TestTemplateInvocationContext>
      AnnotationSupport.isAnnotated(context.requiredTestClass, IgnoreNoPactsToVerify::class.java) ->
        listOf(DummyTestTemplate).stream() as Stream<TestTemplateInvocationContext>
      else -> throw NoPactsFoundException("No Pact files were found to verify\n${tests.second}")
    }
  }
  • 已完成的配置有效性校验:
    • 将测试配置中的Provider替换为其他服务对应的Provider2时,可正常从远程Broker拉取到Pact文件(仅因服务契约不匹配触发测试失败),可排除网络连通性、基础配置格式错误类问题
    • 曾尝试在契约发布侧重命名Provider名称后重新发布契约、调整配置验证,问题仍复现
    • 远程Broker上确实已存在对应Provider1的已发布Pact契约文件,文件列表截图:
      Broker端Pact文件列表截图

待解决疑问

初步怀疑是版本相关问题,但该假设无法解释本地Broker可正常运行的现象,需明确该问题的可能成因,以及对应的排查、解决路径。


内容的提问来源于stack exchange,提问作者Pati Ram Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:39:15