Implement flutter test -j (#20493)

This commit is contained in:
Ian Hickson 2018-08-15 12:22:30 -07:00 committed by GitHub
parent d3e482eca3
commit 98c117bb38
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 33 deletions

View file

@ -3,12 +3,14 @@
// found in the LICENSE file.
import 'dart:async';
import 'dart:math' as math;
import 'package:args/args.dart';
import 'package:flutter_tools/src/base/common.dart';
import 'package:flutter_tools/src/base/context.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/context_runner.dart';
import 'package:flutter_tools/src/dart/package_map.dart';
@ -121,6 +123,7 @@ Future<Null> run(List<String> args) async {
enableObservatory: collector != null,
previewDart2: true,
precompiledDillPath: dillFile.path,
concurrency: math.max(1, platform.numberOfProcessors - 2),
);
if (collector != null) {

View file

@ -3,9 +3,11 @@
// found in the LICENSE file.
import 'dart:async';
import 'dart:math' as math;
import '../base/common.dart';
import '../base/file_system.dart';
import '../base/platform.dart';
import '../cache.dart';
import '../runner/flutter_command.dart';
import '../test/coverage_collector.dart';
@ -77,7 +79,12 @@ class TestCommand extends FlutterCommand {
negatable: false,
help: 'Whether matchesGoldenFile() calls within your test methods should\n'
'update the golden files rather than test for an existing match.',
);
)
..addOption('concurrency',
abbr: 'j',
defaultsTo: math.max<int>(1, platform.numberOfProcessors - 2).toString(),
help: 'The number of concurrent test processes to run.',
valueHelp: 'jobs');
}
@override
@ -109,7 +116,15 @@ class TestCommand extends FlutterCommand {
if (startPaused && files.length != 1) {
throwToolExit(
'When using --start-paused, you must specify a single test file to run.',
exitCode: 1);
exitCode: 1,
);
}
final int jobs = int.tryParse(argResults['concurrency']);
if (jobs == null || jobs <= 0 || !jobs.isFinite) {
throwToolExit(
'Could not parse -j/--concurrency argument. It must be an integer greater than zero.'
);
}
Directory workDir;
@ -135,8 +150,7 @@ class TestCommand extends FlutterCommand {
final bool machine = argResults['machine'];
if (collector != null && machine) {
throwToolExit(
"The test command doesn't support --machine and coverage together");
throwToolExit("The test command doesn't support --machine and coverage together");
}
TestWatcher watcher;
@ -161,6 +175,7 @@ class TestCommand extends FlutterCommand {
previewDart2: argResults['preview-dart-2'],
trackWidgetCreation: argResults['track-widget-creation'],
updateGoldens: argResults['update-goldens'],
concurrency: jobs,
);
if (collector != null) {

View file

@ -5,8 +5,8 @@
import 'dart:async';
import 'package:args/command_runner.dart';
// ignore: implementation_imports
import 'package:test/src/executable.dart' as test;
import 'package:meta/meta.dart';
import 'package:test/src/executable.dart' as test; // ignore: implementation_imports
import '../artifacts.dart';
import '../base/common.dart';
@ -34,7 +34,8 @@ Future<int> runTests(
bool trackWidgetCreation = false,
bool updateGoldens = false,
TestWatcher watcher,
}) async {
@required int concurrency,
}) async {
if (trackWidgetCreation && !previewDart2) {
throw new UsageException(
'--track-widget-creation is valid only when --preview-dart-2 is specified.',
@ -54,13 +55,7 @@ Future<int> runTests(
testArgs.addAll(<String>['-r', 'compact']);
}
if (enableObservatory) { // (In particular, for collecting code coverage.)
// Turn on concurrency, but just barely. This is a trade-off between running
// too many tests such that they all time out, and too few tests such that
// the tests overall take too much time. The current number is empirically
// based on what our infrastructure can handle, which isn't ideal...
testArgs.add('--concurrency=2');
}
testArgs.add('--concurrency=$concurrency');
for (String name in names) {
testArgs..add('--name')..add(name);