WireMock JSON Stub配置中hasExactly关键字的工作机制疑问
WireMock中
hasExactly关键字的工作逻辑解析 你的核心误解是把hasExactly当成了「匹配器按顺序对应请求头的每个值」,但它的实际逻辑完全不同:
真实工作逻辑
hasExactly的匹配规则分为两点:
- 数量一致:请求头必须恰好包含N个值,N等于
hasExactly数组里匹配器的总数 - 匹配器全覆盖:数组中的每一个匹配器,都能被请求头里的至少一个值满足(不要求对应特定位置的取值)
你的请求为什么匹配成功
结合你的配置和发送的请求(3个X-Request-ID值:Demo1、Demo2、Demo3):
equalTo: "Demo1":被请求头里的Demo1满足contains: "Demo2":被请求头里的Demo2满足doesNotContain: "Demo3":被请求头里的Demo1、Demo2满足(这两个值都不包含Demo3)
三个匹配器都找到了对应的满足值,同时请求头取值数量和匹配器数量一致,因此Stub判定匹配成功,返回200。
你之前误以为第三个匹配器是校验第三个请求头的值,但hasExactly不关心值的顺序,只看值的数量和每个匹配器是否有对应的满足项。
实现顺序匹配的思路
如果需要让请求头的多个值按顺序分别匹配对应条件,WireMock原生的hasExactly无法实现,你可以:
- 把多个值拼接成单个请求头值,用正则匹配器按顺序校验
- 编写自定义匹配器实现顺序校验逻辑
内容的提问来源于stack exchange,提问作者AMOD MAHAJAN
相关产品推荐
相关产品推荐

