模拟公共后端响应的wiremock

问题描述

我正在测试一个调用公共后端的应用。

我想使用 wiremock 来模拟来自公共后端的响应。

我正在看类似的东西

  1. 应用程序向 api.example.com 发出请求,该请求通过本地主机上的有线模拟代理强制执行:
  2. wiremock 根据我提供的规则匹配 URL 并返回模拟响应

我能找到的唯一示例将本地主机请求映射到真实后端或模拟响应本地主机。

解决方法

如果我理解您的问题,该应用的行为如下:

  • 应用向您的后端发送请求
  • 您的后端响应转发请求到公共后端
  • 应用向公共后端发送请求
  • 公共后端响应

据我所知,WireMock 只能在您模拟来自后端的响应并将该响应的转发请求指向另一个模拟响应时才能实现这一点。 WireMock 只知道在向 WireMock 发出请求时进行重定向和代理。 WireMock 不会充当中间人代理,监听所有发出的请求(不管 url)并有选择地返回模拟响应。 WireMock 仅在您直接点击 WireMock 时才知道代理/转发/响应。所以你需要像......

{
    "request" : {
        "url" : "/my-backend","method": GET
    },"response" : {
        "status" : 302,"headers" : {
            "location" : "/public-backend"
        }
    }
}

这会将转发请求返回到 /public-backend 网址。 (根据您的实际 API 在返回转发请求时的样子,上述响应可能不准确。)然后您需要模拟请求/响应映射的样子

{
    "request" : {
        "url" : "/public-backend","method" : "GET"
    },"response" : {
        // response
    }
}

根据您用于运行测试的内容,最好利用现有的拦截/代理功能,运行程序必须侦听对某些 url 的请求并以这种方式返回模拟响应。例如,TestCafe 可以intercept HTTP requests 并返回您的自定义响应。如果您以这种方式进行测试,那么您只需模拟来自公共 API 的响应,而无需模拟来自后端的响应。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...