sap-cloud-sdk - 如何最好地模拟 S4 端点来进行性能测试(负载测试)?
问题描述
这与 cloud sdk 本身无关,但更多的是关于模拟我们通常使用 c sdk 查询的 s4 端点。我们想为我们的负载测试执行此操作,我们不希望负载测试持续到 s4 端点。我们正在考虑使用 wiremock 来模拟端点,但问题是,wiremock 本身中的模拟逻辑是否会对我们正在采用的指标做出微不足道的贡献。如果是这样,那么这个指标就变得有点不可靠了,因为我们想要的是应用程序性能指标而不是模拟框架的指标。
其他方法是使用专门用于此的模拟服务器应用程序,这样我们就不必从应用程序进行任何模拟。只需将呼叫路由到模拟服务器应用程序(可能使用模拟目的地)
我的问题是,你们遇到过这个用例吗?也许你自己,或者也许来自你的消费者。我想知道 SAP 的其他团队是如何解决这个问题的。
谢谢,萨钦
解决方案
在像您这样的情况下,应该测试整个系统(包括来自外部服务的响应),我们通常建议使用 Wiremock。这是因为 Wiremock 相当容易设置并且对于常规测试场景来说工作得很好。但是,正如您还指出的那样,Wiremock 为测试代码引入了显着的运行时开销,因此,任何类型的性能测量或多或少都无用。
因此,您可以尝试HttpClient
使用 Mockito 来模拟:
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,这可以通过使用返回模拟客户端的自定义实现覆盖HttpClientCache
使用的来实现,如下所示:HttpClientAccessor
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());
推荐阅读
- angular - AngularTreeComponent:treeModel.update() 异步工作。如何等待完成更新?
- c++ - C++ SSO:如何以编程方式查找是否使用短字符串优化分配了 std::wstring?
- python - 如何在 PyQt5 中离线使用folium map
- verilog - 使用 D 触发器的 4 位寄存器,具有启用和异步复位功能
- c++ - 如何使用具有运行时类型的编译时接口?
- python - 从 datetime 对象中提取时间并与字符串时间进行比较
- python-3.x - aws-secretsmanager-caching-python :: 缓存是否在同一 EC2 实例上运行的不同 Docker 容器之间共享?
- css - 自定义 Angular 组件未在 ie11 上应用 css 类
- sql - Using jsonb_agg/jsonb_build_object to parse to inner structs
- reactjs - React - 酶测试 - 模拟点击后如何检查课程