标签: flutter-integration-test

如何恢复FlutterError.onError?

在我的应用程序中,我将 flutter onError 记录到 crashalytics,

FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
Run Code Online (Sandbox Code Playgroud)

在运行集成测试时,如果发生一些异常,我会在控制台中收到以下语句,并且测试会挂起,

运行测试时引发以下异常:I/flutter (30479):测试覆盖了 FlutterError.onError 但未能将其返回到原始状态,或者出现了无法处理的意外其他错误。通常,这是由于在恢复 FlutterError.onError 之前使用了 Expect() 造成的。

控制台中的上述消息表明覆盖有问题onError,我如何FlutterError.onError根据控制台中出现的建议返回到其原始状态。

请注意,我正在使用新推荐的方式进行集成测试

flutter flutter-test flutter-integration-test

19
推荐指数
3
解决办法
6138
查看次数

如何与 flutter Integration_test 中的原生 UI 元素交互?

我正在尝试对 flutter 应用程序中的用户流程进行自动化测试。为此,我使用 flutter 集成测试包(https://flutter.dev/docs/testing/integration-tests)。我已经使用 Integration_test 包编写了测试。虽然这些测试在物理设备上运行,但在某些情况下我必须与本机 UI 元素交互(例如,单击权限按钮以授予相机权限等)。但是,我无法与本机 UI 交互具体要素:

1.在系统权限对话框中点击“允许”
2.打开相机时点击“拍摄”按钮
3.从图库中选择图像

我想了解如何通过脚本实现上述情况并实现自动化。另外,像 appium-flutter-driver 或 flutter-driver 这样的框架可以与 flutter_integration 结合使用来实现这一点。任何指示都会有帮助。

ui-automation flutter flutter-integration-test

10
推荐指数
1
解决办法
1330
查看次数

Flutter 集成测试 firebase auth(电子邮件链接或谷歌登录)

我正在向我的应用程序添加集成测试(使用integration_test包),但我遇到了问题。

让我解释。我的应用程序启动时的第一步是身份验证,我有 3 个选项:firebase 电子邮件链接、firebase google 登录和 firebase facebook 登录。

阻碍我的是所有这些登录方法都需要主应用程序 dart 代码之外的操作,因此 flutter 驱动程序无法访问。

我在这里错过了什么吗?如果不是的话,这种情况应该如何处理?

干杯!

firebase-authentication flutter flutter-integration-test

9
推荐指数
1
解决办法
1956
查看次数

Flutter集成测试中如何等待Finder可见才能执行下一次代码?

信息:
我创建了一个示例 Flutter 单元测试来测试登录屏幕,其中我将电子邮件和密码作为输入字段以及登录按钮。

要求:
需要测试错误情况,为此,我按照以下步骤编写了代码。

  1. 打开main.dart
  2. 填写电子邮件和密码字段
  3. onTap 事件在登录按钮上完成。在这里,API 将被调用,加载程序将显示在屏幕上,直到 API 获得成功或失败响应。
  4. 需要检查是否显示失败对话框和消息。

问题/查询:
现在,当 API 调用时,我想等待加载程序可见,直到加载程序消失。因此,到目前为止,我只是手动延迟执行下一个代码,但我想让它动态化。那么,让我知道我们如何根据可见的加载器进行动态延迟?

代码:

void main() {
  group('App Test', () {
    IntegrationTestWidgetsFlutterBinding.ensureInitialized();

    testWidgets('Login Fail Test', (WidgetTester tester) async {
      await app.main();
      await tester.pumpAndSettle();

      await tester.pump(new Duration(seconds: 2));

      final emailField = find.byType(TextFormField).first;
      final passwordField = find.byType(TextFormField).last;
      final loginButton = find.byType(RaisedButton).first;

      await tester.enterText(emailField, 'Test');
      await tester.pumpAndSettle();
      await tester.pump(new Duration(seconds: 1));

      await tester.enterText(passwordField, 'Test123');
      await tester.pumpAndSettle();
      await tester.pump(new Duration(seconds: 1));

      await tester.tap(loginButton);
      await tester.pumpAndSettle();
      await tester.pump(new Duration(seconds: 3)); …
Run Code Online (Sandbox Code Playgroud)

unit-testing dart flutter flutter-integration-test

9
推荐指数
2
解决办法
2984
查看次数

如何从 Flutter 中的集成测试生成测试黄金文件

在 Flutter 中运行集成测试时是否可以生成测试黄金文件(图像)?

当我运行时,我能够生成黄金文件,flutter test --update-goldens但碰巧没有运行集成测试。

我的主要目标是能够在集成测试运行时从 Android 模拟器生成测试黄金文件(图像)。我尝试运行flutter test integration_test/app_test.dart --update-goldens,但不幸的是,我收到了有关具有只读访问权限的错误:

在此输入图像描述

然后我尝试使用以下命令授予读取和写入访问权限flutter driver

在此输入图像描述

但不幸的是,当我运行时,Flutter 驱动程序跳过了生成或比较测试黄金文件(图像)的过程flutter drive --driver=test_driver/integration_test.dart --target=integration_test/app_test.dart

在此输入图像描述

完整的源代码可以在这里找到

flutter flutter-test flutter-integration-test

8
推荐指数
1
解决办法
740
查看次数

在 Flutter 测试中查找 CustomScrollView 内的小部件


\n我在尝试测试我的 Flutter 应用程序时遇到错误。我有一个自定义小部件,位于CustomScrollView小部件的底部(第一个视口之外)。在我的测试中,我想验证它是否确实存在。
\n我已经尝试过使用WidgetTester.scrollUntilVisibleas WidgetTester.drag(就像在flutter框架的测试中所做的那样)。此外,我尝试重构我的测试,但这FlutterDriver完全搞乱了其他一切。
\n如何滚动到CustomScrollView测试内部的底部?
\n这个最小的复制显示了包含 的应用程序,该应用CustomScrollView程序具有一个屏幕高度的容器小部件(以便我要查找的小部件不在初始视图中)

\n
void main() {\n  runApp(MyApp());\n}\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      home: Scaffold(\n          body: CustomScrollView(\n        slivers: [\n          SliverToBoxAdapter(\n            child: Container(\n              height: MediaQuery.of(context).size.height,\n            ),\n          ),\n          MyWidget(),\n        ],\n      )),\n    );\n  }\n}\n\nclass MyWidget extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return SliverToBoxAdapter(\n      child: Container(\n        height: 100,\n        width: 100,\n      ),\n    );\n  }\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

这是我最初编写的用于查找小部件的测试,当然失败了。

\n
void main() {\n  testWidgets('main …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-test customscrollview widget-test-flutter flutter-integration-test

7
推荐指数
1
解决办法
2270
查看次数

如何通过 Github Actions CI 在 Linux 桌面上自动测试 Flutter 应用程序

我们希望通过 Github Actions 使我们的集成测试能够在 Linux 桌面(ubuntu-latest)上运行。

命令是

flutter config --enable-linux-desktop
flutter test -d linux integration_test
Run Code Online (Sandbox Code Playgroud)

但我们总是得到一个错误:

Error waiting for a debug connection: The log reader stopped unexpectedly, or never started.
//...
TestDeviceException(Unable to start the app on the device.)
  package:flutter_tools/src/test/integration_test_device.dart 61:7  IntegrationTestTestDevice.start
Run Code Online (Sandbox Code Playgroud)

Github Actions 是否无法在 CPU 上足够快地处理 GPU/GUI 相关的内容或者发生了什么?这可能吗?我发现只有一个存储库可以为 Linux 环境调用类似的命令。

谢谢!

gui-testing flutter github-actions flutter-linux flutter-integration-test

7
推荐指数
1
解决办法
610
查看次数

如何将参数传递给flutterintegration_test?

flutter_driver之前用于集成测试,并且能够通过主机中的环境变量将参数插入到测试中,因为测试是从主机运行的。

对于另一个项目,我现在使用integration_test包。

测试不再在主机上运行,​​而是在目标上运行,因此当尝试通过环境变量传递参数时,测试不会获取它们。

我看到https://github.com/flutter/flutter/issues/76852我认为这可能有所帮助,但现在还有其他选择吗?

e2e-testing flutter flutter-integration-test

6
推荐指数
1
解决办法
1993
查看次数

测试 Flutter 应用程序的最佳方法是什么

我正在开发一个依赖 API 的 Flutter 应用程序。我们正在考虑测试策略,我们想知道哪种方法是最好的方法。

根据他们的文档(https://flutter.dev/docs/testing),他们有 3 个级别的测试:

  • 单元测试
  • 小部件测试
  • 集成测试(泵小部件新方法)
  • 集成测试(Flutter 驱动程序旧方法)

由于我们的资源有限,我们想知道我们应该首先选择什么。到目前为止,我们在测试方面投入的精力很少。

我们的情况是这样的:

  • 单元测试(50% 覆盖率)
  • 小部件测试(0% 覆盖率)
  • 集成测试(泵小部件新方法 - 0% 覆盖率)
  • 集成测试(Flutter 驱动程序旧方法 - 仅涵盖一些测试场景,主要流程)
  • API 测试:单元测试和功能测试覆盖率为 0%

而且我们没有使用任何测试自动化框架,例如WebdriverIO + Appium。

我们想知道我们应该在每个 Flutter 测试类别中投入多少精力,以及关于 Flutter 集成测试,仅使用新方法(泵送每个小部件)进行集成测试是否有意义,或者我们还需要集成测试(颤振驱动程序的老方法)?仅依靠使用泵小部件方法进行集成测试并不能让我们感到非常有信心。

我们正在考虑的一些选择是:

  • 强大的 API 覆盖率(单元测试和功能测试)+ Flutter 单元测试的强大覆盖率 + 使用 flutter 驱动程序方法进行的集成测试很少
  • 测试金字塔方法:大量单元测试 + 使用泵小部件新方法、API 测试和小部件测试进行少量集成测试 + 少量 E2E 测试(可能使用使用 flutter 驱动程序方法或外部自动化框架的集成测试)和手动测试
  • 只需单元测试 + Widget 测试 + 集成即可测试泵送 widget 的新方法,试图在三者中分别实现 100% 的覆盖率。

我们还认为,以新方式(泵送小部件)维护集成测试在某种程度上非常耗时,因为您需要充分了解应用程序的视图和内部结构。对于没有太多 Flutter 开发经验的 QA 自动化人员来说,这可能是一个挑战。

我应该首先涵盖哪个 Flutter 自动化测试类别:单元测试、小部件测试还是集成测试?我应该使用外部自动化框架(例如 WebdriverIO + …

unit-testing ui-automation flutter flutter-test flutter-integration-test

6
推荐指数
1
解决办法
1783
查看次数

Flutter 集成测试 - 无法停止应用程序 - 仅在 iOS 上

我正在 Android 和 iOS 模拟器上为我的应用程序进行集成测试

android 的完成如预期所有测试都通过并且应用程序停止

但是 iOS 完成了测试并且所有测试都通过了,但最终出现错误“无法停止应用程序”

我的 app.dart 文件

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

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

我的 app_test.dart 文件

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

void main(){
  group('Empty App',(){

    FlutterDriver? driver;

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

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

    test('find widgets',() async{
      final text1 = find.byValueKey('Today');
      expect(await driver!.getText(text1),'Today');
    });
  });
}
Run Code Online (Sandbox Code Playgroud)

我在 MacBook Air M1 上使用 android studio

我该怎么做才能解决这个错误?

谢谢

integration-testing flutter flutter-test flutterdriver flutter-integration-test

6
推荐指数
1
解决办法
845
查看次数