Gradle托管设备无法接收测试执行器结果的问题求助
解决Gradle托管设备并行Espresso测试后"无法接收测试结果"构建失败问题
使用Gradle 8.0.2,通过Gradle托管设备在2个模拟器上并行运行Android Espresso测试,执行命令如下:
./gradlew pixel4api31DebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.xxx.yyy.zzz.Suites.CITestSuite -Pandroid.experimental.androidTest.numManagedDeviceShards=2 --enable-display -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect"
测试完成后触发构建失败,错误日志如下:
Could not receive test results from the test executor. io.grpc.StatusRuntimeException: CANCELLED: client cancelled at io.grpc.Status.asRuntimeException(Status.java:526) at io.grpc.stub.ServerCalls$StreamingServerCallHandler$StreamingServerCallListener.onCancel(ServerCalls.java:284) at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.closedInternal(ServerCallImpl.java:353) at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.closed(ServerCallImpl.java:341) at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1Closed.runInContext(ServerImpl.java:844) at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123) at java.base@11.0.18/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base@11.0.18/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base@11.0.18/java.lang.Thread.run(Thread.java:829)
BUILD FAILED in 56m 28s
但实际测试报告显示所有测试均成功通过:
报告路径:file:///Users/xxx/repos/android/test/app/build/reports/androidTests/managedDevice/allDevices/index.html
解决方法
- 延长gRPC连接超时时间:在项目根目录的
gradle.properties中添加配置,避免因测试耗时过长触发连接取消:org.gradle.internal.remote.connection.timeout=600000 org.gradle.internal.remote.connection.idle.timeout=600000 - 禁用统一测试平台:在测试命令中添加参数,回退到旧的测试结果传输机制:
./gradlew ... -Pandroid.experimental.androidTest.useUnifiedTestPlatform=false - 匹配Gradle与AGP版本:确保Android Gradle插件(AGP)版本与Gradle 8.0.2兼容,推荐使用AGP 8.0.0及以上版本,可在项目根目录的
build.gradle中调整:buildscript { dependencies { classpath 'com.android.tools.build:gradle:8.0.2' } } - 均衡拆分测试用例:调整测试套件的拆分逻辑,避免单个shard的测试数量过多导致超时,通过更细粒度的测试分组优化并行效率。
- 优化模拟器性能:如果环境允许,改用硬件GPU加速(替换
swiftshader_indirect为auto或host),或增加模拟器内存分配,减少卡顿导致的通信中断。
内容的提问来源于stack exchange,提问作者reutsey
相关产品推荐
相关产品推荐

