Android Studio:androidTest测试代码为何在手机而非电脑执行HTTP GET?
解决androidTest测试在设备运行而非本地执行的问题
原因
androidTest目录下的测试属于Instrumented插桩测试,这类测试的设计目标就是在真实Android设备或模拟器上运行,用来验证应用在Android环境中的实际行为。你的测试代码会被打包部署到连接的设备上执行,所以HTTP请求自然从手机端发起。
解决方案
方案1:移到本地单元测试目录(推荐)
Android Studio的src/test/java目录是本地单元测试的存放位置,这类测试直接在本地电脑的JVM上运行,不需要依赖Android设备,完全满足你本地执行HTTP请求的需求。
操作步骤:
- 把你的
HttpRequests测试类从src/androidTest/java对应的包路径,移动到src/test/java的同包路径下 - 你的代码基于OkHttpClient实现,不依赖任何Android SDK类,无需修改代码
- 重新运行测试,此时请求会直接在本地电脑执行
方案2:插桩测试中转发请求(仅特殊场景使用)
如果必须保留在androidTest目录(比如测试需要依赖Android环境的其他逻辑),可以通过adb reverse命令将设备的请求端口转发到本地,或者在本地启动代理服务,但这种方式步骤繁琐,非必要不推荐。
你的测试代码示例:
public class HttpRequests { @Test public void dropSession() throws IOException { String url = "url.url"; OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url) .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { throw new IOException("Unexpected response code: " + response); } String responseBody = response.body().string(); } } }
内容的提问来源于stack exchange,提问作者Lorso69
相关产品推荐
相关产品推荐

