使用 Mockito 进行 API 存根负载测试

Using Mockito for API Stubbing Load Test

我有一个 Spring 带有 REST API 的启动应用程序。在幕后,它使用公开的 SDK 来调用供应商服务。我需要 运行 在我的应用程序上加载测试,但不想调用供应商 API 并在测试期间不小心使他们的系统崩溃。

是否可以在 JUnit 测试之外使用 Mockito 在正常应用程序 运行 期间为供应商 SDK 对象创建模拟?

我想当配置文件是“性能测试”时,我会使用基于配置文件的配置梁来启用模拟对象。但是我找不到 article/discussion/mention 任何人以这种方式使用 Mockito,这让我再次猜测我的方法。想法?

您可能应该寻找使用 wiremock 或类似软件来模拟供应商服务,如下所示:

Wiremock 是一个存根服务器,您可以方便地从 JUnit 测试中 start/stop。当您设置响应时,它就像远程服务器一样。 documentation 真的很好,我不想把它全部复制粘贴到这里。

只是一个例子:

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

    @Test
    public void exampleTest() {
        stubFor(get(urlEqualTo("/my/resource"))
                .willReturn(aResponse()
                    .withStatus(200)
                    .withBody("<response>Some content</response>")));

        ...        
        verify(postRequestedFor(urlMatching("/my/resource/[a-z0-9]+"))
                .withRequestBody(matching(".*<message>1234</message>.*")));
    }
}

对于负载测试,您宁愿 运行 存根 standalone 某处,并让一些脚本设置响应。

您可能没有提到 Mockito,因为将带有存根响应的模拟嵌入到您的应用程序中是一个坏主意,并且不会帮助您获得负载测试的实际结果(因为您的响应会更快并且不会通过) serialization/deserialization).

其他也看这里: How to mock remote REST API in unit test with Spring?