当前位置: 首页 > 知识库问答 >
问题:

Wiremock单机版——如何用请求数据操作响应

左丘宜年
2023-03-14

我试图使用Wiremock Standalone服务器实现POST REST调用的模拟。我面临这样的挑战,假设post主体包含一个“name”字段及其值,那么在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,但使用上面的方法无法在后响应体中获取它。

我也试过这个:

{
 "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"]
  }
 }

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

共有2个答案

白才艺
2023-03-14

不幸的是,WireMock的响应模板转换器目前没有将请求正文分解为Map,这对于您尝试执行的操作是必要的。请求正文只是一个字符串。

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

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

糜凯泽
2023-03-14

今天,我和你处境一样,找到了一个解决办法,我想和你分享:

  1. 创建自己的类来扩展响应定义转换器
  2. 在您自己的转换器类中添加车把功能(请参阅 https://github.com/jknack/handlebars.java 操作方法
  3. (可选)附加您自己的/其他帮助程序,例如数组流(字符串助手,值)。

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

 类似资料:
  • 我有一个 JSON 请求,如下所示: 作为响应,我需要在一个字段中发送完整的请求JSON对象。我的Wiremock存根JSON是, 如何在响应字段中发送请求正文? 我现在收到错误: 我使用的是导致此问题的wiremock版本。我将版本升级到

  • 我正在尝试编写一个扩展,在其中我可以将请求和响应存储在数据库中。我扩展了PostActionServe,现在有两个问题 > 启动模拟服务器后,我向 http://localhost:8089/__admin/mappings 提交了发布请求,但都未调用 doAction 或 doGlobalAction。 现在,如果我到达终点/一些/东西,那么只有全局动作被调用。 我希望当我向mappings A

  • 我读了这个问题:为什么使用BufferedInputStream逐个字节读取文件比使用FileInputStream更快?根据作者比更快,因为当方法在中调用时,它总是使用本地API进行系统调用,以便获取单个字节,而做同样的事情,但是它需要操作系统的字节块,并将它们存储在本地字段中,称为buf,该字段在BIS类中声明,然后当读取()被称为BIS时,返回字节从数组。 我查看了BIS的代码,特别是方法,

  • 我们希望使用Kafka作为我们的企业服务总线(ESB)。 我知道kafka的大多数用例都是异步用例。 在我们的系统中,是否仍然可以使用kafka在两个endpoint之间进行请求-响应消息传递?

  • 我正在使用Spring云合同创建集成测试。从配置到将存根jar添加到项目,一切都正常工作。因此,我发现尽管所有参数和标头都相同,但请求不匹配。 这是API测试 这是API调用的合约 即使我从合同请求中删除用户名,仍然收到相同的错误。 我需要为X-B3-ParentSpanId等创建标题来使其匹配吗?

  • 请帮助我在JMeter中以正确的方式发送表单数据post请求。