如何 运行 使用 flutter 进行多项测试 - 集成测试
How to run multiple tests with flutter - 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
根据您 运行 测试的位置,这可能不是一个有效的答案,但如果您在本地 运行 进行测试,您可以将测试分成 2 个不同的测试文件。
那么你可以运行
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
您也可以像这样在拆解中删除应用用户数据
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()
,但这通常是保存用户数据的地方。
使用 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
根据您 运行 测试的位置,这可能不是一个有效的答案,但如果您在本地 运行 进行测试,您可以将测试分成 2 个不同的测试文件。
那么你可以运行
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
您也可以像这样在拆解中删除应用用户数据
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()
,但这通常是保存用户数据的地方。