如何配置 wiremock 在达到先前的请求计数后发送不同的响应(相同的 url 和请求)?

How to configure wiremock to send different responses (same url and requests) after reaching previous count of request?

是否可以配置 wiremock 以在先前响应的特定计数后对相同 URL 和相同请求发送不同的响应?

For example: 
1st request -> 503 response
2nd request -> 503 response
3rd request -> 503 response
4th request -> 200 response

这将在启动期间模拟不可用的服务。当它启动并 运行 时,它会响应 200 状态。

您可以使用 WireMock 实现此目的 Scenario feature. 潜在的设置可能类似于...

stubFor(get(urlEqualTo("/foo")).inScenario("Test Scenario")
    .whenScenarioStateIs(STARTED)
    .willReturn(aResponse().withStatus(503))
    .willSetStateTo("One Attempt"));
stubFor(get(urlEqualTo("/foo")).inScenario("Test Scenario")
    .whenScenarioStateIs("One Attempt")
    .willReturn(aResponse().withStatus(503))
    .willSetStateTo("Two Attempts"));
stubFor(get(urlEqualTo("/foo")).inScenario("Test Scenario")
    .whenScenarioStateIs("Two Attempts")
    .willReturn(aResponse().withStatus(200)));

在上面,您通过定义场景名称和初始行为来设置场景(所有场景都以 STARTED 的状态开始。)在第一次 运行 进入之后"/foo"端点,我们return一个503状态,Scenario的状态改为"One Attempt"。第二次运行进入"/foo"端点后,我们再次return一个503状态,Scenario的状态变为"Two Attempts"。如果我们再次点击 "/foo" 端点,我们将 return 200 状态,并且不会更改场景状态。

需要注意的是,您需要知道想要 return 特定状态的确切次数,因此它不允许您 return 503随机的。但是,如果您确定在 return 发送 200 之前总是需要特定数量的响应,那么场景应该有效。