【问题标题】:WireMock unexpectedly returning NullWireMock 意外返回 Null
【发布时间】:2016-08-16 20:05:14
【问题描述】:

在使用 WireMock 模拟预期返回 JSON 的端点时,我遇到了一个问题,即它不会返回预期的 JSON。查询 WireMock 的存根将在预期的端点显示正确的 JSON。

在针对我的理论运行多个数据点时,我通常会在此问题发生并且测试失败之前成功通过 7 次测试。但是,在理论的顶部添加大约 5 秒的睡眠可以让所有测试通过。将测试的内容包装在一个循环中将使其多次运行一个数据点,最终失败。添加睡眠将允许它进一步运行,但最终它会提供一个空值。

这是一个已知问题吗?有合适的解决方法吗?

【问题讨论】:

  • 如果您没有显示代码,我们如何提供帮助..
  • @Javant 这个问题似乎只在整个项目中表现出来。我编写的每一个使用相同管道的小型概念验证测试都会成功。我必须提供整个项目,这是我做不到的。
  • 您是否动态添加存根(是否存在内存泄漏的可能性)?你能识别失败的请求吗?看看手动查询是否可以重现问题。如果不是,请尝试使用相同的请求模拟高负载场景。
  • @EugeneA 存根是动态添加的,但存根添加的次数无关紧要。也就是说,清除存根并在 Before、BeforeClass 或理论本身中读取它们不会改变其行为。失败的请求是第八个,除非添加了睡眠。即使在另一台以不同顺序运行数据点的计算机上也是如此(这意味着它在不同的数据点上失败)。
  • 尝试在调试模式下运行 Wiremock,看看这个 null 是否会在日志中产生异常。如果是这样,调试 Wiremock 并查看导致空响应的条件应该不难。

标签: java junit wiremock


【解决方案1】:

原来是 Hystrix 的短路。每个测试用例都在存根三个端点之一,而另外两个则失败。在第七次测试之后,有 21 个电话,其中 2/3 失败了。短路在 20 次呼叫后中断,其中一半失败。

hystrix.command.default.circuitBreaker.requestVolumeThreshold=100

这将阻止它直接跳到后备。

【讨论】:

  • resilance4j 也有同样的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 2013-04-26
  • 2014-07-26
  • 1970-01-01
相关资源
最近更新 更多