在Java Spring中使用外部API服务器进行压力测试-模拟响应?

时间:2018-12-11 20:24:50

标签: java spring microservices stress-testing wiremock

我有一个微服务架构设置,我正在寻找压力测试它。我有一个非常复杂的设置,其中包含一些同步的HTTP请求和一个消息队列系统(RabbitMQ)。

当我使用另一家公司的API服务器时,我不想冒给他们的服务器施加压力的风险。该请求是一个同步调用,它询问API提供者并返回相当大的响应。相反,我希望有一些存根/模拟将返回类似的响应并具有类似的延迟。例如,假设该服务器的响应为5s并返回2kb的数据,那么我想引入5s延迟并以我具有的格式或多或少地返回一些相对大小的数据(换句话说,我想要一些自定义)准备好了。

为此,我需要(a)捕获相当大的响应并进行编辑。特别是,我想对其进行编辑以过滤掉一些敏感数据,并增加其大小并使其更大,以便强调系统的带宽方面。 (b)我需要尽可能地靠近本机解决方案,以便从此方面更好地掌握响应时间,并且我还希望在进行压力测试时尽可能减少开销。我一直在研究一些解决方案,例如WireMock,如果我的理解是正确的,则可以设置一个假服务器进行测试。这对我不起作用,因为我需要使用自己的服务器(基于TomCat)来保持与我的体系结构的距离尽可能近。

2 个答案:

答案 0 :(得分:1)

您可以在Servlet容器(包括Tomcat)中运行WireMock。您将失去对某些配置属性的访问权限,但是在您描述的情况下这可能无关紧要。

有关详情,请参见此处:http://wiremock.org/docs/getting-started/#Deploying-into-a-servlet-container

或者,您可以使用MockLab,它是基于WireMock的完全托管的服务。

答案 1 :(得分:1)

是的,Wiremock听起来是个不错的建议。对于我的团队而言,wiremock非常有效。

我建议采用以下方法: 安装Docker 使用docker-compose up在docker容器中启动Wiremock。 docker-compose.yaml示例:

version: "3"
services:
 wiremock:
  image: rodolpheche/wiremock:latest
  ports:
    - "8181:8080"
  volumes:
    - ./__files/:/./home/wiremock/__files/
    - ./mappings/:/./home/wiremock/mappings/
  command:
    - -verbose
    - -global-response-templating

docker-compose up(在保存yaml的目录中,并接受文件系统访问请求) 那么你应该准备好了。

Api的网址应指向http://localhost:8181

之后,使用真实数据(http://localhost:8181/__admin/recorder)进行记录

并在录制时输入您的http作为外部api。

将正文拆分为单独的文件,并将其放置在__files文件夹中。 指向请求文件中的“ bodyFileName”文件(映射)

将Wiremock数据文件(__files)与请求文件(映射)分离后,您可以使用模板逻辑在响应中启用日期计算(现在+ 1天)之类的功能,以及使测试数据持久且可重用的其他重要功能

我在这里有一些建议。 mobileera_wiremock_kb

另外,在捕获了一些外部api场景之后,您还可以设置一个共享的Wiremock,以供其他开发人员访问。