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

如何在Espresso UI测试中通过biometric生物识别验证?

Espresso测试中通过生物识别指纹校验环节的实操方案

Android从API 28开始官方就提供了生物识别的测试支持,不需要root、不需要篡改业务逻辑,按下面的步骤配置就能直接跑通流程:

前置准备

  • 先给app模块的androidTest配置添加biometric依赖,版本和你主工程集成的androidx.biometric版本保持一致即可:
// build.gradle 依赖配置
androidTestImplementation 'androidx.biometric:biometric:1.2.0'
  • 准备测试环境:用模拟器/开启了开发者选项的真机,提前在系统设置里录入至少1个指纹(模拟器录指纹不需要真的触摸传感器,跟着引导点完成就行),不要给设备设置图案/密码等会拦截生物识别弹窗的强校验锁屏。

测试代码实现

不要尝试用Espresso直接匹配系统生物识别弹窗上的控件——系统弹窗属于系统UI进程,你的测试apk没有权限访问,直接找控件100%报NoMatchingViewException。
正确的实现逻辑是用官方biometric库提供的测试注入接口,直接给业务层返回认证结果:

@RunWith(AndroidJUnit4::class)
class BiometricFlowTest {
    @get:Rule
    val activityRule = ActivityScenarioRule(LoginActivity::class.java)

    @Test
    fun test_login_with_fingerprint_success() {
        // 先执行触发指纹弹窗的前置操作,比如点击指纹登录按钮
        onView(withId(R.id.btn_fingerprint_login)).perform(click())

        // 等待弹窗弹出后,注入认证成功结果,直接绕过指纹采集环节
        // 这一步会直接触发你业务代码里BiometricPrompt.AuthenticationCallback的onAuthenticationSucceeded回调
        BiometricPromptTestUtils.setNextAuthenticationResult(
            BiometricPrompt.AuthenticationResult(
                null, // 如果你业务里用了CryptoObject就传对应实例,没用到直接传null
                BiometricPrompt.AUTHENTICATION_RESULT_TYPE_BIOMETRIC
            )
        )

        // 后续直接写正常测试断言即可,比如校验是否跳转到首页
        onView(withId(R.id.home_page_container)).check(matches(isDisplayed()))
    }
}

如果不想额外引入测试依赖,也可以在弹窗弹出时直接执行adb命令模拟指纹按压,这个方案兼容旧版FingerprintManager场景,所有版本系统通用:

# 命令里的1对应你在系统里录入的第一个指纹的ID,录的第二个就传2,以此类推
adb emu finger touch 1

如果要测试认证失败的场景,把注入的结果换成BiometricPrompt.ERROR_LOCKOUT、BiometricPrompt.ERROR_NOT_RECOGNIZED对应的错误结果就行,不需要真的模拟按错指纹。

常见坑点

  • 测试前一定要确认设备BiometricManager返回BIOMETRIC_SUCCESS状态,没录指纹、硬件不支持的状态下根本弹不出认证弹窗,后续流程必然失败。
  • 如果项目自己封装了生物识别层,不要在封装层拦截过滤BiometricPrompt的回调,不然测试注入的结果会被吞掉。
  • API 28以下的旧系统没有官方测试注入接口,直接用模拟器+adb命令模拟的方式最稳,不用花时间适配低版本真机。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:24:30