Flutter 自动化测试 - 集成测试篇

devtools/2024/9/24 1:22:54/

 

Flutter集成测试


Flutter官方对Flutter应用测试类型做了三个阶段划分,分别为Unit(单元)测试、Widget(组件)测试、Integration(集成)测试。按照维护成本来看的话从左到右依次增高,按照投资回报方面看的话依次是Widget>Integration>Unit,而作为测试人员来说,我们主要关注点在集成测试这一类型。

官网对于集成测试的定义:

Unit(单元)测试和Widget(组件)测试对于测试单个类、方法或者组件来讲非常方便,然而他们通常不会将各个部分作为整体一起进行测试,又或者是想要获取应用在真实设备上的表现,此时我们就需要集成测试了。

 

FlutterDriver

FlutterDriver提供API去测试运行在真实设备和模拟器里面的Flutter应用,执行时会和测试脚本在不同的进程中,可以简单认为就是Flutter版本的Selenium WebDriver

 

添加FlutterDriver依赖

上一篇文章有介绍Flutter工程的目录结构,其中pubspec.yaml文件可以对依赖和配置进行管理,类似于Maven工程的pom.xml。找到dev_denpendencies添加如下配置

#2-4行配置是已存在默认配置,只需要添加5-6行即可
dev_dependencies:flutter_test:sdk: flutterflutter_driver:sdk: fluttertest: any

其中

  • flutter_driver: sdk: flutter配置表示添加FlutterDriver依赖
  • test: any配置表示添加测试库,因为我们写TestCase需要用到里面的方法和断言

集成测试步骤

Step1:创建测试App

使用上篇文章所创建的Demo工程,其中包括悬浮按钮和中间的文本显示,需要注意的是:默认demo没有给这些元素加上标识,而且flutter中不支持ID,一般通过Key属性进行标识(对应定位方法为valueKey)。我们这里给悬浮按钮和中间的文本显示元素加上key属性:

image.png

Step2:创建test脚本
  1. 在工程根目录下创建test_driver文件夹
  2. 创建xx.dart文件:用于启动运行应用
  3. 创建xx_test.dart文件:Test脚本文件

官方解释为什么需要创建这两支文件的原因:

集成测试中TestCase和应用运行在不同的进程中,所以需要test_driver目录里有两个文件分别用来执行应用和执行TestCase。

image.png

Step3:开启Flutterdriver扩展支持

在xx.dart文件中添加如下代码:

import 'package:flutter_driver/driver_extension.dart';
import 'package:flutter_demo/main.dart' as app;void main() {// 启用FlutterDriver扩展enableFlutterDriverExtension();// 启动执行应用app.main();
}

 

Step4:编写测试脚本

在xx_test.dart文件中添加如下代码:

import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';void main() {group('Counter App', () {// 通过key属性定位元素final counterTextFinder = find.byValueKey('counter');final buttonFinder = find.byValueKey('increment');FlutterDriver driver;// 测试开始前链接FlutterDriversetUpAll(() async {driver = await FlutterDriver.connect();});// 测试结束后关闭FlutterDrivertearDownAll(() async {if (driver != null) {driver.close();}});// TestCasetest('increments the counter', () async {// 点击悬浮增加count按钮await driver.tap(buttonFinder);await driver.tap(buttonFinder);// 验证count计数是否为2expect(await driver.getText(counterTextFinder), "2");});});
}
Step5:执行测试
  1. 连接设备,我们可以选择

    • 在Windows上测试Android设备/模拟器
    • 在MacOs上测试Android设备/模拟器 or IOS设备/模拟器
  2. 在项目的根目录下开启命令终端

    flutter drive --target=test_driver/app.dart

    命令解释:

    • 构建目标App包并将其安装到设备/模拟器中
    • 启动目标App
    • 运行xx_test.dart

执行效果:

image.png

关于FlutterDriver实现自动化测试就介绍到这里,下篇给大家介绍利用appium-flutter-driver测试Flutter应用。

作者:shakebabe
链接:http://testingpai.com/article/1596527703330

如侵权联系删除


http://www.ppmy.cn/devtools/99967.html

相关文章

linux df -h时没有查到root盘,root文件夹带着锁或者叉号的解决办法

文章目录 一、前言二、来龙去脉1、2、给root文件赋予权限3 、这个时候df -h 查看就可以看到root文件了 总结 一、前言 当时装的双系统,自认为会学习很多linux相关课程,买了个1T的固态,ubuntu上分了很多,结果显而易见,…

51单片机——按键控制

1、按键介绍 轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。 2、按键的抖动 对于机械开关,当机械触点断开、闭合时,由于…

一文迅速上手 ESP32 bluedroid 蓝牙从机开发

前言 个人邮箱:zhangyixu02gmail.com该博客主要针对希望迅速上手 ESP32 蓝牙从机开发人员,因此,很多蓝牙技术细节知识并不会进行介绍,仅仅介绍我认为需要了解的 API 函数和回调内容。本文主要是基于gatt_server demo来微调进行进…

HC32 华大DMA 传输

1,DMA原理图 2,功能描述 1 使能 DMA 控制器 使用 DMA 时需要先将功能时钟控制 0 寄存器 FCG0.DMAx 位写 0 允许 DMA 的时钟 供给,再将 DMA 使能寄存器 DMA_EN.EN 位写 1。 同时, DMA 需要外围电路来启动 传输,所以 F…

AI视频创作原理

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

TCP 协议的相关特性

TCP有许多可信特性在这里我们只讲解一部分的特性后续将会进行补充。 一,确认应答 接收方收到数据之后,就要给发送方返回一个应答报文(ack),TCP引入序号和确认序号的(由于TCP是面向字节流的所以此处的编号是…

调用api接口异常的原因及解决方法

调用 API 接口异常可能有以下原因及解决方法: 一、原因 网络问题 网络连接不稳定或中断:可能由于本地网络故障、服务器端网络问题或中间网络节点出现故障导致。例如,你正在使用的网络突然出现波动,或者服务器所在的数据中心网络出…

XSS- - - DOM 破坏案例与靶场

目录 链接靶场: 第一关 Ma Spaghet 第二关 Jefff 第三关 Ugandan Knuckles 第四关 Ricardo Milos 第五关 Ah Thats Hawt 第六关 Ligma 第七关 Mafia 第八关 Ok, Boomer 链接靶场: XS…