Flutter性能测试插件benchmark_harness的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter性能测试插件benchmark_harness的使用

benchmark_harness 是Dart项目推荐用于构建性能基准测试的工具。它提供了一种标准化的方法来测量代码的执行时间,帮助开发者优化应用程序的性能。

解释结果

默认情况下,BenchmarkBase 报告的运行时间并不是单次调用 run() 的时间,而是10次调用 run() 的平均时间。这是出于历史原因。基准测试工具会重复执行一个包含10次调用的循环,直到累积2秒的时间;报告的结果是每次循环中运行时间的平均值。这种行为在未来的主要版本中将会改变。

通过覆盖 exercise 方法,可以将基准测试改为报告每次调用 run() 的平均时间:

  @override
  void exercise() => run();

对于异步基准测试,AsyncBenchmarkBase 已经报告了每次调用 run() 的平均时间。

比较结果

如果在同一台机器上运行相同的基准测试,并且操作系统也相同,那么报告的运行时间可以在不同次运行之间进行仔细比较。需要注意的是,其他正在运行的应用程序负载等因素可能会对结果产生影响。不建议比较不同基准测试的运行时间,即不要“拿苹果和橙子”作比较。

功能特性

  • BenchmarkBase 类:所有新的基准测试应该继承这个类。
  • AsyncBenchmarkBase 类:用于异步基准测试。
  • 模板基准测试:可以直接复制粘贴以创建新的基准测试。

开始使用

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

    dependencies:
        benchmark_harness: any
    
  2. 安装 pub 包:

    dart pub install
    
  3. 添加以下导入语句:

    import 'package:benchmark_harness/benchmark_harness.dart';
    
  4. 创建一个继承自 BenchmarkBaseAsyncBenchmarkBase 的基准测试类。

示例代码

下面是一个完整的示例,展示了如何使用 benchmark_harness 创建一个简单的基准测试:

示例:模板基准测试

在包的 benchmark/ 文件夹中创建一个新的 Dart 文件,例如 template_benchmark.dart,并编写如下代码:

// 导入 BenchmarkBase 类
import 'package:benchmark_harness/benchmark_harness.dart';

// 创建一个新的基准测试类,继承自 BenchmarkBase
class TemplateBenchmark extends BenchmarkBase {
  const TemplateBenchmark() : super('Template');

  static void main() {
    const TemplateBenchmark().report();
  }

  // 基准测试代码
  @override
  void run() {
    // 这里放置需要测试的代码逻辑
    // 例如:计算、网络请求等
    int sum = 0;
    for (int i = 0; i < 1000000; i++) {
      sum += i;
    }
  }

  // 在基准测试运行前执行的未被测量的设置代码
  @override
  void setup() {
    // 可选:初始化或准备数据
  }

  // 在基准测试运行后执行的未被测量的清理代码
  @override
  void teardown() {
    // 可选:清理资源
  }

  // 如果想要报告每次 run() 的时间而不是每10次调用的平均时间,则取消注释此方法
  //@override
  //void exercise() => run();
}

void main() {
  // 运行 TemplateBenchmark
  TemplateBenchmark.main();
}

输出

当您运行上述代码时,输出将是类似如下的内容:

Template(RunTime): 0.1568472448997197 us.

这表示 run() 方法被调用了10次(对于 BenchmarkBase)或一次(对于 AsyncBenchmarkBase),并且报告了这些调用的平均执行时间。µs 是微秒的缩写。

以上就是关于 benchmark_harness 插件的基本介绍和使用方法。希望这对您有所帮助!如果有任何问题,请随时提问。


更多关于Flutter性能测试插件benchmark_harness的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter性能测试插件benchmark_harness的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter性能测试插件benchmark_harness的使用,以下是一个基本的代码案例来展示如何集成和使用这个插件进行性能测试。benchmark_harness 是一个用于 Flutter 应用性能基准测试的框架,它允许开发者编写可重复的测试来测量应用的性能。

1. 添加依赖

首先,确保在pubspec.yaml文件中添加benchmark_harness依赖:

dependencies:
  flutter:
    sdk: flutter
  benchmark_harness: ^x.y.z  # 请替换为最新版本号

2. 编写性能测试

创建一个新的 Dart 文件,例如performance_test.dart,用于编写性能测试。

import 'package:benchmark_harness/benchmark_harness.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  testWidgets('Performance Benchmark Test', (WidgetTester tester) async {
    // 创建一个 BenchmarkHarness 实例
    final harness = await BenchmarkHarness.createHarnessWithInitialRoute('/');

    // 运行基准测试
    await harness.runBenchmark({
      'frame_build_time': async () async {
        // 构建一个简单的 Flutter 界面
        await tester.pumpWidget(MaterialApp(
          home: Scaffold(
            appBar: AppBar(title: Text('Performance Test')),
            body: Center(child: Text('Hello, Benchmark!')),
          ),
        ));

        // 等待 Flutter 框架完成第一帧的渲染
        await tester.pumpAndSettle();

        // 获取并打印第一帧的构建时间
        final elapsed = await harness.measureFrameBuildTime();
        print('Frame build time: $elapsed ms');
      },
    });

    // 清理资源
    harness.close();
  });
}

3. 运行测试

使用以下命令运行测试:

flutter test test/performance_test.dart

4. 分析结果

运行测试后,控制台将输出性能数据,包括每个基准测试的执行时间和其他相关信息。例如:

Running "Performance Benchmark Test"...
Frame build time: 16.4 ms
✓ Performance Benchmark Test (xx ms)

注意事项

  1. 环境配置:确保测试环境一致,例如设备型号、操作系统版本等,以获取可重复的结果。
  2. 多次测试:建议多次运行测试并取平均值,以减少偶然误差。
  3. 优化建议:根据测试结果,识别性能瓶颈并进行优化。

这个示例展示了如何使用benchmark_harness进行简单的性能测试。你可以根据需要扩展测试用例,测量更复杂的场景,如动画性能、滚动性能等。

回到顶部