如何在 Android Studio 上配置调试 Flutter 集成测试
How to configure debug Flutter integration test on Android Studio
我可以在终端中运行这个命令在真实设备上执行集成测试
flutter drive --target=test_driver/app.dart
但我不知道如何在 Android Studio 上创建 Run/Debug 配置以便调试测试。
请帮助我。
不需要在 Android Studio 上进行任何特殊的 Run/Debug 配置即可使用 integration_test 包在集成测试中设置断点。这对真实设备、模拟器和 Flutter Desktop 都是一样的。
重现步骤
- 确保您的真实设备已连接:
$ flutter devices
3 connected devices:
XXXXXX (mobile) • XXXXXX • android-arm64 • Android XX.XX (API XX)
Linux (desktop) • linux • linux-x64 • Ubuntu 20.04.XX LTS XXX-generic
Chrome (web) • chrome • web-javascript • Google Chrome XXXXX
(参见
运行 在 Windows MAC 教程中直接在真实 Android 设备上测试 Flutter 应用程序 |颤振-examples.com)
- 使用经典计数器应用程序创建一个新的 Flutter 项目:
flutter create debug_at_device_2
cd debug_at_device_2
flutter pub get
在 Android Studio 中打开项目。
在_incrementCounter
方法中设置断点:
- 在
pubspec.yaml
中添加 flutter_test
和 integration_test
包作为开发依赖:
dev_dependencies:
flutter_test:
sdk: flutter
integration_test:
sdk: flutter
- 再次更新软件包:
flutter pub get
- 创建一个新目录
integration_test
并在其中创建一个包含以下内容的文件 example_test.dart
:
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:debug_at_device/main.dart' as app;
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets("should increment counter", (WidgetTester tester) async {
app.main();
await tester.pumpAndSettle();
await tester.tap(find.byIcon(Icons.add));
await tester.pumpAndSettle();
expect(find.text('1'), findsOneWidget);
await tester.tap(find.byIcon(Icons.add));
await tester.pumpAndSettle();
expect(find.text('2'), findsOneWidget);
await tester.tap(find.byIcon(Icons.add));
await tester.pumpAndSettle();
expect(find.text('3'), findsOneWidget);
});
}
- 确保您的真实设备在 运行 编辑栏中 select 设置为默认设备:
确保 phone 已解锁(即无屏保)
右键单击 example_test.dart
中 main
方法旁边的 运行 图标,然后从上下文菜单中 select 调试选项:
- 遇到断点后单步执行代码:
环境
我使用以下方法对其进行了测试:
- Flutter 版本 2.5.1
- Android工作室版本2020.3.1
- Flutter 插件版本 60.1.2
- Ubuntu 20.04
- Android phone
我可以在终端中运行这个命令在真实设备上执行集成测试
flutter drive --target=test_driver/app.dart
但我不知道如何在 Android Studio 上创建 Run/Debug 配置以便调试测试。 请帮助我。
不需要在 Android Studio 上进行任何特殊的 Run/Debug 配置即可使用 integration_test 包在集成测试中设置断点。这对真实设备、模拟器和 Flutter Desktop 都是一样的。
重现步骤
- 确保您的真实设备已连接:
$ flutter devices
3 connected devices:
XXXXXX (mobile) • XXXXXX • android-arm64 • Android XX.XX (API XX)
Linux (desktop) • linux • linux-x64 • Ubuntu 20.04.XX LTS XXX-generic
Chrome (web) • chrome • web-javascript • Google Chrome XXXXX
(参见 运行 在 Windows MAC 教程中直接在真实 Android 设备上测试 Flutter 应用程序 |颤振-examples.com)
- 使用经典计数器应用程序创建一个新的 Flutter 项目:
flutter create debug_at_device_2
cd debug_at_device_2
flutter pub get
在 Android Studio 中打开项目。
在
_incrementCounter
方法中设置断点:
- 在
pubspec.yaml
中添加flutter_test
和integration_test
包作为开发依赖:
dev_dependencies:
flutter_test:
sdk: flutter
integration_test:
sdk: flutter
- 再次更新软件包:
flutter pub get
- 创建一个新目录
integration_test
并在其中创建一个包含以下内容的文件example_test.dart
:
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:debug_at_device/main.dart' as app;
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets("should increment counter", (WidgetTester tester) async {
app.main();
await tester.pumpAndSettle();
await tester.tap(find.byIcon(Icons.add));
await tester.pumpAndSettle();
expect(find.text('1'), findsOneWidget);
await tester.tap(find.byIcon(Icons.add));
await tester.pumpAndSettle();
expect(find.text('2'), findsOneWidget);
await tester.tap(find.byIcon(Icons.add));
await tester.pumpAndSettle();
expect(find.text('3'), findsOneWidget);
});
}
- 确保您的真实设备在 运行 编辑栏中 select 设置为默认设备:
确保 phone 已解锁(即无屏保)
右键单击
example_test.dart
中main
方法旁边的 运行 图标,然后从上下文菜单中 select 调试选项:
- 遇到断点后单步执行代码:
环境
我使用以下方法对其进行了测试:
- Flutter 版本 2.5.1
- Android工作室版本2020.3.1
- Flutter 插件版本 60.1.2
- Ubuntu 20.04
- Android phone