如何在Flutter中运行多个测试 - 集成测试

3

在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。
2个回答

2

0

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

解决方案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(),但通常用户数据保存在此处。


这是我的问题...非常感谢您花时间帮助我,您真的很棒。 - Tiago Felipe Dias de Oliveira

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