Ejemplo n.º 1
0
        public async Task <List <TestCaseResult> > RunAllSuitesAsync(Config config, IProgress <double> progressReporter, int maxParallelism)
        {
            logger.LogTrace("Generating tasks");
            var cases = GenerateTasks(config).ToArray();

            console.WriteRichLine($"Found {cases.Length} tests, running tests:");

            int total    = cases.Length;
            int progress = 0;

            var results = await cases
                          .ForEachAsync <CaseExecutor, TestCaseResult>(
                completed : UpdateProgress,
                degreesOfParallelization : maxParallelism);

            logger.LogTrace("Results collected: {count}", progress);

            return(results.ToList());

            void UpdateProgress(int index, TestCaseResult result)
            {
                var percentage = Interlocked.Increment(ref progress) / (double)total;

                progressReporter.Report(percentage);
                logger.LogDebug("Progress: {progress:P}", percentage);
            }
        }
Ejemplo n.º 2
0
        public async Task <int> InvokeAsync(InvocationContext context)
        {
            var timeTaken = Stopwatch.StartNew();

            logger.LogInformation("Test Command execute");
            console.WriteLine("Starting test command".StyleBold());
            //console.WriteLine("Using ")

            console.WriteRichLine($"Using configuration: {options.Configuration}");

            var config = await LoadConfig();

            if (config.IsNone)
            {
                return(ExitCodes.ConfigurationFailure);
            }

            await console.CreateProgressBar("Running tests");

            var progress = new Progress <double>((p) => console.ReportProgress(p));

            var results = await executor.RunAllSuitesAsync((Config)config, progress, options.Sequential? 1 : Environment.ProcessorCount);

            await console.DestroyProgressBar();

            // summarize results
            await resultFormatter.WriteResultsHeader();

            var resultStats = new ResultsStatistics();

            foreach (var result in results)
            {
                resultStats.ProcessRecord(result);
                await resultFormatter.WriteResult(resultStats.TotalResults, result);
            }


            timeTaken.Stop();
            await resultFormatter.WriteResultsFooter(new FinalResults(
                                                         (Config)config,
                                                         resultStats,
                                                         timeTaken.Elapsed
                                                         ));

            //logger.LogDebug("Received {count} results from executor", results);

            return(resultStats.TotalFailures is 0 ? ExitCodes.Success : ExitCodes.TestFailure);
        }