public Task BeforeAllTests(TestContext testContext) { var executor = new MethodExecuter(methodInfo); return(executor.ExecuteAsync(true)); }
public override async Task <IEnumerable <PerformanceTestIterationResult> > ExecuteAsync(TestContext context) { IEnumerable <ITestLifecycle> testLifecycles = BuildLifeTimeEvents(); var afterTest = testLifecycles.OfType <ITestLifecycleAfterTest>().ToArray(); var beforeTest = testLifecycles.OfType <ITestLifecycleBeforeTest>().ToArray(); var afterTestIteration = testLifecycles.OfType <ITestLifecycleAfterTestIteration>().ToArray(); var beforeTestIteration = testLifecycles.OfType <ITestLifecycleBeforeTestIteration>().ToArray(); var executor = new MethodExecuter(this.methodInfo); foreach (var t in beforeTest) { await t.BeforeTest(context); } var results = new ConcurrentBag <PerformanceTestIterationResult>(); var wc = Math.Max(0, this.settings.WarmUpCount); for (var i = 0; i < wc; i++) { using (var subContext = TestContext.Start(this, context, true)) { foreach (var t in beforeTestIteration) { await t.BeforeTestIteration(subContext); } var result = await executor.ExecuteAsync(); results.Add(new PerformanceTestIterationResult { Duration = result.Elapsed, Error = result.Error, IsWarmup = true, Output = subContext.Output }); foreach (var t in afterTestIteration) { await t.AfterTestIteration(subContext); } } } var timeout = Stopwatch.StartNew(); var tasks = new List <Task>(); var cc = Math.Max(1, this.settings.ConcurrancyCount); for (var i = 0; i < cc; i++) { var t = Task.Run(async() => { do { using (var subContext = TestContext.Start(this, context, false)) { foreach (var e in beforeTestIteration) { await e.BeforeTestIteration(subContext); } var result = await executor.ExecuteAsync(); results.Add(new PerformanceTestIterationResult { Duration = result.Elapsed, Error = result.Error, IsWarmup = false, Output = subContext.Output }); foreach (var e in afterTestIteration) { await e.AfterTestIteration(subContext); } } } while (timeout.ElapsedMilliseconds < settings.ExecutionLength); }); tasks.Add(t); } await Task.WhenAll(tasks); // all executions complete deal with stats etc out side the runners foreach (var t in afterTest) { await t.AfterTest(context); } return(results); }