【问题标题】:How best to mock S4 endpoints to do performance tests (load test)?如何最好地模拟 S4 端点来进行性能测试(负载测试)?
【发布时间】:2021-03-24 04:57:56
【问题描述】:

这与 cloud sdk 本身无关,但更多的是关于模拟我们通常使用 c sdk 查询的 s4 端点。 我们想为我们的负载测试执行此操作,我们不希望负载测试持续到 s4 端点。我们正在考虑使用 wiremock 来模拟端点,但问题是,wiremock 本身中的模拟逻辑是否会对我们正在采用的指标做出微不足道的贡献。如果是这样,那么该指标就会变得有些不可靠,因为我们想要的是应用程序性能指标而不是模拟框架的指标。

其他方法是使用专门用于此的模拟服务器应用程序,这样我们就不必在应用程序中进行任何模拟。只需将调用路由到模拟服务器应用程序(可能使用模拟目的地)

我的问题是,你们遇到过这种用例吗?也许你自己,或者也许来自你的消费者。我想知道 SAP 的其他团队是如何解决这个问题的。

谢谢, 萨钦

【问题讨论】:

    标签: sap-cloud-sdk


    【解决方案1】:

    在像您这样需要测试整个系统(包括来自外部服务的响应)的情况下,我们通常建议使用 Wiremock。 这是因为 Wiremock 相当容易设置并且对于常规测试场景来说工作得很好。 但是,正如您还指出的那样,Wiremock 为测试代码引入了显着的运行时开销,因此,任何类型的性能测量或多或少都无用。

    因此,您可以尝试使用 Mockito 来模拟 HttpClient

    BasicHttpResponse page = new BasicHttpResponse(new BasicStatusLine(HttpVersion.HTTP_1_1, 200, "OK"));
    page.setEntity(new StringEntity("hello world!));
    HttpClient httpClient = mock(HttpClient.class);
    doReturn(page).when(httpClient).execute(any(HttpUriRequest.class));
    

    这可以对您的应用程序从模拟端点检索的内容进行细粒度控制,而无需引入任何类型的实际网络操作。

    使用上面显示的代码显然需要您的被测应用程序实际使用模拟的httpClient。 假设您在应用程序中使用 SAP Cloud SDK,这可以通过使用返回模拟客户端的自定义实现覆盖 HttpClientAccessor 中使用的 HttpClientCache 来实现,如下所示:

    class MockedHttpClientCache implements HttpClientCache
    {
        @Nonnull
        @Override
        public Try<HttpClient> tryGetHttpClient(@Nonnull final HttpDestinationProperties destination, @Nonnull final HttpClientFactory httpClientFactory) {
            return Try.of(yourMockedClient);
        }
    
        @Nonnull
        @Override
        public Try<HttpClient> tryGetHttpClient(@Nonnull final HttpClientFactory httpClientFactory) {
            return Try.of(yourMockedClient);
        }
    }
    
    // in your test code:
    HttpClientAccessor.setHttpClientCache(new MockedHttpClientCache());
    

    【讨论】:

    • 谢谢约翰内斯。我们正在对此进行更多分析。也考虑你的观点。
    猜你喜欢
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2010-11-14
    相关资源
    最近更新 更多