Add ability to shard customer tests (#53433)
This commit is contained in:
parent
730a440fd5
commit
025f7ae642
@ -25,6 +25,18 @@ Future<bool> run(List<String> arguments) async {
|
|||||||
help: 'How many times to run each test. Set to a high value to look for flakes.',
|
help: 'How many times to run each test. Set to a high value to look for flakes.',
|
||||||
valueHelp: 'count',
|
valueHelp: 'count',
|
||||||
)
|
)
|
||||||
|
..addOption(
|
||||||
|
'shards',
|
||||||
|
defaultsTo: '1',
|
||||||
|
help: 'How many shards to split the tests into. Used in continuous integration.',
|
||||||
|
valueHelp: 'count',
|
||||||
|
)
|
||||||
|
..addOption(
|
||||||
|
'shard-index',
|
||||||
|
defaultsTo: '0',
|
||||||
|
help: 'The current shard to run the tests with the range [0 .. shards - 1]. Used in continuous integration.',
|
||||||
|
valueHelp: 'count',
|
||||||
|
)
|
||||||
..addFlag(
|
..addFlag(
|
||||||
'skip-on-fetch-failure',
|
'skip-on-fetch-failure',
|
||||||
defaultsTo: false,
|
defaultsTo: false,
|
||||||
@ -70,6 +82,8 @@ Future<bool> run(List<String> arguments) async {
|
|||||||
final bool skipTemplate = parsedArguments['skip-template'] as bool;
|
final bool skipTemplate = parsedArguments['skip-template'] as bool;
|
||||||
final bool verbose = parsedArguments['verbose'] as bool;
|
final bool verbose = parsedArguments['verbose'] as bool;
|
||||||
final bool help = parsedArguments['help'] as bool;
|
final bool help = parsedArguments['help'] as bool;
|
||||||
|
final int numberShards = int.tryParse(parsedArguments['shards'] as String);
|
||||||
|
final int shardIndex = int.tryParse(parsedArguments['shard-index'] as String);
|
||||||
final List<File> files = parsedArguments
|
final List<File> files = parsedArguments
|
||||||
.rest
|
.rest
|
||||||
.expand((String path) => Glob(path).listSync())
|
.expand((String path) => Glob(path).listSync())
|
||||||
@ -94,16 +108,38 @@ Future<bool> run(List<String> arguments) async {
|
|||||||
if (verbose)
|
if (verbose)
|
||||||
print('Starting run_tests.dart...');
|
print('Starting run_tests.dart...');
|
||||||
|
|
||||||
|
if (files.length < shardIndex)
|
||||||
|
print('Warning: There are more shards than tests. Some shards will not run any tests.');
|
||||||
|
|
||||||
|
if (numberShards <= shardIndex) {
|
||||||
|
print('Error: There are more shard indexes than shards.');
|
||||||
|
return help;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Best attempt at evenly splitting tests among the shards
|
||||||
|
final List<File> shardedFiles = <File>[];
|
||||||
|
for (int i = shardIndex; i < files.length; i += numberShards) {
|
||||||
|
shardedFiles.add(files[i]);
|
||||||
|
}
|
||||||
|
|
||||||
int testCount = 0;
|
int testCount = 0;
|
||||||
int failures = 0;
|
int failures = 0;
|
||||||
|
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
final String s = files.length == 1 ? '' : 's';
|
final String s = files.length == 1 ? '' : 's';
|
||||||
print('${files.length} file$s specified.');
|
final String ss = shardedFiles.length == 1 ? '' : 's';
|
||||||
|
print('${files.length} file$s specified. ${shardedFiles.length} test$ss in shard #$shardIndex.');
|
||||||
print('');
|
print('');
|
||||||
}
|
}
|
||||||
|
|
||||||
for (final File file in files) {
|
if (verbose) {
|
||||||
|
print('Tests in this shard:');
|
||||||
|
for (final File file in shardedFiles)
|
||||||
|
print(file.path);
|
||||||
|
}
|
||||||
|
print('');
|
||||||
|
|
||||||
|
for (final File file in shardedFiles) {
|
||||||
if (verbose)
|
if (verbose)
|
||||||
print('Processing ${file.path}...');
|
print('Processing ${file.path}...');
|
||||||
TestFile instructions;
|
TestFile instructions;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user