繁体   English   中英

我可以在 Flutter 中使用一个配置文件运行多个集成测试吗?

[英]Can I run multiple integration tests with one single config file in Flutter?

我正在尝试编写 Flutter 集成测试并使用一个配置文件运行它们,而不是为每个测试创建配置文件。 有什么办法吗?

现在,对于每一个测试,我都有 login.dart 和 login_test.dart 等等。 我知道它的约定,即每个配置文件和测试文件必须具有相同的名称,但这不是我需要的,欢迎更多可配置的东西。 提前致谢。

这是我的配置文件(login.dart)

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

void main() {
enableFlutterDriverExtension();
app.main();
}

测试(login_test.dart)看起来像这样

import ...

FlutterDriver driver;

void main() {

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

tearDownAll(() async {
if (driver != null) {
  driver.close();
}
});

test('T001loginAsDriverAndVerifyThatDriverIsLogedInTest', () async {
  some_code...
});
});

现在我想制作新的测试文件(例如 login_warning.dart)并能够通过调用单个配置文件(login.dart)来启动这两个测试。 这可能吗?

是的,可以使用相同的“配置”运行多个“测试”文件。

在 flutter 行话中,您的配置文件是您的目标,您的测试文件是您的驱动程序 您的目标始终是login.dart但您有两个驱动程序login_test.dartlogin_warning.dart

使用flutter drive命令,您可以指定target以及driver

所以为了运行这两个驱动程序,只需执行以下命令

flutter drive --target=test_driver/login.dart --driver=test_driver/login_test.dart
flutter drive --target=test_driver/login.dart --driver=test_driver/login_warning.dart

这首先执行login_test.dart ,然后是login_warning.dart驱动程序。

您始终可以拥有一个您启动的主要测试文件,例如

flutter drive --target=test_driver/app_test.dart

然后在那个调用你的测试组作为函数,就像这样 -

void main() {
  test1();
}
void test1() {
  group('test 1', () {});}

因此,通过一个命令,您可以执行main()提到的所有情况

扩展到@sceee 的答案:

例如,您可以将多个命令放入名为integration_tests.sh的 shell 脚本中,然后使用单个命令以这种方式运行它们。

#!/bin/sh

flutter drive --target=test_driver/app.dart --driver=test_driver/app_test.dart
flutter drive --target=test_driver/app.dart --driver=test_driver/start_screen_test.dar 

使可执行:
$chmod a+rx integration_tests.sh
运行:
$./integration_tests.sh

就像 vzurd 的回答一样,我最喜欢和最干净的是创建一个测试文件并从内部调用所有主要方法:

import './first_test.dart' as first;
import './second_test.dart' as second;

void main() {
  first.main();
  second.main();
}

然后只需在单个测试文件上运行驱动程序:

flutter drive --driver=test/integration/integration_test_driver.dart --target=test/integration/run_all_test.dart

我们可以使用 shell 命令来自动化这个过程。

以下解决方案甚至可以使用任何新的测试文件,而无需手动将其名称添加到任何文件中。

  1. 在根目录中创建名为integrationTestRunner.sh的 shell 脚本。 您可以使用命令

    touch integrationTestRunner.sh

  2. integrationTestRunner.sh文件中,粘贴以下代码。

#!/bin/bash

# Declare an array to store the file names and paths
declare -a targets

# Find all .dart files in the current directory and subdirectories
while IFS= read -r -d $'\0' file; do
  targets+=("$file")
done < <(find integration_test -name "*.dart" -type f -print0)

# Loop through the array and run the flutter drive command for each target
for target in "${targets[@]}"
do
    flutter drive \
      --driver=test_driver/integation_test_driver.dart \
      --target=$target
done

  1. 使用任何方法运行integrationTestRunner.sh文件:
  • 按下该文件中的 ▶️ 按钮(如果您在 VS Code 中)
  • 从命令行运行脚本./integrationTestRunner.sh

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM