flutter集成测试

1、在Windows上搭建Flutter开发环境:

  具体参考:https://flutterchina.club/setup-windows/

  注:Flutter SDK的版本要和研发使用的版本一致

 

2、配置编辑器

  具体参考:https://flutterchina.club/get-started/editor/

 

3、摘取测试应用程序的代码:

  具体参考git或svn

 

4、进行测试测试:

  集成测试主要用到的是FlutterDriver,它提供API去测试运行在真实设备和模拟器里面的Flutter应用。

    • Flutter的Driver是:
      •   一个命令行工具flutter drive
      •   一个包 package:flutter_driver
    • 这两者做的操作是:
      •   为集成测试创建指令化的应用程序
      •   写一个测试
      •   运行测试

  a.添加依赖:

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

dev_dependencies:
 #flutter 单元测试和Widgets测试 flutter_test: sdk: flutter
 #flutter 集成测试 flutter_driver: sdk: flutter test: any

 

  b.添加测试文件

    在项目根目录创建test_driver目录和lib目录同级,同时创建app.dartapp_test.dart文件:

    为什么要创建两个文件,官方解释:
       - 创建xx.dart文件:用于启动运行应用
       - 创建xx_test.dart文件:Test脚本文件
       - 集成测试中TestCase和应用运行在不同的进程中,所以需要test_driver目录里有两个文件分别用来执行应用和执行TestCase

      注:xx.dat和xx_test.dat是配套的,代码会从xx.dat去查看对应的_test.dat的代码执行

    app.dat代码如下: 

 

import 'package:flutter_driver/driver_extension.dart';
// 导入应用应用程序的main.dart(wsapp是工程名)
import 'package:wsapp/main.dart' as app;

void main(){
   // 启用FlutterDriver扩展
    enableFlutterDriverExtension(); 
   app.main(); 
}

  

    app_test.dart:

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

void main() {
  group('登录模块测试集合', () {
    // 通过key属性定位元素
    final userName = find.byValueKey('用户名');
    final password = find.byValueKey('密码');
    final login = find.text('登录');

    FlutterDriver driver;

    // 测试开始前链接FlutterDriver
    setUpAll(() async {
      driver = await FlutterDriver.connect();
    });

    // 测试结束后关闭FlutterDriver
    tearDownAll(() async {
      if (driver != null) driver.close();
    });

    // TestCase
    test('登录模块测试-正常登录', () async {
      //点击用户名
      await driver.tap(userName);
      //输入用户名
      await driver.enterText('15112319');
      //点击密码
      await driver.tap(password);
      //输入密码
      await driver.enterText('1');
      await driver.tap(login);
      final buttonText = await driver.getText(find.text('确定'));
      expect(buttonText, '确定');
    });
  });
}

  注:1、每个控件必须提供唯一标识属性,flutter driver只提交key、text、icon、tooltip、type方式进行定位

    2、具体可用API参考:https://api.flutter-io.cn/flutter/flutter_driver/flutter_driver-library.html

 

  c、运行

flutter drive --target=test_driver/app.dart

 

上一篇:flutter写一个漂亮的登录界面,Android面试基础知识


下一篇:Flutter之Dart语言学习(-) 环境搭配