如何使用 Codemagic CI/CD 运行 Flutter Golden(快照)测试

测试是开发的一个非常重要的方面,它有助于确保您的应用程序可以正常运行并为用户提供正确的外观。 很高兴有 CI/CD 工具可以自动为您检查应用程序质量、在出现问题时通知团队以及将应用程序发布给最终用户。
在本文中,我将和您唠一唠如何使用 Codemagic CI/CD 运行 Golden 测试。

第 1 步:创建黄金(快照)测试

使用以下代码在计数器应用程序的测试文件夹中创建 golden_widget_test.dart:

void main() {
  testWidgets(Golden test’, (WidgetTester tester) async {
    await tester.pumpWidget(MyApp());
    await expectLater(find.byType(MyApp),
                      matchesGoldenFile(‘goldens/main.png’));
   });
}

生成快照:

flutter test — update-goldens

第 2 步:使用 Codemagic 运行 Golden(快照)测试

当您生成黄金(快照)测试时,不同的操作系统平台会生成不同的文件。 这意味着如果您在 Linux 上生成 Golden 文件,然后在 MacOS 上运行测试,您的 Golden 测试很可能会失败。

使用 Codemagic 运行的所有测试,都是使用MacOS系统完成的。

因此,使用 MacOS 的人具有优势。
无需任何额外工作,所有通过的黄金测试都将在 Codemagic CI/CD 上成功完成。
即使您是 MacOS 用户,虽然,您只需要按“开始新构建”并且一切都会有条不紊的执行并最终会成功,但是,千万不要忘记在本地生成(见上文)并提交黄金文件哈。

如果您团队中的每个人都使用 MacOS,那么您就完成了本次的学习 🥳。 无需继续阅读啦。88~

第 3 步:如果您不是 MacOS 用户,请运行黄金测试

Codemagic 支持与 MacOS 基础设施的免费远程连接,并且还具有 FCI_EXPORT_DIR 变量,用于在构建完成时从构建器机器上传任何文件。
你不需要在你的机器上生成 Golden 文件。相反,你可以使用 Codemagic 来完成。
之后,您需要创建一个仅用于生成快照的新工作流,因为,你应该不希望花费了很多构建时间,却得到以无法躲避的错误结果吧?

在 Test 部分,您需要启用 Flutter 测试并将 Flutter 测试参数设置为:

test --update-goldens

上面的命令将为您生成快照。 然后,您应该在Post-test脚本部分使用以下命令将生成的快照复制到 $FCI_EXPORT_DIR:

cp -r test/goldens $FCI_EXPORT_DIR

不要忘记禁用构建和发布部分!

保存设置并开始新的构建。 完成构建后,您应该会在左侧的 Artifacts 部分中看到生成的黄金文件。

您现在需要的是下载这个 zip 并将生成的黄金文件提取到您的项目中。
提示:您的项目中存在有 Golden 测试的话,如果平台不是 MacOS,则应添加跳过参数。 然后,如果你在本地运行 flutter test,测试不会因为与 Mac 的黄金差异而失败。

testWidgets('Golden test', (WidgetTester tester) async {
    await tester.pumpWidget(MyApp());
    await expectLater(
      find.byType(MyApp), matchesGoldenFile('goldens/main.png'),
    );
}, skip: !Platform.isMacOS);