Wiremock URL匹配逻辑

dba*_*rev 4 mocking soapui wiremock

我试图使用以下要求比较Soap UI和Wiremock的能力(对于我的项目中的大多数情况,这是足够现实的).

目标是为货币价格服务创建模拟.要求:

  • 无障碍

    mytesthost/priceservice /用getPrice

  • 期待一个名为'cur'的参数,它定义了currenypair,如:cur = EURHUF

  • 如下调用时,应使用保存在EURHUF.xml文件中的XML响应进行响应.

    mytesthost/priceservice /用getPrice?CUR = EURHUF

  • 如下调用时,应使用保存在文件EURUSD.xml中的XML响应进行响应.

    mytesthost/priceservice /用getPrice?CUR = EURUSD

  • 当使用任何其他货币对调用时,它应该响应存储在NOCURR.xml中的错误响应

在Soap UI中实现这一点归结为准备结果,而不是实现几行Groovy代码来选择响应.

当使用wiremock解决问题时,我可以匹配两个'happpy'路径的情况,但不知道如何实现回退情况(使用NOCURR.xml).

关于我如何进行匹配的示例:

{
    "request": {
        "method": "GET",
        "url": "/priceservice/getprice?cur=EURUSD"
    },
    "response": {
        "status": 200,
        "bodyFileName": "EURUSD.xml"
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以用wiremock实现这个目标吗?我主要感兴趣的是通过Json配置来实现这一点但是如果Java API也是如此.

dba*_*rev 11

找到了解决方案.所以我们有三个Json映射文件:

  1. 对于EURUSD匹配
  2. 对于CHFHUF匹配
  3. 其他一切 - 甚至是现有的货币对

对于第1和第2,映射是这样的:

{
    "priority": 1,
    "request": {
        "method": "GET",
        "url": "/priceservice/getprice?cur=CHFHUF"
    },
    "response": {
        "status": 200,
        "bodyFileName": "CHFHUF.xml"
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意优先级= 1!

对于'else'案例,我们有:

{
    "priority": 2,
    "request": {
        "method": "GET",
        "urlPattern": "/priceservice/.*"
    },
    "response": {
        "status": 200,
        "bodyFileName": "NOCURR.xml"
    }
}
Run Code Online (Sandbox Code Playgroud)

不仅这个优先级较低(2)而且'url'我还为正则表达式匹配添加了'userPattern'.