【问题标题】:Using Mockito for API Stubbing Load Test使用 Mockito 进行 API 存根负载测试
【发布时间】:2018-05-18 13:30:46
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

您可能应该寻找使用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>.*")));
    }
}

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

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

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

【讨论】:

  • 感谢您的回复。没有考虑 Mockito 本身对我的应用程序性能的影响。所以这里的想法是托管一个单独的wiremock服务器,它充当我的应用程序和实际供应商API之间的中间人,可以选择记录存根,并且在负载测试场景中只返回模拟响应。那么,要真正将它们分开,wiremock 服务器应该作为外部进程运行吗?如果我理解正确的话。
  • 不是通过,只是一个存根。易于从测试或独立运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 2019-03-10
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多