如何用flutter test执行带权限集成测试及获取单测独立日志?
问题解答
一、使用flutter test执行集成测试并授予APK权限
因为flutter test不再依赖driver文件,你可以通过两种方式处理权限授予:
1. 在测试代码中直接执行adb授权
在你的集成测试文件(integration_test/local_server_tests.dart)中,利用Dart的Process类在测试启动前调用adb命令授予权限,示例代码如下:
import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; void main() { // 在所有测试开始前统一授权 setUpAll(() async { // 替换为你的应用包名和需要的权限列表 const packageName = "com.your.app.package"; const permissions = [ "android.permission.ACCESS_FINE_LOCATION", "android.permission.WRITE_EXTERNAL_STORAGE" ]; for (final perm in permissions) { await Process.run( "adb", ["shell", "pm", "grant", packageName, perm], ); } }); testWidgets("本地服务器测试用例", (tester) async { // 你的测试逻辑代码 await tester.pumpAndSettle(); // ... }); }
之后直接运行测试命令即可:
flutter test integration_test/local_server_tests.dart --flavor=rc
2. 测试前通过脚本批量授权
如果多个测试用例需要相同权限,可以写一个shell脚本先执行授权,再启动测试:
#!/bin/bash # 授予权限 adb shell pm grant com.your.app.package android.permission.ACCESS_FINE_LOCATION adb shell pm grant com.your.app.package android.permission.WRITE_EXTERNAL_STORAGE # 启动测试 flutter test integration_test/local_server_tests.dart --flavor=rc
给脚本添加执行权限后运行即可:chmod +x run_tests.sh && ./run_tests.sh
二、在flutter driver中获取单个测试的执行日志
你可以通过监听测试事件或启用详细日志来获取单测的独立执行记录:
1. 在driver文件中监听测试生命周期事件
修改test_driver/main_test.dart,通过FlutterDriver的listen方法监听TestStart和TestDone事件,实时打印每个测试的状态和结果:
import 'package:flutter_driver/flutter_driver.dart'; import 'package:test/test.dart'; void main() { late FlutterDriver driver; setUpAll(() async { driver = await FlutterDriver.connect(); // 监听测试事件 driver.listen((event) { if (event is TestStart) { print("\n=== 开始测试: ${event.testName} ==="); } else if (event is TestDone) { final status = event.passed ? "通过" : "失败"; print("=== 测试结束: ${event.testName},结果: $status ==="); if (!event.passed && event.error != null) { print("错误详情: ${event.error}"); } } }); }); tearDownAll(() async { await driver.close(); }); test("测试用例1", () async { // 测试逻辑 }); test("测试用例2", () async { // 测试逻辑 }); }
运行flutter driver命令后,控制台会输出每个测试的独立执行日志。
2. 启用详细日志并导出到文件
使用--verbose参数获取更详细的日志,并重定向到文件方便后续查看:
flutter driver --target=integration_test/local_server_tests.dart --flavor=rc --driver=test_driver/main_test.dart --verbose > test_results.log
之后可以在test_results.log中搜索具体测试用例的名称,找到对应的执行和结果日志。
内容的提问来源于stack exchange,提问作者Vishnu
相关产品推荐
相关产品推荐

