如何使用Integration Test运行多个测试



使用flutter中的测试和新的集成测试包没有找到任何可以帮助我的东西。

我的问题是,我需要运行几个测试,但当第一个测试结束或第二个测试失败时,因为当测试结束时,应用程序不会立即重新启动。我的代码如下:我不知道这是否是最好的方法。

void main() {
(IntegrationTestWidgetsFlutterBinding.ensureInitialized()
as IntegrationTestWidgetsFlutterBinding)
.defaultTestTimeout = const Timeout(Duration(minutes: 2));
WelcomeTester welcomeTester;
LoginTester loginTester;
group('e2e integration test', () {
testWidgets('Test case 1',
(WidgetTester tester) async {
await app.main();
await tester.pumpAndSettle(const Duration(seconds: 5));
welcomeTester = WelcomeTester(tester);
loginTester = LoginTester(tester);
await welcomeTester.checkScreenOpenedByKey(WelcomeKeys.screenWelcomePage);
await welcomeTester.findTitle();
await welcomeTester.scrollThePage();
await welcomeTester.tapButton(WelcomeKeys.btnHaveAccount);
await welcomeTester.checkScreenOpenedByKey(LoginKeys.screenLoginPage);
});
testWidgets('Test case 2',
(WidgetTester tester) async {
await tester.pumpAndSettle(const Duration(seconds: 5));
welcomeTester = WelcomeTester(tester);
await welcomeTester.checkScreenOpenedByKey(WelcomeKeys.screenWelcomePage);
await welcomeTester.tapButton(WelcomeKeys.btnCreateAccount);
await welcomeTester.checkScreenOpenedByKey(OnboardingKeys.screenTermsPage);
});
});
}

我的目标是在app_test.dart中创建几个测试组,每个组中创建几个TestWidgets

每次应用程序更改时都需要使用此选项,以便有机会进入下一个操作。

await tester.pumpAndSettle();

在进入下一个操作之前,先确定到UI。

文档:https://api.flutter.dev/flutter/flutter_test/WidgetTester/pumpAndSettle.html

我不完全确定我是否理解您的问题,但其中一个解决方案可能会有所帮助。

解决方案1

根据你在哪里运行测试,这可能不是一个有效的答案,但如果你在本地运行测试,你可以将测试分成两个不同的测试文件。

然后你可以运行

flutter drive --flavor=staging --target=integration_test/test_1.dart --driver=test_driver/app_test.dart
flutter drive --flavor=staging --target=integration_test/test_2.dart --driver=test_driver/app_test.dart

这将在每个测试文件运行后从设备卸载并安装回您的应用程序。

解决方案2

你也可以像这个一样在tearDown中删除应用程序用户数据

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(),但这通常是保存用户数据的地方。

最新更新