我有一个带有REST API的Spring Boot应用程序。在幕后,它使用售卖的SDK来调用供应商服务。我需要对我的应用程序运行负载测试,但不想调用供应商API并在测试期间意外崩溃他们的系统。
是否可以在JUnit测试之外使用Mockito在正常的应用程序运行时期间为供应商SDK对象创建模拟?
我认为当配置文件是“性能测试”时,我会使用基于配置文件的配置光束来启用模拟对象。但我发现没有任何文章/讨论/提及使用Mockito这样的人,它让我第二次猜测我的方法。想法?
答案 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?