示例#1
0
 public StressTestRunner(
     StressTestServer server,
     ITest test,
     IMessageBus messageBus,
     Type testClass,
     object[] constructorArguments,
     MethodInfo testMethod,
     object[] testMethodArguments,
     string skipReason,
     IReadOnlyList <BeforeAfterTestAttribute> beforeAfterAttributes,
     ExceptionAggregator aggregator,
     CancellationTokenSource cancellationTokenSource)
     : base(
         test,
         messageBus,
         testClass,
         constructorArguments,
         testMethod,
         testMethodArguments,
         skipReason,
         beforeAfterAttributes,
         aggregator,
         cancellationTokenSource)
 {
     _server = server;
 }
示例#2
0
        private XunitTestRunner CreateRunner(StressTestServer server, StressTestCase testCase)
        {
            var name = DisplayName;

            return(new StressTestRunner(
                       server,
                       new XunitTest(TestCase, name),
                       MessageBus,
                       TestClass,
                       ConstructorArguments,
                       TestMethod,
                       TestMethodArguments,
                       SkipReason,
                       BeforeAfterAttributes,
                       Aggregator,
                       CancellationTokenSource));
        }
示例#3
0
        protected override async Task <RunSummary> RunTestAsync()
        {
            var runSummary = new StressRunSummary
            {
                TestClassFullName = TestCase.TestMethod.TestClass.Class.Name,
                TestClass         = TestCase.TestMethod.TestClass.Class.Name.Split('.').Last(),
                TestMethod        = TestCase.TestMethodName,
                Variation         = TestCase.Variation,
                RunStarted        = DateTime.UtcNow,
                MachineName       = _machineName,
                Framework         = _framework,
                Architecture      = IntPtr.Size > 4 ? "x64" : "x86",
                Iterations        = TestCase.Iterations,
            };

            // Warmup
            var server = new StressTestServer(
                TestCase.ServerType,
                TestCase.TestApplicationName,
                TestCase.TestMethodName,
                port: 5000,
                metricCollector: TestCase.MetricCollector);

            using (server)
            {
                var startResult = await server.StartAsync();

                if (!startResult.SuccessfullyStarted)
                {
                    _diagnosticMessageSink.OnMessage(
                        new XunitDiagnosticMessage("Failed to start application server."));
                    return(new RunSummary()
                    {
                        Total = 1, Failed = 1
                    });
                }
                else
                {
                    using (startResult.ServerHandle)
                    {
                        await(Task) TestCase.WarmupMethod?.ToRuntimeMethod().Invoke(null, new[] { server.ClientFactory() });

                        TestCase.MetricCollector.Reset();
                        var runner = CreateRunner(server, TestCase);
                        runSummary.Aggregate(await runner.RunAsync());
                    }
                }
            }

            if (runSummary.Failed != 0)
            {
                _diagnosticMessageSink.OnMessage(
                    new XunitDiagnosticMessage($"No valid results for {TestCase.DisplayName}. {runSummary.Failed} of {TestCase.Iterations} iterations failed."));
            }
            else
            {
                runSummary.PopulateMetrics(TestCase.MetricCollector);
                _diagnosticMessageSink.OnMessage(new XunitDiagnosticMessage(runSummary.ToString()));

                runSummary.PublishOutput(TestCase, MessageBus);
            }

            return(runSummary);
        }