Flutter插件ogurets_flutter的介绍与使用方法详解
Flutter插件ogurets_flutter的介绍与使用方法详解
ogurets_flutter 简介
ogurets_flutter
是一个基于 Dart 的功能扩展插件,它基于 Gherkin 和 Cucumber 实现,旨在使编写测试尽可能简单,并减少样板代码。ogurets_flutter
是 ogurets
插件的一个 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 应用程序,可以按照以下步骤操作:
- 创建一个新的运行配置文件,指向 Flutter Driver 测试中使用的主文件。然后在运行配置中添加附加参数
--observatory-port 8888
(或其他端口)。 - 启动应用程序并查找类似以下内容的日志:
Observatory URL on this device: http://127.0.0.1/XXXX
- 打开测试运行配置并在 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),
),
);
}
}
更多关于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 测试插件:
-
安装插件 在
pubspec.yaml
中添加依赖:dependencies: ogurets_flutter: ^1.0.0
-
编写测试用例 使用 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
-
实现步骤定义 在 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 } }
-
运行测试 使用 Flutter 测试命令运行测试:
flutter test