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

Wiremock URL匹配逻辑

仲璞瑜
2023-03-14

我正在尝试使用以下需求比较Soap UI和Wiremck的能力(这对于我的项目中的大多数情况来说是足够现实的)。

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

>

mytesthost/priceservice/getprice

期望一个称为'cur'的参数,它定义当前对,如:cur=EURHUF

当按如下方式调用时,应该使用保存在文件EURHUF中的XML响应进行响应。xml。

mytesthost/priceservice/getprice?cur=EURHUF

当按以下方式调用时,应使用保存在文件EURUD中的XML响应进行响应。xml。

mytesthost/priceservice/getprice?cur=欧元兑美元

当使用任何其他currencypair调用时,它应该使用存储在NOCURR中的错误响应进行响应。xml

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

当使用wiremock解决问题时,我可以匹配两种“happy”路径情况,但不知道如何实现回退情况(使用NOCURR.xml)。

关于我如何做匹配的例子:

{
    "request": {
        "method": "GET",
        "url": "/priceservice/getprice?cur=EURUSD"
    },
    "response": {
        "status": 200,
        "bodyFileName": "EURUSD.xml"
    }
}

我能用wiremock做到这一点吗?我主要感兴趣的是通过Json配置来实现这一点,但如果Java API是这样的话,也可以。

共有1个答案

凌伟泽
2023-03-14

找到了解决办法。我们有三个Json映射文件:

  1. 欧元兑美元匹配

对于第一个和第二个映射是这样的:

{
    "priority": 1,
    "request": {
        "method": "GET",
        "url": "/priceservice/getprice?cur=CHFHUF"
    },
    "response": {
        "status": 200,
        "bodyFileName": "CHFHUF.xml"
    }
}

请注意优先级=1!

至于“else”案例,我们有:

{
    "priority": 2,
    "request": {
        "method": "GET",
        "urlPattern": "/priceservice/.*"
    },
    "response": {
        "status": 200,
        "bodyFileName": "NOCURR.xml"
    }
}

这不仅具有较低的优先级(2),而且我还为正则表达式匹配添加了“userPattern”,而不是“url”。

 类似资料:
  • 我和ElasticSearch一起工作。当我执行此查询时: 我得到了我想要的(所有的结果,其中有参考黑莓,但不是Q10)。 但是,我想限制搜索的字段只限于“title”字段。例如,_source文档有标题、正文、标签等,我只想搜索标题。ElasticSearch“匹配”似乎很适合我... 虽然这只成功地搜索了标题,但它仍然返回标题中带有Q10的结果,这与上面的搜索不同。 我正在看比赛文档,但似乎不

  • 我有通过查找属性来检查命名元组和数据类的代码: 如何使用Python 3.10的匹配/大小写结构模式匹配来表达这一点?

  • 本文向大家介绍jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析,包括了jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析的使用技巧和注意事项,需要的朋友参考一下 近期看了一些网上关于Sizzle的分析文章,就匹配次序往往就说使用了从右到左的逆向匹配法,但是具体如何并没有详细介绍,或者就像我之前的几篇文章一样,就代码一行一行做详细介绍,但缺乏整体概念,这里就jQuery

  • 本节描述在消费者端测试时可以使用的各种不同的请求/响应匹配技术。注意,以下演示的例子使用的是Ruby DSL,因为各种实现有所不同,请参考自己所使用的特定语言和框架。 注意 如果在消费者端编写测试时所使用的语言与提供者端不同,必须确保两者使用的是共同的Pact规范,否则就无法进行验证。 正则表达式 有时请求或响应中的某些键值是事先无法知道的——比如时间戳或者生成的ID。 你所需要的是能够以某种方式

  • 一个简单的if/else往往是不够的,因为你可能有两个或更多个选项。这样else也会变得异常复杂。Rust 有一个match关键字,它可以让你有效的取代复杂的if/else组。看看下面的代码: let x = 5; match x { 1 => println!("one"), 2 => println!("two"), 3 => println!("three"),

  • 我可以使用哪种匹配器? { test: /\.js$/, loader: 'babel-loader' } - Matches just .js { test: /\.(js|jsx)$/, loader: 'babel-loader' } - Matches both js and jsx Generally put it's just a JavaScript regex so standar