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

Android集成WireMock验证请求失败:收到请求列表为空

解决WireMock无法捕获Android测试中对外请求的问题

核心问题

你当前的测试代码直接向http://google.com发送请求,完全没有经过本地运行在8888端口的WireMock服务,因此WireMock无法捕获到任何请求,自然触发验证失败的报错。

修正方案

要让WireMock捕获到请求,必须让所有目标请求先经过WireMock,再由WireMock转发到真实的目标地址。以下是具体修正步骤:

1. 配置WireMock转发规则

在测试中添加Stub规则,让WireMock将接收到的请求转发到真实的google.com地址。

2. 修改请求目标地址

将测试代码中的请求目标改为WireMock的本地服务地址:

  • Android模拟器环境下使用http://10.0.2.2:8888(模拟器的localhost映射到主机的10.0.2.2)
  • 真机测试使用主机的IP地址加8888端口,或直接用localhost(需确保真机与主机同网络)

3. 验证请求捕获

执行验证操作,确认WireMock已经接收到请求。

修改后的测试代码

val wireMockRule: WireMockRule = WireMockRule(8888)

@get:Rule
open val ruleChain: RuleChain = RuleChain
    .outerRule(grantPermissionRule)
    .around(wireMockRule)
    .around(activityRule)

@Test
fun testWiremock() {
    // 配置WireMock转发请求到真实的google.com
    wireMockRule.stubFor(get(anyUrl())
        .willReturn(aResponse()
            .proxiedFrom("http://google.com")))

    // 根据测试环境选择对应的WireMock地址
    val url = "http://10.0.2.2:8888"
    val client = OkHttpClient()
    val request = Request.Builder().url(url).build()
    val response = client.newCall(request).execute()
    assertNotNull("请求应返回有效响应", response.body!!.string())

    // 验证WireMock捕获到了请求
    verify(anyRequestedFor(UrlPattern.ANY))
}

额外说明

  • 如果要验证应用本身发出的请求(而非测试代码里的OkHttpClient请求),需要修改应用的网络客户端配置,将代理指向WireMock的地址。
  • 确保测试设备/模拟器与运行WireMock的主机处于同一网络,且8888端口未被其他程序占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:41:13