Flutter 性能测试详解
简介
性能测试用于评估应用的性能表现。本文介绍如何在 Flutter 中进行性能测试。
基本配置
添加依赖
yaml
dev_dependencies:
flutter_test:
sdk: flutter
flutter_driver:
sdk: flutter
test: ^1.24.1
创建测试文件
dart
// test_driver/app.dart
import 'package:flutter_driver/driver_extension.dart';
import 'package:my_app/main.dart' as app;
void main() {
enableFlutterDriverExtension();
app.main();
}
// test_driver/app_test.dart
import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';
void main() {
group('Performance Tests', () {
late FlutterDriver driver;
setUpAll(() async {
driver = await FlutterDriver.connect();
});
tearDownAll(() async {
await driver.close();
});
// 测试用例
});
}
测试方法
1. 启动时间测试
dart
test('Measure app startup time', () async {
final timeline = await driver.traceAction(() async {
await driver.waitUntilFirstFrameRasterized();
});
final summary = TimelineSummary.summarize(timeline);
print('Startup time: ${summary.frameBuildTime}ms');
});
2. 滚动性能测试
dart
test('Measure scroll performance', () async {
// 定位滚动列表
final listFinder = find.byType('ListView');
final timeline = await driver.traceAction(() async {
// 执行滚动操作
await driver.scroll(
listFinder,
0,
-300,
Duration(milliseconds: 500),
);
});
final summary = TimelineSummary.summarize(timeline);
print('Average frame build time: ${summary.averageFrameBuildTime}ms');
print('Worst frame build time: ${summary.worstFrameBuildTime}ms');
print('Frame count: ${summary.frameCount}');
});
完整示例
dart
void main() {
group('Performance Tests', () {
late FlutterDriver driver;
setUpAll(() async {
driver = await FlutterDriver.connect();
// 等待应用稳定
await driver.waitUntilFirstFrameRasterized();
});
tearDownAll(() async {
await driver.close();
});
test('Measure app startup performance', () async {
final timeline = await driver.traceAction(() async {
await driver.waitFor(find.text('Welcome'));
});
final summary = TimelineSummary.summarize(timeline);
// 输出性能数据
print('===== App Startup Performance =====');
print('Frame build time: ${summary.frameBuildTime}ms');
print('Frame rasterizer time: ${summary.frameRasterizerTime}ms');
// 保存跟踪文件
await summary.writeTimelineToFile(
'startup_timeline',
pretty: true,
);
});
test('Measure scrolling performance', () async {
// 等待列表加载
await driver.waitFor(find.byType('ListView'));
final timeline = await driver.traceAction(() async {
// 执行多次滚动
for (var i = 0; i < 5; i++) {
await driver.scroll(
find.byType('ListView'),
0,
-300,
Duration(milliseconds: 500),
);
await Future.delayed(Duration(milliseconds: 500));
}
});
final summary = TimelineSummary.summarize(timeline);
print('===== Scrolling Performance =====');
print('Average frame build time: ${summary.averageFrameBuildTime}ms');
print('90th percentile frame build time: '
'${summary.computePercentileFrameBuildTime(90.0)}ms');
print('Worst frame build time: ${summary.worstFrameBuildTime}ms');
print('Frame count: ${summary.frameCount}');
print('Frame build time histogram: ${summary.buildTimeHistogram}');
// 保存跟踪文件
await summary.writeTimelineToFile(
'scrolling_timeline',
pretty: true,
);
});
test('Measure memory usage', () async {
final memory = await driver.getVMStatistics();
print('===== Memory Usage =====');
print('Used heap size: ${memory['heapUsed']} bytes');
print('Total heap size: ${memory['heapTotal']} bytes');
print('External memory: ${memory['external']} bytes');
});
});
}
性能指标
1. 时间指标
- 启动时间
- 页面加载时间
- 动画帧时间
- 响应时间
2. 内存指标
- 内存使用量
- 内存泄漏
- GC 频率
3. CPU 指标
- CPU 使用率
- 热点函数
- 线程使用情况
性能分析工具
1. DevTools
dart
// 启用 DevTools 性能叠加层
void main() {
if (kDebugMode) {
debugPaintSizeEnabled = true;
debugPrintMarkNeedsLayoutStacks = true;
debugPrintMarkNeedsPaintStacks = true;
}
runApp(MyApp());
}
2. Performance Overlay
dart
MaterialApp(
showPerformanceOverlay: true,
home: MyHomePage(),
)
最佳实践
- 设置性能基准
- 定期运行测试
- 监控关键指标
- 分析性能瓶颈
- 持续优化改进
注意事项
- 测试环境配置
- 数据采样方法
- 测试稳定性
- 性能阈值设置
- 结果分析方法
总结
性能测试是保证应用性能的重要手段。通过合理的性能测试和监控,可以及时发现和解决性能问题,提供更好的用户体验。