Flutter插件ozzie的使用方法介绍

ozzie.flutter

ozzie图标

Ozzie 是您的集成测试助手。它会在您需要时自动截取屏幕截图,并生成性能报告。

如何工作?

在 pubspec.yaml文件中将 ozzie添加为开发依赖项:

dev_dependencies:
  ozzie: <最新版本>

在 Flutter 的集成测试中,创建一个 Ozzie 实例,传入 FlutterDriver,指定一个 groupName,然后调用 takeScreenshot 方法即可。完成测试后,可以通过 generateHtmlReport 方法生成 HTML 报告。

如果需要测量应用程序的性能,只需将集成测试包装在 profilePerformance 中,该性能数据会自动添加到 HTML 报告中。

示例代码

以下是一个完整的示例,展示如何使用 ozzie 插件:

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

void main() {
  FlutterDriver driver;
  Ozzie ozzie;

  // 在所有测试开始前初始化驱动程序和 Ozzie
  setUpAll(() async {
    driver = await FlutterDriver.connect();
    ozzie = Ozzie.initWith(driver, groupName: 'counter');
  });

  // 测试结束后生成 HTML 报告并关闭驱动程序
  tearDownAll(() async {
    if (driver != null) driver.close();
    ozzie.generateHtmlReport();
  });

  // 测试初始计数器值是否为 0
  test('初始计数器值为 0', () async {
    await ozzie.profilePerformance('counter0', () async {
      await driver.waitFor(find.text('0'));
      await ozzie.takeScreenshot('initial_counter_is_0');
    });
  });

  // 测试点击按钮后计数器是否增加到 1
  test('点击按钮后计数器值为 1', () async {
    await ozzie.profilePerformance('counter1', () async {
      await driver.tap(find.byType('FloatingActionButton'));
      await driver.waitFor(find.text('1'));
      await ozzie.takeScreenshot('counter_is_1');
    });
  });
}

完成后,HTML 报告将生成在项目目录下的 ozzie/index.html 文件中:

报告示例


使用 ozzie.yaml 控制性能阈值

您可以在项目的根目录下创建一个 ozzie.yaml 文件来控制性能测试的不同阈值。如果未定义此文件,则 Ozzie 将使用默认值。

示例 ozzie.yaml 文件

integration_test_expectations:
  should_fail_build_on_warning: true
  should_fail_build_on_error: true
performance_metrics:
  missed_frames_threshold:
    warning_percentage: 5.0
    error_percentage: 10.0
  frame_build_rate_threshold:
    warning_time_in_millis: 14.0
    error_time_in_millis: 16.0
  frame_rasterizer_rate_threshold:
    warning_time_in_millis: 14.0
    error_time_in_millis: 16.0

可选屏幕截图

截取屏幕截图可能需要一些时间,有时您可能希望在运行集成测试时不进行截图以节省时间。可以通过设置 shouldTakeScreenshotsfalse 来跳过截图部分:

setUpAll(() async {
  driver = await FlutterDriver.connect();
  ozzie = Ozzie.initWith(
    driver,
    groupName: 'counter',
    shouldTakeScreenshots: false,
  );
});

许可证

版权所有 2018 Jorge Coca

根据Apache许可证2.0版("许可证")授权;
您不能在遵守许可证条款的情况下使用此文件。
您可以在以下地址获取许可证副本:

   http://www.apache.org/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则根据许可证分发的软件
按"原样"分发,不附带任何明示或暗示的保证或条件。
有关许可证具体语言的许可和限制,请参阅许可证。

示例应用

以下是一个简单的 Flutter 应用示例,用于演示 ozzie 的使用场景:

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(primarySwatch: Colors.blue),
      home: new MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new Text(
              '你已经按下了按钮:',
            ),
            new Text(
              '$_counter',
              style: Theme.of(context).textTheme.display1,
            ),
          ],
        ),
      ),
      floatingActionButton: new FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: '增加',
        child: new Icon(Icons.add),
      ),
    );
  }
}

更多关于Flutter插件ozzie的使用方法介绍的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件ozzie的使用方法介绍的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


ozzie 是一个用于 Flutter 的测试和调试插件,它可以帮助开发者更轻松地进行 UI 测试和调试。虽然 ozzie 并不是 Flutter 官方推荐的插件,但它在某些场景下可以非常有用。以下是对 ozzie 插件的探索和使用指南。

1. 安装 ozzie

首先,你需要在 pubspec.yaml 文件中添加 ozzie 依赖:

dev_dependencies:
  ozzie: ^0.1.0

然后运行 flutter pub get 来安装依赖。

2. 基本用法

ozzie 主要用于生成测试报告和截图。它可以帮助你在运行 UI 测试时自动生成截图,并将这些截图与测试结果一起保存。

2.1 配置 ozzie

在你的测试文件中,首先需要导入 ozzie

import 'package:ozzie/ozzie.dart';

然后,你可以在 setUp 方法中初始化 ozzie

void main() {
  setUp(() {
    Ozzie().configure(
      screenshotDirectory: 'screenshots',
      reportDirectory: 'test_reports',
    );
  });

  // 你的测试代码
}

2.2 使用 ozzie 进行截图

在测试过程中,你可以使用 OzzietakeScreenshot 方法来截图:

testWidgets('MyWidget should display correctly', (WidgetTester tester) async {
  await tester.pumpWidget(MyWidget());

  // 截图并保存
  await Ozzie().takeScreenshot('my_widget_screenshot');

  // 你的断言
  expect(find.text('Hello, World!'), findsOneWidget);
});

2.3 生成测试报告

在测试完成后,你可以调用 OzziegenerateReport 方法来生成测试报告:

void main() {
  setUp(() {
    Ozzie().configure(
      screenshotDirectory: 'screenshots',
      reportDirectory: 'test_reports',
    );
  });

  tearDownAll(() async {
    await Ozzie().generateReport();
  });

  // 你的测试代码
}

3. 高级用法

ozzie 还支持一些高级功能,例如自定义报告格式、添加额外的元数据等。

3.1 自定义报告格式

你可以通过继承 OzzieReporter 类来自定义报告格式:

class CustomReporter extends OzzieReporter {
  @override
  Future<void> generateReport() async {
    // 自定义报告生成逻辑
  }
}

void main() {
  setUp(() {
    Ozzie().configure(
      screenshotDirectory: 'screenshots',
      reportDirectory: 'test_reports',
      reporter: CustomReporter(),
    );
  });

  // 你的测试代码
}

3.2 添加元数据

你可以在测试过程中添加额外的元数据,这些元数据会包含在生成的报告中:

testWidgets('MyWidget should display correctly', (WidgetTester tester) async {
  await tester.pumpWidget(MyWidget());

  // 添加元数据
  Ozzie().addMetadata('test_name', 'MyWidget Test');
  Ozzie().addMetadata('test_description', 'This test verifies that MyWidget displays correctly.');

  // 截图并保存
  await Ozzie().takeScreenshot('my_widget_screenshot');

  // 你的断言
  expect(find.text('Hello, World!'), findsOneWidget);
});
回到顶部