我为Flutter应用程序编写了一些集成测试,并且在测试期间需要在本地机器上执行一些shell命令。我知道我可以用Process.run()执行这些命令,但是在集成测试期间,这个命令是在我的android手机上执行的,而不是在我的本地机器上。在集成测试期间,是否有任何方法可以在本地计算机上运行命令?
Process.run()
50few1ms1#
用flutter驱动程序可以在你的测试机器上运行进程。在我的例子中,它是在运行flutter测试时打开一个深层链接。然后你就可以得到上下文了。
flutter drive \ --driver=test_driver/driver_tests/your_test.dart \ --target=test_driver/your_driver.dart
您的驱动程序。dart:
import 'package:flutter_driver/driver_extension.dart'; import 'package:arriba/main.dart' as app; void main() { enableFlutterDriverExtension(); app.main(); }
您的_测试.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)), ); }
1条答案
按热度按时间50few1ms1#
用flutter驱动程序可以在你的测试机器上运行进程。
在我的例子中,它是在运行flutter测试时打开一个深层链接。然后你就可以得到上下文了。
您的驱动程序。dart:
您的_测试.dart: