首页 > 其他分享 >flutter driver 集成测试

flutter driver 集成测试

时间:2023-11-03 10:35:43浏览次数:41  
标签:集成 app driver dart 测试 test flutter

最近一直断断续续的学习flutter,今天跟大家介绍一下flutter driver测试。

flutter测试基础

Flutter的测试遵循Android的测试规范进行了分层。

  • 单元测试:测试单一功能、方法或类。例如,被测单元的外部依赖性通常被模拟出来,如package:mockito。
  • widget 测试:(在其它UI框架称为 组件测试) 测试的单个widget。(我们要开发一个UI界面,需要通过组合其它Widget来实现,Flutter中,一切都是Widget!)
  • 集成测试: 测试一个完整的应用程序或应用程序的很大一部分。通常,集成测试可以在真实设备或OS仿真器上运行,例如iOS Simulator或Android Emulator。

不同类型测试之间简单对比:

单元测试

widget测试

集成测试

Confidence

Low Higher

Highest

维护成本

Low Higher

Highest

依赖

Few More

Lots

执行速度

Quick

Slower

flutter driver 集成测试

集成测试就是我们最常看到的 Flutter UI自动化测试,他的执行过程一般需要在模拟器或真机上启动App,模拟用户的点击、输入操作,从而完成功能的验证。

  1. 首先,你要创建第一个flutter应用。

https://book.flutterchina.club/chapter2/first_flutter_app.html

flutter driver 集成测试_flutter

下面涉及到的文件如下:

flutter_app/
├── lib/
│   └── .dart 
├── test_driver/
|   ├── app.dart
|   └── app_test.dart 
├── pubspec.yaml
  1. pubspec.yaml 文件中,添加flutter_driver插件,所以 flutter_driver并不是创建项目标配的,需要你额外安装。
dev_dependencies:
  test: ^1.5.1
  flutter_test:
    sdk: flutter
  flutter_driver:
    sdk: flutter

然后在flutter应用根目录下执行命令:

flutter_app> flutter pub get
Running "flutter pub get" in flutter_app...                         0.6s
  1. 在项目的跟目录下创建test_driver目录,分别在该目录下创建app.dartapp_test.dart文件。

一个指令化的应用程序是一个Flutter应用程序,它启用了Flutter Driver 扩展。启用扩展请调用enableFlutterDriverExtension()。app.dart文件内容如下:

// 导入扩展
import 'package:flutter_driver/driver_extension.dart';
// 导入main入口文件
import 'package:flutter_app/main.dart' as app;

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

  app.main();
}

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

编写继承测试用例,app_test.dart文件内容如下:

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


void main() {
  group('计数器测试', () {

    final counterTextFinder = find.byValueKey('counter');
    FlutterDriver driver;

    setUpAll(() async {
      driver = await FlutterDriver.connect();
      sleep(Duration(seconds: 2));
    });

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

    // 第一条用例
    test('starts at 1', () async {
      expect(await driver.getText(counterTextFinder), "0");
    });

    // 第二条用例
    test('increments the counter', () async {
      driver.tap(find.byTooltip("Increment"));
      expect(await driver.getText(counterTextFinder),  "1");
    });

  });
}

作为一个有多年测试经验的同学,单纯学习元素定位和断言也花了我半天时间。

setUpAll() & tearDownAll() :定义用例开始和结束的执行动作。

driver = await FlutterDriver.connect();

链接接app,这是App测试的入口。

driver.close();

关闭浏览器。

driver.tap()
driver.enterText()
driver.getText()
...

flutter常用操作,触摸、输入和获取文本等。

find.byValueKey()
find.byTooltip()
...

元素定位,Flutter driver提供了好几种定位方式。

expect()

断言方法,断言两个值是否相等。

flutter driver API:
https://api.flutter.dev/flutter/flutter_driver/flutter_driver-library.html

运行集成测试

最后,如何运行集成测试:

flutter_app> flutter drive --target=./test_driver/app.dart

Using device Android SDK built for x86.
Starting application: ./test_driver/app.dart
Installing build\app\outputs\apk\app.apk...                         1.5s
Running Gradle task 'assembleDebug'...
Running Gradle task 'assembleDebug'... Done                         2.4s
✓ Built build\app\outputs\apk\debug\app-debug.apk.
I/flutter (16043): Observatory listening on http://127.0.0.1:58900/uUbkcJhS5qM=/
00:00 +0: 计数器测试 (setUpAll)

VMServiceFlutterDriver: Connecting to Flutter application at http://127.0.0.1:54121/uUbkcJhS5qM=/
VMServiceFlutterDriver: Isolate found with number: 4454864095217843
VMServiceFlutterDriver: Isolate is paused at start.
VMServiceFlutterDriver: Attempting to resume isolate
VMServiceFlutterDriver: Waiting for service extension
VMServiceFlutterDriver: Connected to Flutter application.
00:03 +0: 计数器测试 starts at 1

00:03 +1: 计数器测试 increments the counter

点击 add Icon

断言计数器加1

00:03 +2: 计数器测试 (tearDownAll)

00:03 +2: All tests passed!

Stopping application instance.

标签:集成,app,driver,dart,测试,test,flutter
From: https://blog.51cto.com/fnngj/8162039

相关文章

  • 即构音视频 Express Flutter SDK 全面支持空安全
    Flutter是一套移动UI框架,可以快速在iOS、Android上构建高质量的原生用户界面。作为其官方语言Dart是类型安全的,当开发者获取变量的时候,编译器可以保证变量的类型,但类型安全并不保证获取的变量不是null。在GitHub上有非常多因为null导致Dart代码出现异常的issue,为了从......
  • flutter组件之GridView.builder()
    如果您的Flutter应用程序需要显示大量或无限数量项目的网格视图(例如,从API获取的产品列表),那么您应该使用GridView.builder()而不是GridView()。该**生成器()**只为那些确实可见,所以您的应用程序的性能将得到改善例子步骤:生成一个包含100.000个虚拟产品的列表:finalList<Map>myP......
  • IPD(集成产品开发)模式下的产品研发流程
    IPD(集成产品开发)涵盖了产品从创意提出到研发、生产、运营等,包含了产品开发到营销运营的整个过程。围绕产品(或项目)生命周期的过程的管理模式,是一套生产流程,更是时下国际先进的管理体系。IPD(集成产品开发)以产品成功、用户满意为最终目标,通过构建一套科学、持续、稳定、可重复、高质......
  • OpenFunction 1.2.0 发布:集成 KEDA http-addon 作为同步函数运行时
    OpenFunction是一个开源的云原生FaaS(FunctionasaService,函数即服务)平台,旨在帮助开发者专注于业务逻辑的研发。我们非常高兴地宣布OpenFunction又迎来了一次重要的更新,即v1.2.0版本的发布!本次更新中,我们继续致力于为开发者们提供更加灵活和强大的工具,并在此基础上加入了......
  • 我们在开发第一个flutter小程序时需要注意什么
    Flutter这些年发展的很快,特别是在Google持续的加持下,FlutterSDK的版本号已经来到了3开头,也正式开始对Windows、macOS和Linux桌面环境提供支持。如果从Flutter特有的优势来看,我个人认为主要是它已经几乎和原生的性能表现没什么太大的差别,这一点是ReactNative和Vue......
  • nvidia-smi Failed to initialize NVML: Driver/library version mismatch
    nvidia-smiFailedtoinitializeNVML:Driver/libraryversionmismatch原因:NVIDIA内核驱动版本与系统驱动不一致, #sudormmodnvidiarmmod:ERROR:Modulenvidiaisinuseby:nvidia_modesetnvidia_uvm首先要知道现在kernelmod的依赖情况,首先我们从错误信息中知道,nvidi......
  • axum 集成 JWT
    Jsonwebtoken(JWT)是为了网络应用环境间传递声明而执行的一种基于JSON的开发标准(RFC7519),该token被设计为紧凑且安全的,特别适用于分布式站点的单点登陆(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加......
  • 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境
    前言   但凡一个略有规模的项目都需要一个持续集成环境的支撑,为什么需要持续集成环境,我们来看一个例子。假如一个项目,由A、B两位程序员来协作开发,A负责前端模块,B负责后端模块,前端依赖后端。A和B都习惯使用SVN作为代码管理工具,他们分别开始工作,一个功能完成后会提交到SVN,以便对......
  • 数据集成实现以及平台安装部署入门​
    ETLCloud是什么?ETLCloud提供了一套工具和服务,用于将数据从不同的来源抽取(Extract)、转换(Transform)和加载(Load)到目标系统中。ETL代表了这个过程的三个主要步骤。抽取(Extract):从不同的数据源中获取数据,可以是关系型数据库、文件、Web服务或其他数据存储系统。ETLCloud提供了各种连接器......
  • gitlab--集成 jfrog artifactory 制品库
    介绍官网之前我们使用制品库的时候,是使用gitlab里的制品:当制品多的时候,就不太适合了,我们可以使用一些专门用来上传制品库的来保存制品安装artifactory使用docker安装下载镜像dockerpulltruecharts/artifactory-oss:7.41.13启动镜像dockerrun--namejfrog-oss-d-vdata_a......