Flutter集成测试

Posted 码上加油站

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter集成测试相关的知识,希望对你有一定的参考价值。



说明

如果熟悉Selenium/WebDriver(web),Espresso(android)或UI Automation(ios),那么Flutter Driver就是Flutter与这些集成测试工具的等价物。此外,Flutter Driver还提供API以记录测试执行的操作的性能跟踪(又名时间轴)。


Flutter的Driver是: 

  • 一个命令行工具 flutter drive 

  • 一个包 package:flutter_driver (API) 

这两者允许你: 为集成测试创建指令化的应用程序 写一个测试 运行测试


添加flutter_driver依赖项

要使用flutter_driver,您必须将以下块添加到您的pubspec.yaml:

dev_dependencies:
  flutter_driver:
    sdk: flutter


创建指令化的Flutter应用程序

一个指令化的应用程序是一个Flutter应用程序,它启用了Flutter Driver 扩展。启用扩展请调用enableFlutterDriverExtension()。 


例:假设你有一个入口点的应用程序my_app/lib/main.dart。要创建它的指令化版本,请在my_app/test_driver/下创建一个Dart文件。在正在测试的功能之后命名它; 


接下来定位到my_app/test_driver/user_list_scrolling.dart:

// 这一行导入扩展
import 'package:flutter_driver/driver_extension.dart';

void main() {
  // 启用扩展
  enableFlutterDriverExtension();

  // Call the `main()` of your app or call `runApp` with whatever widget
  // you are interested in testing.
}


编写集成测试

集成测试是一个简单的package:test测试,它使用Flutter Driver API告诉应用程序执行什么操作,然后验证应用程序是否执行了此操作。 

例: 我们也让我们的测试记录下性能跟踪(performance timeline)。

我们创建一个user_list_scrolling_test.dart

测试文件位于my_app/test_driver/下:


import 'dart:async';

// Imports the Flutter Driver API
import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';

void main() {
  group('scrolling performance test', () {
    FlutterDriver driver;

    setUpAll(() async {
      // 连接app
      driver = await FlutterDriver.connect();
    });

    tearDownAll(() async {
      if (driver != null) {
        // 关闭连接
        driver.close();
      }
    });

    test('measure', () async {
      // 记录闭包中的performance timeline
      Timeline timeline = await driver.traceAction(() async {
        // Find the scrollable user list
        SerializableFinder userList = find.byValueKey('user-list');

        // Scroll down 5 times
        for (int i = 0; i < 5; i++) {
          // Scroll 300 pixels down, for 300 millis
          await driver.scroll(
              userList, 0.0, -300.0, new Duration(milliseconds: 300));

          // Emulate a user's finger taking its time to go back to the original
          // position before the next scroll
          await new Future<Null>.delayed(new Duration(milliseconds: 500));
        }

        // Scroll up 5 times
        for (int i = 0; i < 5; i++) {
          await driver.scroll(
              userList, 0.0, 300.0, new Duration(milliseconds: 300));
          await new Future<Null>.delayed(new Duration(milliseconds: 500));
        }
      });

      // The `timeline` object contains all the performance data recorded during
      // the scrolling session. It can be digested into a handful of useful
      // aggregate numbers, such as "average frame build time".
      TimelineSummary summary = new TimelineSummary.summarize(timeline);
      summary.writeSummaryToFile('stocks_scroll_perf', pretty: true);
      summary.writeTimelineToFile('stocks_scroll_perf', pretty: true);
    });
  });
}


运行集成测试

要在Android设备上运行测试,请通过USB将设备连接到计算机并启用USB调试。然后运行以下命令:


flutter drive --target=my_app/test_driver/user_list_scrolling.dart


该命令将: 

  • 构建 --target 应用,并将其安装在设备上 

  • 启动应用 

  • 运行my_app/test_driver/下的user_list_scrolling_test.dart 


可能想知道该命令如何找到正确的测试文件。flutter drive 命令使用一种约定来查找与--target应用程序在同一目录中具有相同文件名但是具有_test后缀的测试文件。




  码上加油站

  一起来加油

长按扫码关注




记得点个 在看 哦!

以上是关于Flutter集成测试的主要内容,如果未能解决你的问题,请参考以下文章

flutter集成测试

Flutter学习之测试

Flutter学习之测试

Flutter 集成测试和 Gitlab CI/CD

测试使用插件和平台通道的 Flutter 代码

Flutter集成测试