'Running multiple test case on Firebase Test Lab

I am trying to run my integration test on Firebase Test Lab.

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

This code generates app-debug-androidTest.apk and app-debug.apk and once I upload them in Test Lab Test are executed perfectly.

Now the issue is I have many test files under integration_test. I am not sure how to create a app-debug-androidTest.apk that includes all the testcases under integration_test.

I did try the following:

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

but this stuck test at black screen which is I thing weird but a correct behavior as while running the integration test in local device also we need to provide target along with the driver.

So for Local I have a script

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

which runs the all the Integration code.

So my question is how to upload all the test cases.

Or do we have to make build for each test case

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

then upload it to the Test Lab then again

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

and upload again?



Solution 1:[1]

I have just encountered the same issue. For future reference for other people, what I did was to import all the tests into one single file all_tests.dart.

Let's say the directory structure is

integration_test/
  test1.dart
  test2.dart
  test3.dart
  all_tests.dart

In all_tests.dart, I imported all the tests in:

import 'test1.dart' as test1;
import 'test2.dart' as test2;

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

Solution 2:[2]

I had the same kind of problem where there was no real way to get back to a clean app state after a test was run. Clearing the app data between the tests helped me a lot.

With

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);
  }
});

There could be more directories to remove like getTemporaryDirectory(), but this is usually where the user data is saved.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Dharman
Solution 2