Flutter Driver - 我们可以将命令行参数传递给 Flutter 驱动程序测试吗

Man*_*dha 11 command-line-arguments flutterdriver

我想将测试环境作为命令行参数传递给我的 flutter 驱动程序集成测试。是否可以 ?

我确实在下面的帖子中读到我们可以在 Flutter 驱动程序测试中使用环境变量。但我对命令行参数更感兴趣。

如何将环境变量传递给颤振驱动程序测试

Cur*_*rly 3

如何向测试应用程序传递参数?

虽然传统控制台命令意义上不支持命令行参数,但您可以使用--dart-define它将变量传递给主测试类。(尽管如果您正在测试桌面平台,您可以使用-aFlutter Driver 的参数)

在幕后,它使用环境变量来传递参数。

请参阅如何在 Flutter/Dart 中将参数从命令行传递到 main?更多细节。

如何向每个测试传递参数?

在测试中,环境变量不可用,因此我们可以使用Flutter驱动扩展的DataHandler来获取数据。

在您的主测试应用程序(Flutter Driver 用于启动测试的应用程序)中,您可以设置一个 DataHandler,如下所示:

void main() async {
  const testsString = String.fromEnvironment("tests");

  enableFlutterDriverExtension(handler: (request) async {
    String returnString;
    switch (request) {
      case "get_tests":
        {
          returnString = testsString;
          break;
        }
    }
    return returnString;
  });

  // Call main app
  app.e2e(configName: 'server-1');
}
Run Code Online (Sandbox Code Playgroud)

现在,从您的个人测试中,您可以调用 DataHandler 并请求“命令参数”作为数据:

// A test file
void main() async {
  // Connect to app
  FlutterDriver driver = await FlutterDriver.connect();
  String testsString = await config.driver.requestData("get_tests");
  print("Args: $testsString");
}
Run Code Online (Sandbox Code Playgroud)

像这样开始测试:

flutter drive --profile  --target ./test_driver/app.dart  --dart-define="tests=home_page" --dart-define="sample_data=ABC;XYZ"
Run Code Online (Sandbox Code Playgroud)