Google CTS测试__2019.12.13

本文深入探讨了CTS测试,即兼容性测试的重要性和应用范围,详细解释了其在设备配置和技术规范中的作用,为读者提供了全面的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在跑CTS的AutoFill相关测试中发现两项超时报错android.autofillservice.cts.saveui.AutofillSaveDialogTest#testSuppressSaveDialog_onMixedFields_withIsCredential FAILURE: com.android.compatibility.common.util.RetryableException: onFillRequest() not called (timeout=FILL_TIMEOUT: [current=20000ms; multiplier=2.0x; max=20000ms]) at android.autofillservice.cts.testcore.InstrumentedAutoFillService$Replier.getNextFillRequest(InstrumentedAutoFillService.java:575) at android.autofillservice.cts.saveui.AutofillSaveDialogTest.testSuppressSaveDialog_onMixedFields(AutofillSaveDialogTest.java:430) at android.autofillservice.cts.saveui.AutofillSaveDialogTest.testSuppressSaveDialog_onMixedFields_withIsCredential(AutofillSaveDialogTest.java:253) 和android.autofillservice.cts.saveui.AutofillSaveDialogTest#testSuppressSaveDialog_onOnlyCredmanFields_withIsCredential FAILURE: com.android.compatibility.common.util.RetryableException: onFillRequest() not called (timeout=FILL_TIMEOUT: [current=20000ms; multiplier=2.0x; max=20000ms]) at android.autofillservice.cts.testcore.InstrumentedAutoFillService$Replier.getNextFillRequest(InstrumentedAutoFillService.java:575) at android.autofillservice.cts.saveui.AutofillSaveDialogTest.testSuppressSaveDialog_OnCredmanOnlyFields(AutofillSaveDialogTest.java:389) at android.autofillservice.cts.saveui.AutofillSaveDialogTest.testSuppressSaveDialog_onOnlyCredmanFields_withIsCredential(AutofillSaveDialogTest.java:244)设置的等待时间为20秒,测试机上没有插入电话卡,在不延长等待时间的情况下,如何解决这两个fail项
03-29
<think>嗯,用户遇到了Android CTS AutoFill测试中的超时失败问题,特别是CTS AutofillSaveDialogTest的几个测试用例,比如testSuppressSaveDialog_onMixedFields和testSuppressSaveDialog_onOnlyCredmanFields_without_phone_card。他们提到出现了RetryableException的FILL_TIMEOUT错误,而且不想通过延长等待时间来解决这个问题。我需要帮他们找出原因并提供解决方案。 首先,我应该考虑超时发生的可能原因。AutoFillService的响应时间过长可能是主要原因。用户提到不延长等待时间,所以需要优化服务本身的响应速度,或者确保正确触发保存对话框的逻辑。 接下来,可能的解决方案包括检查AutofillService的实现,确保onFillRequest方法处理迅速,避免在主线程进行耗时操作。如果服务在后台线程处理请求,需要确认异步任务是否及时完成。此外,填充数据的有效性也很重要,比如数据集是否正确设置,有没有字段遗漏导致服务无法正确识别。 然后,测试用例中的字段混合情况可能需要特别处理。例如,部分字段属于Credential Manager,部分不是,这种情况下AutofillService的行为可能不同。需要确保服务正确区分这些字段,并适当调用setSuppressSaveDialog方法,避免对话框未按预期关闭。 还有,检查是否在合适的时机调用finishFill()方法,这可能会影响超时。如果服务没有正确完成填充操作,系统可能会一直等待直到超时。 另外,测试环境问题也不能忽视,比如模拟器或设备的性能问题,或者有其他后台进程影响测试执行。建议用户尝试在真机上运行测试,并监控系统资源使用情况。 最后,需要查看系统日志和测试报告中的具体错误堆栈,定位问题发生的具体位置。可能涉及AutofillService的生命周期管理,或者与Credential Manager的交互是否正确处理。用户应该启用详细日志,分析服务在超时前的操作步骤,找出瓶颈所在。</think>针对Android CTS AutoFill测试中超时失败问题,特别是`AutofillSaveDialogTest`相关的`FILL_TIMEOUT`错误,以下是分步骤解决方案: ### 一、核心问题定位 1. **响应时间瓶颈** AutofillService必须在系统发出`onFillRequest()`后500ms内响应[^1] 2. **保存对话框抑制机制** `testSuppressSaveDialog`系列测试要求正确调用`setSuppressSaveDialog()` 3. **Credential Manager兼容性** 涉及Credman字段时需要特殊处理 ### 二、关键优化步骤 #### 1. 性能优化(无需延长等待时间) ```java public class MyAutofillService extends AutofillService { @Override public void onFillRequest(FillRequest request, CancellationSignal cancellationSignal, FillCallback callback) { // 主线程仅处理轻量级操作 new Thread(() -> { FillResponse response = buildResponseWithDatasets(request); callback.onSuccess(response); // 必须500ms内完成 }).start(); } } ``` - 验证异步处理是否在时限内完成 - 使用`StrictMode`检测主线程阻塞操作 #### 2. 保存对话框抑制配置 ```kotlin fun buildSaveInfo(): SaveInfo { return SaveInfo.Builder( SaveInfo.SAVE_DATA_TYPE_GENERIC, arrayOf(ViewNodeCompat.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE) ).apply { setFlags(SaveInfo.FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE) setNegativeAction(SaveInfo.NEGATIVE_BUTTON_STYLE_CANCEL) }.build() } ``` - 混合字段场景需明确区分`AUTOFILL_HINT_CREDIT_CARD_*`与普通字段 - 使用`AutofillManager.notifyViewVisibilityChanged()`及时更新视图状态 #### 3. Credential Manager集成验证 ```xml <!-- 确保Credman字段声明正确 --> <android.service.autofill.AutofillService android:credentialService="@xml/credential_service"/> ``` ```java // 处理Credman回调 public void onCredmanRequest(CredmanRequest request) { if (request.getType() == TYPE_CREDMAN_ENTRY) { request.getCredmanEntry().setSuppressSaveDialog(true); } } ``` ### 三、调试工具组合 1. **CTS测试监控** ```bash adb shell am instrument -w -e debug true \ android.autofillservice.cts/androidx.test.runner.AndroidJUnitRunner ``` 2. **Trace分析** ```java Debug.startMethodTracing("autofill_trace"); // 关键代码段 Debug.stopMethodTracing(); ``` 3. **超时阈值验证** 使用`AutofillManagerService`的`WRITE_CRITICAL_LOG`权限查看内部超时计数器 ### 四、特殊场景处理 1. **混合字段场景** - 当Credman字段与非Credman字段共存时,需在`FillResponse`中显式设置`FLAG_DELAY_SAVE` 2. **空Phone/Card字段** ```java if (hasCredmanFieldsWithoutPhoneCard()) { response.setSuppressSaveDialogFlags(SUPPRESS_SAVE_DIALOG_IF_CREDMAN); } ``` 3. **RetryableException处理** 在`onFillRequest()`中捕获`PendingIntent.CanceledException`并重试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值