![](/img/trans.png)
[英]Flutter Integration Testing- How to run multiple test cases of Flutter integration tests in single command or from single file
[英]How to run multiple tests with flutter - Integration Test
使用 flutter 中的測試和新的集成測試 package 沒有找到任何可以幫助我的東西。
我的問題是我需要運行幾個測試,但是當第一個測試結束或者第二個測試失敗時,因為當測試結束時,應用程序不會立即重新啟動。 我的代碼是這樣的:我不知道這是否是最好的方法。
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
這將在運行每個測試文件后從設備卸載並重新安裝您的應用程序。
方案二
您也可以像這樣在 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);
}
});
這應該會以干凈的狀態恢復您的應用程序 state。可以刪除更多目錄,例如getTemporaryDirectory()
,但這通常是保存用戶數據的地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.