在Firebase Test Lab上运行多个测试案例

5

我正尝试在Firebase测试实验室上运行我的集成测试。

flutter build apk -t lib/main_dev.dart
./gradlew app:assembleAndroidTest -Ptarget=lib/main_dev.dart
./gradlew app:assembleDebug -Ptarget=integration_test/login_test.dart

这段代码生成app-debug-androidTest.apkapp-debug.apk,一旦我在Test Lab中上传它们,测试就可以完美执行。

现在的问题是,我有许多测试文件在integration_test下面。我不确定如何创建一个包含integration_test下所有测试用例的app-debug-androidTest.apk

我尝试了以下方法:

flutter build apk -t lib/main_dev.dart
./gradlew app:assembleAndroidTest -Ptarget=lib/main_dev.dart
./gradlew app:assembleDebug -Ptarget=test_driver/integration_test.dart

但是这个测试卡在黑屏上,我认为这很奇怪,但这是正确的行为,因为在本地设备上运行集成测试时,我们也需要提供目标和驱动程序。

所以对于本地环境,我有一个脚本。

flutter drive \
  --driver=test_driver/integration_test.dart \
  --target=integration_test/login_test.dart

flutter drive \
  --driver=test_driver/integration_test.dart \
  --target=integration_test/register_test.dart

运行所有集成代码的程序。

我的问题是如何上传所有测试用例。

还是说我们需要为每个测试用例建立一个构建(build)。

./gradlew app:assembleDebug -Ptarget=integration_test/login_test.dart

然后将其上传到测试实验室,再次进行测试。

./gradlew app:assembleDebug -Ptarget=integration_test/register_test.dart

重新上传吗?

2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
3

我刚刚遇到了相同的问题。为了方便其他人以后参考,我将所有测试导入到一个单独的文件all_tests.dart中。

假设目录结构如下:

integration_test/
  test1.dart
  test2.dart
  test3.dart
  all_tests.dart
all_tests.dart中,我导入了所有测试:
import 'test1.dart' as test1;
import 'test2.dart' as test2;

void main() {
  test1.main();
  test2.main();
  ...
}

这个工作了吗?我只能启动第一个文件,然后得到“所有测试通过”,其他的都被跳过了。 - Leonardo
编辑:它实际上是有效的,但如果您使用在此处说明的截图方法,则不起作用:https://github.com/flutter/flutter/tree/master/packages/integration_test#screenshots - Leonardo
对我来说它不起作用,显示“未找到测试”。你能分享更详细的摘要吗?顺便说一下,它只在flutter集成测试(flutter drive)上有效。 - TijaniRF
1
这个方法对我们来说不起作用。即使同时运行几个测试文件。当我们运行flutter test integration_test/这个大套件时,我们观察到在测试运行之间发生了额外的构建。虽然这一步骤很慢,但它确保了可靠性。 - satyajit
1
补充上述评论,我通过在测试中创建额外的组来消除了不稳定性。我们设置了getit DI设置的安装/拆卸,并且没有组就会出现混乱。 - satyajit
显示剩余2条评论

1

我曾经遇到过同样的问题,在测试运行后没有真正的方法返回到干净的应用程序状态。在测试之间清除应用数据对我很有帮助。

使用

import 'dart:io';
import 'package:path_provider/path_provider.dart';
tearDown(() async {
  final filesDirPath = (await getApplicationSupportDirectory()).path;
  if (Directory(filesDirPath).existsSync()) {
    await Directory(filesDirPath).delete(recursive: true);
  }
});

可能还有其他需要删除的目录,比如getTemporaryDirectory(),但这通常是用户数据保存的地方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,