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

XML与Wiremock的匹配

胡飞舟
2023-03-14

我正在使用wiremock设置一个虚拟PHP服务器,并希望根据传递的一个XML字段进行匹配。我基本上会有多个请求进入同一个url,但它们之间的主要区别是发票号。wiremock的JSON如下所示

{
  "request": {
    "method": "ANY",
    "urlPattern": ".*/test.php",
    "bodyPatterns" : [{
      "equalToXml": "<InvoiceNumber>6</InvoiceNumber>"
    }]
  },
  "response": {
    "status": 200,
    "bodyFileName": "sample.xml",
    "headers": {
      "Content-Type": "application/xml"
    }
  }
}

当我使用Postman并只传递带有

我希望能够将任何Xml传递给wiremock,只要它具有


共有2个答案

孙财
2023-03-14

使用正则表达式方法找到解决方案,并使用匹配而不是equalToXml

{
  "request": {
    "method": "ANY",
    "urlPattern": ".*/test.php",
    "bodyPatterns" : [{
      "matches": ".*<InvoiceNumber>6</InvoiceNumber>.*"
    }]
  },
  "response": {
    "status": 200,
    "bodyFileName": "sample.xml",
    "headers": {
      "Content-Type": "application/xml"
    }
  }
}
百里涛
2023-03-14

您可能希望使用XPath匹配,如WireMock文档中所述。WireMock有一些很好的XML功能,包括占位符,值得保留。

XPath

如果属性值是有效的XML并且与提供的XPath表达式匹配,则视为匹配。如果XPath计算返回任何元素,则认为XML文档匹配。WireMock委托给Java的内置XPath引擎(通过XMLUnit),因此它最多(至少)支持Java8的XPath版本1.0。

爪哇:

.withRequestBody(matchingXPath("//InvoiceNumber[text()='6']"))

JSON:

{   "request": {
    ...
     "bodyPatterns" : [ {
      "matchesXPath" : "//InvoiceNumber[text()='6']"
    } ]
    ...   },   ... }
 类似资料:
  • 我正在尝试使用独立的wiremck创建API模拟。响应正文取决于请求正文中的属性。 使用JSON,我能够做到。这是示例映射: 然而,我的主要需求是处理google protobuf,我正试图使用文本格式来代替它,模仿者将使用它来模仿API的响应。因此,请求文件是文本格式的,没有任何JSON验证,比如双引号,或者每行末尾的逗号等等。 我发现,使用JSON路径,wiremock由于格式不正确而无法匹配

  • 我使用wiremock来模拟某些请求及其相应的响应,但我试图添加一个正则表达式。不幸的是,这只会引发一个异常,表明请求不匹配。 我也试过了 我发送的请求是

  • 我正试图做到这一点: 我得到一个错误: 我已经测试了正则表达式,它是有效的。我还进行了调试,发现regexpatern也匹配。但出于某种原因,我仍然会犯这个错误。我认为我用错了。 我尝试了一个更简单的版本,但也没有成功: 有什么想法吗?提前感谢。

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

  • 我正在尝试使用以下需求比较Soap UI和Wiremck的能力(这对于我的项目中的大多数情况来说是足够现实的)。 目标是为货币价格服务创建一个模拟。要求: > mytesthost/priceservice/getprice 期望一个称为'cur'的参数,它定义当前对,如:cur=EURHUF 当按如下方式调用时,应该使用保存在文件EURHUF中的XML响应进行响应。xml。 mytesthost

  • wiremock如何将URL路径模式与编码的URL精确匹配?是否需要使用已编码的URL保存映射?这是我试了几个小时,却没能成功的方法。 无线映射 我已经尝试过使用编码URL的不同变体,例如/Systems XYZ(ABC)/2016.10/aaa/bbb/api/ccc/customers/*甚至在映射中对(和)进行URL编码,但我的请求似乎不匹配 我试图针对wiremock/Systems XY