WireMock Stub未返回QueryForParameter请求模拟响应,请求不匹配求助
WireMock Query参数匹配失败排查方案
问题根源
你当前的Stub配置中,URL末尾多了一个空格(endpoint+"?city=1 "),这导致WireMock判定Stub的URL与实际请求URL不匹配——尽管两者视觉上几乎一致,但空格的存在破坏了精确匹配规则。
正确配置方式
推荐两种可靠的配置方案:
方案1:使用withQueryParam单独匹配参数(推荐)
这种方式无需手动拼接URL,WireMock会单独校验查询参数,更灵活且不易出错:
ResponseDefinitionBuilder mockResponse1 = new ResponseDefinitionBuilder(); mockResponse1.withStatus(201); mockResponse1.withBodyFile("pp/isOpenResponse.json"); // 正确配置:单独指定查询参数 WireMock.stubFor(WireMock.get(endpoint) .withQueryParam("city", equalTo("1")) .willReturn(mockResponse1)); startServer(); String testapi= "http://localhost:8080"+endpoint; System.out.print("service to be hit : "+testapi); Response mockResponse= RestAssured.given().queryParam("city","1").get(testapi).then().extract().response(); System.out.println(mockResponse.prettyPrint());
方案2:精确拼接无冗余空格的URL
如果坚持手动拼接URL,必须确保与实际请求的URL完全一致,删除多余空格:
// 正确配置:URL末尾无多余空格 WireMock.stubFor(WireMock.get(endpoint+"?city=1") .willReturn(mockResponse1));
方案优势说明
方案1的优势在于:
- 不受查询参数顺序影响,参数顺序变化时依然能匹配
- 可读性更强,便于维护和修改参数规则
- 避免手动拼接URL时的格式错误(如空格、特殊字符处理)
修改后重新运行测试,WireMock即可正确匹配带有city=1查询参数的GET请求。
内容的提问来源于stack exchange,提问作者Rahil Kumar
相关产品推荐
相关产品推荐

