21

我知道它可以SocketTimeoutException通过使用来模拟withFixedDelay,但是呢ConnectionTimeoutException

4

4 回答 4

12

是的,可以通过调用addDelayBeforeProcessingRequests(300)Java API 或将以下内容发布到WireMock 来执行此操作http://<host>:<port>/__admin/socket-delay

{ "milliseconds": 300 }

(显然用你想延迟的毫秒数替换 300)

于 2015-08-28T14:15:24.643 回答
5

从2.0.8-beta 版本开始,这个问题的答案似乎一直是“否” 。

Tom(WireMock 的作者)在这个 GitHub 问题中解释了原因:

目前,在纯 Java 中可靠地强制连接超时基本上是不可能的。

过去的情况是,您可以在调用.accept()套接字之前注入延迟,但不久前就停止工作了,我猜是由于实现内部结构发生了变化。

我目前的建议是使用在网络堆栈级别工作的工具。iptables ... -j DROP类型命令可以解决问题,或者如果您希望对此进行一定程度的自动化,您可以使用https://github.com/tomakehurst/saboteurhttps://github.com/alexei-led/pumba等工具。

他还继续解释说,仅仅停止 WireMock 并不能达到同样的效果:

关闭 WireMock 不会有同样的效果 - 当一个端口没有被监听时,你会得到一个 TCP RST(重置)数据包,而当你在初始化之后的超时窗口中没有从服务器返回任何东西时,就会发生连接超时SYN包。

于 2020-02-12T15:57:03.073 回答
4

结帐https://github.com/tomakehurst/saboteur它允许您模拟网络问题。或者你可以用 iptables 自己做。

于 2015-06-08T12:47:28.527 回答
0

使用WireMock.Net时,也可以添加延迟。

例子:

var server = WireMockServer.Start();

// add a delay of 30 seconds for all requests
server.AddRequestProcessingDelay(TimeSpan.FromSeconds(30));

或者

var server = WireMockServer.Start();
server
  .Given(Request.Create().WithPath("/slow"))
  .RespondWith(
    Responses.Create()
      .WithStatusCode(200)
      .WithBody(@"{ ""msg"": ""Hello I'm a little bit slow!"" }")
      .WithDelay(TimeSpan.FromSeconds(10)
  )
);
于 2020-02-14T09:18:44.533 回答