Wiremock: 同じ URL とコンテンツに対して複数の応答がありますか? 質問する

Wiremock: 同じ URL とコンテンツに対して複数の応答がありますか? 質問する

ここでも共有されています:https://github.com/tomakehurst/wiremock/issues/625

REST API とやり取りするアプリケーションが失敗したリクエストを適切に処理することを確認するための統合テストを作成しています。これを行うには、HTTP エンドポイントに対して GET リクエストが 2 回行われるシナリオをシミュレートします。1 回目はリクエストが成功せず、応答ステータス コードが 500 になります。2 回目はリクエストが成功し、応答ステータス コードが 200 になります。

以下の例を考えてみましょう。

@Rule
public WireMockRule wireMockRule 
        = new WireMockRule(wireMockConfig().dynamicPort().dynamicHttpsPort());

@Test
public void testRetryScenario(){

    // First StubMapping
    stubFor(get(urlEqualTo("/my/resource"))
            .withHeader("Accept", equalTo("text/xml"))
            .willReturn(aResponse()
                .withStatus(500) // request unsuccessful with status code 500
                .withHeader("Content-Type", "text/xml")
                .withBody("<response>Some content</response>")));

    // Second StubMapping
    stubFor(get(urlEqualTo("/my/resource"))
            .withHeader("Accept", equalTo("text/xml"))
            .willReturn(aResponse()
                .withStatus(200)  // request successful with status code 200
                .withHeader("Content-Type", "text/xml")
                .withBody("<response>Some content</response>")));

    //Method under test that makes calls to endpoint
    doSomething();

    Thread.sleep(5000);

    //Verify GET request was made again after first attempt
    verify(exactly(2), getRequestedFor(urlEqualTo("/my/resource")));

}

2番目のStubMappingが最初のStubMappingを上書きしないようにする方法はありますか?最初のdoSomething()リクエストを確実に行うために、ステータスコード500の応答返され、2回目はステータスコード200の異なる応答返されますか?

ベストアンサー1

これがシナリオ機能の目的です。

両方のスタブをシナリオ (つまり、同じシナリオ名) に配置し、最初のスタブが新しい​​状態への遷移をトリガーするようにし、次に 2 番目のスタブがシナリオが 2 番目の状態にあることを条件とし、最初のスタブがシナリオが状態にあることを条件とするようにする必要がありますSTARTED

見る:ステートフルビヘイビア

おすすめ記事