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

Android Compose截图测试在流水线执行失败,无可见差异

Compose截图测试在Github Actions中无可见差异但失败的解决办法
  • 字体渲染差异
    本地和Github Runner环境的字体库可能不一致,即使Composable未修改,系统默认字体的像素级细微偏差(比如字重、字符间距)也会触发测试失败。
    解决方式:

    1. 测试中强制使用自定义字体,直接引入字体文件,确保本地与CI环境用完全相同的字体资源;
    2. 若依赖系统字体,在Github Actions运行环境中安装与本地匹配的字体包,比如Ubuntu环境下安装fonts-noto通用字体集。
  • 颜色配置文件差异
    本地和CI环境的色彩空间(如sRGB、Display P3)可能不同,导致像素颜色值出现极小偏差,肉眼不可见但测试能检测到。
    解决方式:
    在测试代码中指定统一的颜色配置,强制使用sRGB:

    @Test
    fun testComposableScreenshot() {
        composeTestRule.setContent {
            CompositionLocalProvider(LocalColorScheme provides lightColorScheme()) {
                // 你的Composable实现
            }
        }
        composeTestRule.captureToGolden()
    }
    

    同时在Github Actions步骤中添加环境变量:

    export COLOR_PROFILE=sRGB
    
  • 跨环境渲染引擎偏差
    Compose截图依赖Skia渲染引擎,不同操作系统或CPU架构下可能存在极细微的渲染差异。
    解决方式:

    1. 用Docker模拟Github Runner的操作系统(如Ubuntu),在该环境下生成参考图,避免跨系统差异;
    2. 调整测试的像素容差阈值,允许极小比例的像素差异:
    @Test
    fun testComposableScreenshot() {
        composeTestRule.setContent {
            // 你的Composable实现
        }
        composeTestRule.captureToGolden(
            goldenName = "my_composable",
            tolerance = 0.01f // 允许1%的像素差异
        )
    }
    
  • CI环境显示参数差异
    Github Runner默认的显示分辨率、缩放比例可能与本地不同,导致截图尺寸或布局出现细微变化。
    解决方式:
    在工作流中设置统一的显示参数:

    jobs:
      screenshot-test:
        runs-on: ubuntu-latest
        steps:
          - name: Configure display settings
            run: |
              sudo apt-get install -y x11-xserver-utils
              xrandr --output Virtual-1 --mode 1920x1080 --scale 1x1
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:20:57