You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成测试中如何监控CPU与内存使用情况

Flutter集成测试中获取CPU与内存数据的方案

问题描述

我在使用integration_test库进行Flutter集成测试时,已经通过SchedulerBinding读取了帧渲染时间,但不知道如何获取CPU和内存使用数据,最终目标是生成.csv文件。根据Flutter文档,可通过profiling_summarizer.dart实现,但不清楚如何获取Timeline及TimelineEvents。尝试过的方法在integration_test中无法替代flutter_driver生效,想知道是否需要改用flutter_driver,还是有办法在integration_test中实现该功能。

尝试的代码片段:

void main() async {
  IntegrationTestWidgetsFlutterBinding.ensureInitialized();
  // enableFlutterDriverExtension();

  FlutterDriver flutterDriver =
      await FlutterDriver.connect();

  await flutterDriver.startTracing();

  final SchedulerBinding schedulerBinding = SchedulerBinding.instance;
  schedulerBinding.addTimingsCallback((timings) {
    for (final timing in timings) {
      print('${timing.frameNumber}, ${timing.totalSpan.inMilliseconds};');
    }
  });

  // testing
 
  Timeline timeline = await flutterDriver.stopTracingAndDownloadTimeline();
  await TimelineSummary.summarize(timeline)
      .writeTimelineToFile("main", pretty: true);
}

解决方案

无需切换到flutter_driver,在integration_test中实现

integration_test框架已内置性能追踪能力,无需依赖flutter_driver即可获取CPU、内存数据并生成CSV,具体步骤如下:

  1. 启用Timeline追踪
    初始化Binding后,调用enableTimeline开启性能数据采集:

    final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized() as IntegrationTestWidgetsFlutterBinding;
    binding.enableTimeline();
    
  2. 执行测试逻辑
    正常运行你的测试用例,期间系统会自动记录Timeline事件,包括CPU、内存、帧渲染等数据。

  3. 获取并生成CSV报告
    测试完成后,通过takeSnapshot获取Timeline数据,再用TimelineSummary解析并生成CSV文件:

    final snapshot = await binding.takeSnapshot();
    final timeline = Timeline.fromJson(snapshot['timeline'] as Map<String, dynamic>);
    final summary = TimelineSummary.summarize(timeline);
    
    // 生成CSV格式的性能报告
    await summary.writeSummaryToFile(
      'app_performance',
      targetDirectory: './performance_reports',
      writeAsJson: false, // 设置为false输出CSV
    );
    

    完整可运行示例:

    import 'package:flutter_test/flutter_test.dart';
    import 'package:integration_test/integration_test.dart';
    import 'package:flutter/scheduler.dart';
    import 'package:flutter_devtools/flutter_devtools.dart';
    
    void main() async {
      final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized() as IntegrationTestWidgetsFlutterBinding;
      binding.enableTimeline();
    
      // 可选:继续监听帧渲染时间
      SchedulerBinding.instance.addTimingsCallback((timings) {
        for (final timing in timings) {
          print('帧编号: ${timing.frameNumber}, 总耗时: ${timing.totalSpan.inMilliseconds}ms');
        }
      });
    
      testWidgets('性能测试用例', (tester) async {
        // 加载你的应用
        await tester.pumpWidget(YourApp());
        await tester.pumpAndSettle();
    
        // 执行测试操作(示例:点击按钮)
        await tester.tap(find.byKey(const Key('test_action_button')));
        await tester.pumpAndSettle();
    
        // 生成性能报告
        final snapshot = await binding.takeSnapshot();
        final timeline = Timeline.fromJson(snapshot['timeline'] as Map<String, dynamic>);
        final summary = TimelineSummary.summarize(timeline);
        
        await summary.writeSummaryToFile(
          'app_performance_report',
          targetDirectory: './test_results',
          writeAsJson: false,
        );
      });
    }
    
  4. 依赖配置
    在pubspec.yaml中添加必要依赖(版本号根据你的Flutter SDK调整):

    dev_dependencies:
      integration_test:
        sdk: flutter
      flutter_test:
        sdk: flutter
      devtools: ^2.22.2
    

是否需要改用flutter_driver?

不需要。integration_test作为官方主推的集成测试框架,已经覆盖了flutter_driver的核心性能采集能力,且API更简洁。只有当你需要flutter_driver的一些特殊旧特性时,才考虑切换,否则优先使用integration_test的原生方案。

关键说明

TimelineSummary.writeSummaryToFile方法设置writeAsJson: false时,会自动生成包含CPU使用率、内存占用、帧耗时等关键指标的CSV文件,直接满足你的需求。

内容的提问来源于stack exchange,提问作者30james00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:02:41