#flutter #integration-testing #firebase-test-lab
#flutter #интеграция-тестирование #firebase-test-lab
Вопрос:
Я пытаюсь запустить свой интеграционный тест 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
Этот код генерирует app-debug-androidTest.apk
app-debug.apk
и, как только я загружаю их в Test Lab
тест, выполняется отлично.
Теперь проблема в том, что у меня много тестовых файлов integration_test
. Я не уверен, как создать a app-debug-androidTest.apk
, который включает в себя все тестовые integration_test
примеры.
Я попробовал следующее:
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
который запускает весь код интеграции.
Итак, мой вопрос в том, как загрузить все тестовые примеры.
Или мы должны создавать сборки для каждого тестового примера
./gradlew app:assembleDebug -Ptarget=integration_test/login_test.dart
затем загрузите его в тестовую лабораторию, а затем снова
./gradlew app:assembleDebug -Ptarget=integration_test/register_test.dart
и снова загрузить?
Ответ №1:
Я только что столкнулся с той же проблемой. Для дальнейшего использования другими людьми, то, что я сделал, это импортировал все тесты в один файл 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();
...
}
Комментарии:
1. Это работает? Я запускаю только первый файл, затем получаю сообщение «Все тесты пройдены». а остальные пропускаются.
2. РЕДАКТИРОВАТЬ: это действительно работает, но не в том случае, если вы используете скриншот, описанный здесь: github.com/flutter/flutter/tree/master/packages /…
3. У меня это не работает, говорится, что «Тесты не найдены». Не могли бы вы поделиться более подробной информацией? Кстати, он работает только с интеграционным тестом flutter (flutter drive)
Ответ №2:
У меня была такая же проблема, когда не было реального способа вернуться к чистому состоянию приложения после запуска теста. Очистка данных приложения между тестами мне очень помогла.
С
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()
, но обычно именно в них сохраняются пользовательские данные.