Flutter插件ogurets_flutter的介绍与使用方法详解

Flutter插件ogurets_flutter的介绍与使用方法详解

ogurets_flutter 简介

ogurets_flutter 是一个基于 Dart 的功能扩展插件,它基于 Gherkin 和 Cucumber 实现,旨在使编写测试尽可能简单,并减少样板代码。ogurets_flutterogurets 插件的一个 Flutter 扩展,支持以下功能:

  • 在现有运行的应用程序上运行测试(只要你知道观察者端口)。
  • 自动启动应用程序并控制其状态,确保在不退出和重新运行应用程序的情况下可以重置其状态。
  • 测试完成后可以选择终止或不终止应用程序。
  • 提供默认的重启或非重启行为,并通过 Gherkin 标签来控制行为。

有关 ogurets 的详细操作,请查看其 文档


安装

在项目的 dev_dependencies 部分的 pubspec.yaml 文件中添加以下内容:

ogurets_flutter: ^1.2.5

或者根据页面上显示的更高版本进行选择。


使用 ogurets_flutter

当使用此插件进行 Gherkin 步骤时,通常需要访问 Flutter 驱动器。以下是示例代码:

void main(args) async {
  var def = OguretsOpts()
      ..feature("test_driver/features") // 指定特征文件路径
      ..instance(FlutterOgurets()) // 初始化 Flutter 测试实例
      ..step(FlutterHooks) // 添加 Flutter 钩子
      ..step(FlutterOguretsHelperStepdefs); // 如果要使用扩展步骤

  await def.run(); // 运行测试
}

如果你使用的是 IntelliJ IDEA 插件,则会自动创建此文件并添加这些内容(因为它会检测到这是一个 Flutter 项目)。

当你需要访问驱动器时,只需像其他任何内容一样注入它。

例如:

import 'package:ogurets/ogurets.dart';
import 'package:ogurets_flutter/ogurets_flutter.dart';

class CounterStepdefs {
  final FlutterOgurets _world;

  CounterStepdefs(this._world);

  @Then(r'the counter is {int}') // 定义一个步骤
  void theCounterIs(int counter) async {
    // ...
  }
}

使用 Visual Studio Code 调试

如果使用 Visual Studio Code,可以通过在 launch.json 文件中添加以下部分来调试测试:

{
  "name": "Debug E2E Tests",
  "request": "launch",
  "type": "dart",
  "program": "ogurets_flutter_test.dart",
  "cwd": "example/test_driver",
  "env": {
    "OGURETS_FLUTTER_WORKDIR": "..",
    "OGURETS_FLUTTER_START_TIMEOUT": "120",
    "OGURETS_ADDITIONAL_ARGUMENTS": ""
  }
}

确保 ogurets_flutter_test.dart 文件也修改为查找该目录中的特征文件,因为调试配置更改了工作目录。


环境变量

如果你想通过自己的命令行构建控制 Flutter 运行,那么重要的环境变量与 ogurets 相同,但增加了以下内容:

  • OGURETS_FLUTTER_FLAVOUR:传递 --flavor ${OGURETS_FLUTTER_FLAVOUR}flutter run
  • OGURETS_FLUTTER_DEVICE_ID:传递 -d ${OGURETS_FLUTTER_DEVICE_ID}flutter run,允许你指定设备。
  • OGURETS_ADDITIONAL_ARGUMENTS:允许你指定任何参数。
  • OGURETS_FLUTTER_START_TIMEOUT:允许覆盖默认的 60 秒超时时间以等待应用程序启动。

截图功能

ogurets_flutter 可以帮助你在特定环境中捕获截图,或者在特定比例下捕获特定截图。

如果标记了带有 @FlutterScreenshot 的测试,并且设置了 SCREENSHOT_DIR 环境变量,那么每次步骤之前和场景结束时都会捕获截图。所有截图都带有时间戳并存储在指定的目录中。

如果需要使用特定名称捕获截图,可以使用以下步骤:

I take a screenshot called {string}
I set the maximum screenshot height to {int}
I set the maximum screenshot width to {int}

此外,如果设置了 SCREENSHOT_PLATFORM 环境变量,可以在每次运行 Cucumber 测试时轻松更改平台并捕获不同平台的截图。


调试

如果你想从单独的进程中运行和调试 Flutter 应用程序,可以按照以下步骤操作:

  1. 创建一个新的运行配置文件,指向 Flutter Driver 测试中使用的主文件。然后在运行配置中添加附加参数 --observatory-port 8888(或其他端口)。
  2. 启动应用程序并查找类似以下内容的日志:
    Observatory URL on this device: http://127.0.0.1/XXXX
  3. 打开测试运行配置并在 Observatory URL 字段中粘贴此链接。如果已设置,IDE 不会尝试运行 Flutter 应用程序,而是直接连接到它。

此时,你可以像平常一样在 Flutter 开发模式下工作,更改代码、添加小部件标签、断点等,并反复运行测试。


示例代码

以下是一个完整的示例代码,展示了如何使用 ogurets_flutter 插件:

import 'package:flutter/material.dart';
import 'package:ogurets/ogurets.dart';
import 'package:ogurets_flutter/ogurets_flutter.dart';

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

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

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

  final String title;

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(widget.title)),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('You have pushed the button this many times:'),
            Text('$_counter', key: Key('valueKey'), style: Theme.of(context).textTheme.headline4),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        key: Key('addButtonKey'),
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}
1 回复

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


ogurets_flutter 是一个 Flutter 插件,尽管其官方介绍为 “undefined”,但根据名称和常见的 Flutter 插件命名惯例,我们可以推测它可能与 行为驱动开发(BDD, Behavior-Driven Development)测试 相关。

推测功能

  • BDD 测试框架ogurets 这个词可能源于俄语中的 “огурец”,意为 “黄瓜”。在 BDD 测试中,Cucumber 是一个流行的工具,用于编写可读的测试用例。因此,ogurets_flutter 可能是一个用于在 Flutter 中实现 BDD 测试的插件。
  • 测试自动化:它可能提供了与 Flutter 测试框架集成的功能,支持通过自然语言(如 Gherkin 语法)编写测试用例。
  • 测试报告生成:可能还包括生成测试报告的功能,帮助开发者更好地理解测试结果。

使用示例

以下是一个基于推测的使用示例,假设 ogurets_flutter 是一个 BDD 测试插件:

  1. 安装插件pubspec.yaml 中添加依赖:

    dependencies:
      ogurets_flutter: ^1.0.0
  2. 编写测试用例 使用 Gherkin 语法编写测试用例(例如 features/login.feature):

    Feature: Login functionality
      Scenario: Successful login
        Given I am on the login page
        When I enter "user@example.com" as email
        And I enter "password123" as password
        And I press the login button
        Then I should see the home page
  3. 实现步骤定义 在 Dart 中实现测试步骤(例如 test/steps/login_steps.dart):

    import 'package:ogurets_flutter/ogurets_flutter.dart';
    
    class LoginSteps {
      @Given("I am on the login page")
      void iAmOnTheLoginPage() {
        // Navigate to the login page
      }
    
      @When("I enter {string} as email")
      void iEnterEmail(String email) {
        // Enter email
      }
    
      @When("I enter {string} as password")
      void iEnterPassword(String password) {
        // Enter password
      }
    
      @When("I press the login button")
      void iPressTheLoginButton() {
        // Press login button
      }
    
      @Then("I should see the home page")
      void iShouldSeeTheHomePage() {
        // Verify navigation to home page
      }
    }
  4. 运行测试 使用 Flutter 测试命令运行测试:

    flutter test
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!