Example #1
0
        public AbReport(ExecuteResult[] results, ExecuteScenario executeScenario, string scalingType)
        {
            ScalingType      = scalingType;
            ScenarioName     = executeScenario.ScenarioName;
            RequestCount     = executeScenario.ProcessCount * executeScenario.WorkerPerProcess * executeScenario.ExecutePerWorker;
            Concurrency      = executeScenario.WorkerPerProcess;
            TotalRequests    = results.Length;
            CompleteRequests = results.Where(x => !x.HasError).Count();
            FailedRequests   = results.Where(x => x.HasError).Count();

            // Time to complete all requests.
            // * Get sum of IWorkerReciever.Execute time on each workerId, max execution time will be actual execution time.
            TimeTaken = results.GroupBy(x => x.WorkerId).Select(xs => xs.Sum(x => x.Elapsed.TotalSeconds)).Max();
            // The average time spent per request. The first value is calculated with the formula `concurrency * timetaken * 1000 / done` while the second value is calculated with the formula `timetaken * 1000 / done`
            TimePerRequest = TimeTaken * 1000 / RequestCount;

            // percentile requires sort before calculate
            var sortedResultsElapsedMs = results.Select(x => x.Elapsed.TotalMilliseconds).OrderBy(x => x).ToArray();
            var percecs = new[] { 0.5, 0.66, 0.75, 0.80, 0.90, 0.95, 0.98, 0.99, 1.00 };

            Percentiles = percecs.Select((x, i) =>
            {
                var percent = (int)(x * 100);
                var value   = (int)MatchUtils.Percentile(sortedResultsElapsedMs, x);
                return(i != percecs.Length - 1
                    ? new PercentileData(percent, value, null)
                    : new PercentileData(percent, value, "(longest request)"));
            })
                          .ToArray();
        }
Example #2
0
        static void SummaryResult(ExecuteResult[] results, DFrameOptions options, ExecuteScenario executeScenario)
        {
            // TODO: Logger
            if (!results.Any())
            {
                // canceled
                Console.WriteLine("No execution result found, quit result report.");
                return;
            }

            // Output req/sec and other calcutlation report.
            Console.WriteLine("Show Load Testing result report.");
            OutputReportAb(results, options, executeScenario).GetAwaiter().GetResult();
        }
Example #3
0
        /// <summary>
        /// ApacheBench like reports
        /// </summary>
        /// <param name="results"></param>
        /// <param name="options"></param>
        static async Task OutputReportAb(ExecuteResult[] results, DFrameOptions options, ExecuteScenario executeScenario)
        {
            var scalingType = options.ScalingProvider.GetType().Name;
            var abReport    = new AbReport(results, executeScenario, scalingType);

            Console.WriteLine(abReport.ToString());
            await ReportNotifier.OnReportOutput.PublishAsync(abReport).ConfigureAwait(false);
        }