You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WIREMOCK编写测试时遇请求不匹配问题求助

解决WireMock「Request was not matched」(CONNECT方法+URL为null)问题

核心问题根源

错误提示里的CONNECT方法+URL为null,本质是你的HTTP客户端没有直接向WireMock发起GET请求,而是尝试建立HTTP隧道连接——通常是因为请求URL格式错误,或者客户端被配置了全局代理,导致请求走向异常。

具体排查与解决步骤

  • 修正HttpRequest的URL构建逻辑
    你的代码里用相对路径/greeting构建HttpRequest,如果httpService.execute没有自动拼接WireMock的base URL(比如http://localhost:8080),客户端会把相对路径判定为无效URL,进而发起CONNECT隧道请求。
    解决:构建请求时使用完整URL,示例:

    String fullUrl = helloProperties.getHttp().getBaseUrl() + "/greeting";
    HttpRequest httpRequest = HttpRequest.builder(fullUrl).get().addHeaders(generateHttpHeaders()).build();
    

    或者确认httpService.execute内部会自动将urlPart与helloProperties.getHttp()中的base URL拼接。

  • 检查全局代理配置
    如果应用配置了全局HTTP代理,且未将WireMock地址加入代理白名单,客户端会把请求发往代理服务器,而非直接到WireMock,这就会触发CONNECT隧道请求。
    解决:测试环境中禁用全局代理,或调整代理规则,排除WireMock的目标地址。

  • 验证WireMock的监听地址与端口
    确保WireMock启动的地址、端口,和helloProperties.getHttp()中配置的base URL完全一致。比如WireMock默认监听localhost:8080,如果配置里是其他地址,请求会发错目标,间接引发异常。

  • 调试实际请求内容
    在测试中添加日志,打印httpRequest的完整URL和请求方法;或者开启WireMock的--verbose模式查看请求日志,确认实际收到的请求细节,验证是否真的是CONNECT请求,以及请求的目标地址。

补充代码调整建议

你的WireMock Stub配置本身是正确的,但可以明确指定WireMock的端口,避免端口冲突:

// JUnit5环境下用扩展指定WireMock端口
@RegisterExtension
static WireMockExtension wireMock = WireMockExtension.newInstance()
    .options(wireMockConfig().port(8080))
    .build();

// 用wireMock实例创建Stub
wireMock.stubFor(get("/greeting").willReturn(aResponse()
    .withStatus(HttpStatus.OK.value())
    .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
    .withBody(jsonResponse)));

内容的提问来源于stack exchange,提问作者Kalhara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:08:11