Compose 预览版屏幕截图测试版本说明

0.0.1-alpha16

此版本引入了对 AGP 测试套件的支持、HTML 测试报告改进和 bug 修复:

  • 测试套件集成:添加了对使用 Android Gradle 插件 (AGP) 测试套件运行 Compose 预览版屏幕截图测试的支持。如需了解如何配置和运行屏幕截图测试套件,请参阅使用测试套件进行屏幕截图测试
  • HTML 测试报告增强功能:添加了显示测试用例详细信息(名称、方法、预览、变体、测试套件和状态标记)的标题元数据卡片,以及一个错误摘要框,其中包含快速复制到剪贴板的功能,可对失败情况(例如缺少参考图片或维度不匹配)进行分类。
  • 动态视觉差异:视觉差异现在使用连续渐变,从细微的突出显示(用于细微的像素偏移)到高对比度强调(用于重大差异),防止嵌套的组件更改被遮盖。

此版本还包含以下 bug 修复:

问题 说明
问题 513276596 有助于确保 Layoutlib 渲染错误立即导致屏幕截图测试失败,而不是静默失败或创建空白参考图片。

0.0.1-alpha15

此版本包含以下 bug 修复:

问题 说明
问题 500417360 修复了以下问题:在 Kotlin 2.1 及更高版本中运行预览版时,由于 Layoutlib 框架的隔离类加载器中缺少 kotlin-stdlib 依赖项,导致初始化崩溃 (NoClassDefFoundError)。
问题 384188032 修复了在可组合项 AndroidView 工厂内膨胀 ViewHolder 对象时发生的渲染崩溃。
问题 351302272 修复了预览中可绘制资源加载失败的问题,其中资源位于同级或依赖的项目模块中。
问题 482664893 确保在屏幕截图测试抛出异常时,验证任务会正确失败,而不是错误地成功并使用过时的屏幕截图。
问题 497675618 支持通过 JVM 覆盖率代理(例如 JaCoCo)对可组合类进行插桩。
问题 498545960 从 JUnit 控制台错误堆栈轨迹中剥离了内部文件名(例如 ImageVerifier.kt),以使调试输出更清晰。
问题 385613865 移除了测试结果 XML 文件中图片的绝对路径用法,并将其替换为相对路径。
问题 513276596 确保渲染失败会正确地使屏幕截图测试任务失败,而不是以空白屏幕截图静默通过。
问题 340639802 解决了预览方法解析冲突,即测试错误地与主来源集中的匹配完全限定方法名称相匹配。

0.0.1-alpha14

此版本包含以下 bug 修复和性能改进:

问题 说明
问题 469819154 修复了 Compose 渲染器中的内存泄漏问题。
问题 470058578 修复了更新参考图片时出现的界面冻结和内存错误。
问题 422412664 修复了 Windows 和 GitHub Actions 上的“命令行超出操作系统限制”错误。
问题 437223807 修复了多模块项目中的资源和资产解析问题。
问题 464899800 修复了 version.properties 中因命名冲突而导致的 Gradle 插件冲突。
问题 482433854 修复了使用 kotlin-reflect 或序列化的可组合项的初始化错误。

0.0.1-alpha13

此版本引入了以下功能:

  • 与 JDK 17 或更高版本兼容。
  • 修复了 bug,并改进了与 Android Studio 的集成。

0.0.1-alpha12

此版本引入了以下功能:

  • 与 Android Gradle 插件 (AGP) 9.0 的兼容性。
  • 支持在 JDK 24 及更高版本上运行屏幕截图测试。
  • 支持配置最大堆大小。
  • 修复了渲染失败问题,并提高了测试稳定性。
  • 增强了报告功能,可显示与新图片和参考图片相关的百分比差异和其他元数据。

0.0.1-alpha11

此版本引入了以下功能:

  • 与 Android Gradle 插件 (AGP) 8.13 的兼容性。
  • 添加了对解析具有十进制值的 XML 可绘制对象的支持,无论主机语言区域如何。
  • 对于使用 JDK 24 或更高版本的宿主机,系统会选择兼容的 JDK (11-23),前提是已安装了此类 JDK。

0.0.1-alpha10

此版本引入了以下功能:

  • 从这个版本开始,您必须使用 @PreviewTest 注解标记所有预览函数。没有注释的预览不会执行。

  • 参考图片目录已从 {module}/src/{variant}/screenshotTest/reference 更改为 {module}/src/screenshotTest{Variant}/reference。这是为了确保生成的参考图片不会成为生产代码的一部分,并与其他测试类型的目录结构保持一致。

  • {variant}PreviewScreenshotRender 任务会被移除。图片渲染已迁移到 JUnit 测试引擎中。

  • update{Variant}ScreenshotTest 任务将在更新之前将新的渲染图片与参考图片进行比较。它只会更新差异大于指定阈值的图片。移除了 --updateFilter 命令行标志。

0.0.1-alpha06

此版本引入了以下功能:

图片差异阈值:借助这项新的全局阈值设置,您可以更精细地控制屏幕截图比较。如需进行配置,请更新模块的 build.gradle.kts:

    testOptions {
        screenshotTests {
            imageDifferenceThreshold = 0.0001f // 0.01%
        }
    }

此阈值将应用于模块中定义的所有屏幕截图测试。

  • 问题修复:修复了一些 Compose 渲染器 bug,并添加了对空 Compose 的支持。
  • 性能增强:更新了图片差异比较算法,使其速度更快。