Wiremock Stand alone - 如何使用请求数据操作响应

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wiremock Stand alone - 如何使用请求数据操作响应相关的知识,希望对你有一定的参考价值。

我试图使用Wiremock Standalone服务器实现POST REST调用的模拟。我面临这样的挑战,假设帖子正文包含一个“名称”字段及其值,应该在该POST调用的响应中返回相同的值。我的json文件如下所示:

{
"priority": 1,
"request": {
    "method": "POST",
    "urlPath": "/primeSlots",
    "bodyPatterns" : [ {
        "matchesJsonPath" : "{ "things": [ { "name": "794363" }] 
 }"
    } ]
 },
 "response": {
    "status": 200,
    "body": "{{$.things.name.value}}",
    "transformers": ["response-template"]
 }
}

所以,我需要获得值,即794363,但使用上述方法无法在post响应体中获取它。

我也试过这个:

{
 "request": {
    "method": "POST",
    "urlPath": "/transform",
    "bodyPatterns": [
        {
            "matchesJsonPath" : "$.things[?(@.name =~ /[0-9]+/i)]"
        }
    ]
  },
  "response": {
    "status": 200,
    "body": "{"responseName": "
   {{request.body.things.name.value}}"}",
    "headers": {
        "Content-Type": "application/json"
    },
    "transformers": ["body-transformer"]
  }
 }

所以我的问题是,即使我使用的regEx与请求中的任何数字相匹配,如何使用Wiremock独立的json文件在响应中返回相同的数字?谢谢。

答案

不幸的是,WireMock的响应模板变换器目前还没有将请求体分解为Map,这对于你想要做的事情是必要的。请求正文只是一个字符串。

启用此功能的最简单方法可能是编写一个实现JSONPath的Handlebars帮助程序或其他一些查询JSON文档的机制,然后在初始化WireMock时将其与模板转换器一起注册。

在某些时候,我会编写把手助手来为XML和JSON做这种事情,但这不会有一段时间。

另一答案

今天我遇到了和你一样的情况,并找到了一个我想与你分享的解决方案:

  1. 创建扩展ResponseDefinitionTransformer的自己的类
  2. 在您自己的变换器类中添加Handlebar功能(请参阅https://github.com/jknack/handlebars.java如何操作)
  3. (可选)附加您自己的/其他助手,例如Arrays.stream(StringHelpers.values()).forEach(helper -> this.handlebars.registerHelper(helper.name(), helper));
  4. 将变换器自定义导出为单独的JAR文件
  5. 创建一个启动批处理脚本,以使用您自己的转换器扩展启动WireMock独立版本,例如java -cp "-cp ".libwiremock-standalone-2.5.1.jar;.libcustomTransformer.jar" com.github.tomakehurst.wiremock.standalone.WireMockServerRunner --extensions "your.name.CustomTransformer"(Linux使用:而不是;作为类路径分隔符)

如果您有多个变换器,只需在, arg中使用--extensions(逗号)作为分隔符定义所有变换器。

以上是关于Wiremock Stand alone - 如何使用请求数据操作响应的主要内容,如果未能解决你的问题,请参考以下文章

Notifications.getExpoPushTokenAsync无法在Stand Alone iOS上运行

Rename a Computer that Hosts a Stand-Alone Instance of SQL Server

Rename a Computer that Hosts a Stand-Alone Instance of SQL Server

快速了解单点集群热备RAID技术

Docker

如何在 JUnit 5 中替换 WireMock @Rule 注释?