Flutter集成测试期间本地机器上的Process.run()

Dar*_*ath 7 integration-testing flutter

我为 Flutter 应用程序编写了一些集成测试,并且在测试期间需要在本地计算机上执行一些 shell 命令。

我知道我可以使用 执行这些命令Process.run(),但在集成测试期间,该命令是在我的 Android 手机而不是本地计算机上执行的。

在集成测试期间,有什么方法可以在本地计算机上运行命令吗?

th_*_*_lo 0

不知何故,使用 flutter 驱动程序,它可以在测试机器上运行进程。

就我而言,它是在运行颤振测试时打开深层链接。然后你就得到了上下文。

flutter drive \
--driver=test_driver/driver_tests/your_test.dart \
--target=test_driver/your_driver.dart
Run Code Online (Sandbox Code Playgroud)

你的驱动程序.dart:

import 'package:flutter_driver/driver_extension.dart';
import 'package:arriba/main.dart' as app;

void main() {
  enableFlutterDriverExtension();
  app.main();
}
Run Code Online (Sandbox Code Playgroud)

你的_test.dart:

import 'dart:io';

import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';

//!! DOES NOT RUN WITHOUT FLUTTER DRIVER MAIN !!
void main() {
  late FlutterDriver driver;

  const String shareLink = 'your_link.html';

  setUpAll(() async {
    driver = await FlutterDriver.connect();
  });

  tearDownAll(() async {
    await driver.close();
  });

  test(
    'starting deep link test',
    () async {
      driver.waitUntilFirstFrameRasterized();
      await Process.run(
        'adb',
        [
          '-d',
          'shell',
          'am',
          'start',
          '-a android.intent.action.VIEW',
          '-c android.intent.category.BROWSABLE',
          '-d $shareLink',
          'YOUR PACKAGE NAME',
        ],
      ).then((result) {
        stdout.write(result.stdout);
        stderr.write(result.stderr);
      });
    },
    timeout: const Timeout(Duration(seconds: 60)),
  );
}
Run Code Online (Sandbox Code Playgroud)