代码之家  ›  专栏  ›  技术社区  ›  alltej

具有动态响应的Wiremock

  •  2
  • alltej  · 技术社区  · 6 年前

    我有一个Wiremock服务器的独立实例。映射作为json文件存储在mappings文件夹下。我有一个POST请求,需要在响应中返回一个动态ID(整数)。有没有办法在json文件中对此进行配置?

    3 回复  |  直到 6 年前
        1
  •  3
  •   Mark Han user8107328    6 年前

    这似乎是一个完美的用例 OpenTable's Wiremock Body Transformer .

    它可以很容易地与独立服务器集成,如下所示:

    java -cp "wiremock-body-transformer-1.1.6.jar:wiremock-2.3.1-standalone.jar" com.github.tomakehurst.wiremock.standalone.WireMockServerRunner --verbose --extensions com.opentable.extension.BodyTransformer

    并允许您轻松指定要在响应中匹配的动态变量。

    下面是一个获取随机整数的示例,无需在请求中指定任何内容,但是如果您需要将请求中的特定变量与响应匹配,那么使用此扩展也是非常可行的,在自述文件中可以找到许多示例。

    {
        "request": {
            "method": "POST",
            "urlPath": "/transform",
        },
        "response": {
            "status": 200,
            "body": "{\"randomInteger\": \"$(!RandomInteger)\"}",
            "headers": {
                "Content-Type": "application/json"
            },
            "transformers": ["body-transformer"]
        }
    }
    
        2
  •  6
  •   A. Kootstra    5 年前

    为了使上面的示例正常工作,我必须使用 --global-response-templating . 然后我看到,例如, {{now}} 我想要的就是工作。不确定文档是否指定了这个--我尝试了“总是有用的”帮助。

        3
  •  3
  •   A. Kootstra    6 年前

    在WireMock中,有许多响应模板助手函数用于生成 random strings

    映射文件:

    {
      "request": {
        "method": "POST",
        "url": "/dynamic_id"
      },
      "response": {
        "headers": {
          "Content-Type": "application/json"
        },
        "status": 200,
        "body": "{{randomValue type='UUID'}}",
        "transformers": ["response-template"]
    
      }
    }
    

    使用空邮件 http://wiremock/dynamic_id 将返回类似于以下内容的id: c2e6bf32-c9a3-45c0-b988-94fad04cc7a2

    开始WireMock:

    java -jar wiremock-standalone-2.18.0.jar --port 8181 --verbose --local-response-templating