使用Mockito进行API Stubbing负载测试

时间:2017-12-05 00:39:07

标签: java spring-boot mockito performance-testing load-testing

我有一个带有REST API的Spring Boot应用程序。在幕后,它使用售卖的SDK来调用供应商服务。我需要对我的应用程序运行负载测试,但不想调用供应商API并在测试期间意外崩溃他们的系统。

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

我认为当配置文件是“性能测试”时,我会使用基于配置文件的配置光束来启用模拟对象。但我发现没有任何文章/讨论/提及使用Mockito这样的人,它让我第二次猜测我的方法。想法?

1 个答案:

答案 0 :(得分:0)

您可能应该寻找使用wiremock或类似软件来模拟供应商服务,例如:Integration Testing with a fake server

Wiremock是一个存根服务器,您可以在JUnit测试中方便地启动/停止。设置响应时,它就像远程服务器一样。 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>.*")));
    }
}

对于loadtest,您宁愿在某处运行存根standalone,并使用一些脚本设置响应。

你可能没有发现Mockito的提及,因为将带有存根响应的模拟嵌入到你的应用程序中是一个坏主意,并且无法帮助你获得负载测试的真实结果(因为你的响应会更快,不会通过序列化/反序列化)。

另外还看这里: How to mock remote REST API in unit test with Spring?