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

Espresso UI测试:MockWebServer无法被AVD内应用访问的问题咨询

MockWebServer无法被AVD应用访问的问题解决与分析

你的猜测部分正确,但MockWebServer本质是真正的HTTP服务器,只是默认绑定规则导致了跨进程/设备访问失败,以下是具体分析和解决方案:

核心根因

  • MockWebServer默认绑定的是127.0.0.1(本地回环地址),这个地址仅能接收同一JVM进程内的请求。AVD通过10.0.2.2访问宿主机器的公共网络接口,但MockWebServer没监听该接口,因此请求超时。
  • 单元测试能正常工作,是因为测试代码和MockWebServer在同一进程;而Espresso UI测试中,测试进程与目标应用进程是分离的,跨进程访问自然失败。

解决方法

让MockWebServer绑定到所有可用网络接口(即0.0.0.0),允许外部设备/进程访问:

val mockWebServer = MockWebServer()
// 绑定到0.0.0.0,监听所有网络接口
mockWebServer.start(InetAddress.getByName("0.0.0.0"), 8080)
// 给应用的请求地址用AVD指向宿主的固定IP:10.0.2.2
val apiBaseUrl = "http://10.0.2.2:${mockWebServer.port}"

额外注意:

  • 检查宿主机器防火墙是否拦截了8080端口的入站请求,必要时临时放行该端口。
  • 若AVD使用桥接网络模式,需改用宿主机器的局域网IP(如192.168.x.x)替代10.0.2.2。

其他可能根因排查

  1. 端口冲突:用lsof -i :8080(macOS/Linux)或netstat -ano | findstr :8080(Windows)检查8080端口是否被其他程序占用,导致MockWebServer未成功绑定。
  2. 地址配置错误:确保应用请求的base URL是10.0.2.2:8080,而非localhost:8080(AVD的localhost指向自身虚拟机,不是宿主)。
  3. 测试进程启动时机:确保MockWebServer在应用启动前完成初始化并绑定端口,避免应用发起请求时服务器未就绪。

结论

你的需求完全可以实现,核心是修改MockWebServer的绑定地址为0.0.0.0,同时让应用使用AVD指向宿主的专用IP地址发起请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:42:06