Пример #1
0
        static void Main(string[] args)
        {
            string ipAddress = args[0];
            string port      = args[1];

            ServiceClient.ServerIpAddress = ipAddress;
            ServiceClient.ServerPort      = port;

            Test.Clear();

            Test.TestPackage = ServiceClient.GetTestPackage();

            Test.TestPackage.Clients = Test.TestPackage.Clients / Test.TestPackage.Nodes.NodeList.Count;
            if (Test.TestPackage.Clients == 0)
            {
                Test.TestPackage.Clients = 1;
            }

            //generate proxy
            foreach (var suite in Test.TestPackage.Suites)
            {
                Test.GenerateProxyAssembly(suite.Wsdl, suite.Guid);
            }

            //run test
            Task runTest = new Task(RunTest);

            runTest.Start();

            runTest.Wait();

            //signal server of completion
            ServiceClient.Done();
        }
Пример #2
0
        public void ServiceChanged()
        {
            //ServiceUrlSelected
            var suite = Test.TestPackage.Suites.Find(s => s.ServiceUrl.ToLower() == ServiceUrlSelected.ToLower());
            var guid  = suite.Guid;

            CurrentServiceGuid = guid;
            var sm = Test.GetAllServiceMethods(guid);

            ServiceMethods = sm;
            SetServiceUrl(guid);
            ResetForm();
        }
Пример #3
0
        public void ServiceChanged()
        {
            //ServiceUrlSelected
            var suite = Test.TestPackage.Suites.Find(s => s.ServiceUrl.ToLower() == ServiceUrlSelected.ToLower());
            var guid  = suite.Guid;

            CurrentServiceGuid = guid;
            SelectedBinding    = suite.BindingToTest;
            var sm = Test.GetAllServiceMethods(guid);

            ServiceMethods = sm;
            Bindings       = Test.TestPackage.Suites.Find(s => s.Guid == guid).EndPoints.Keys.ToList();
            SetServiceUrl(guid);
            NotifyOfPropertyChange(() => CanRunPerfTest);
            ResetFormServiceAdded();
        }
Пример #4
0
        public void TestRestApi()
        {
            RestMethodResponse response = Test.InvokeRestApi(SelectedRestMethod, false);

            Controller.ShowRestApiResultView(response.StatusCode, response.Response, SelectedRestMethod.Guid);
        }
Пример #5
0
        public static void RunTest()
        {
            CancellationTokens.ResetPerformanceCancellationToken();
            CancellationTokens.GetPerformanceCancellationToken();

            Test.MethodLevelResults   = new ConcurrentDictionary <string, MethodLogs>();
            Test.MethodLevelReqStatus = new ConcurrentDictionary <string, MethodLogs>();
            Test.ClearCache();

            Test.PerformanceRunToken = CancellationTokens.GetPerformanceCancellationToken();

            if (!string.IsNullOrEmpty(Test.TestPackage.ResultFileName))
            {
                if (File.Exists(Test.TestPackage.ResultFileName))
                {
                    File.Delete(Test.TestPackage.ResultFileName);
                }
            }

            int scenariosCount = Test.TestPackage.Scenarios.Count;

            int duration = Test.TestPackage.Duration;
            int clients  = Test.TestPackage.Clients;

            Stopwatch testDurationTimer = new Stopwatch();

            testDurationTimer.Start();

            int requestSent = 0;

            int delayRangeStart = Test.TestPackage.DelayRangeStart;
            int delayRangeEnd   = Test.TestPackage.DelayRangeEnd;

            int clientsSpawned = 0;

            Task[] clientTasks = new Task[clients];

            while (clientsSpawned < clients)
            {
                int clientIndex = clientsSpawned;
                clientTasks[clientIndex] = new Task(() =>
                {
                    int currentScenario      = -1;
                    int currentScenarioOrder = -1;
                    while (testDurationTimer.ElapsedMilliseconds <= (duration * 60 * 1000) &&
                           !CancellationTokens.GetPerformanceCancellationToken().IsCancellationRequested)
                    {
                        if (scenariosCount == 0)
                        {
                            Random r        = new Random();
                            bool executeWcf = r.Next(0, 1000) % 2 == 0;

                            if (Test.TestPackage.Suites.Count == 0)
                            {
                                executeWcf = false;
                            }

                            if (executeWcf || Test.TestPackage.RestMethods.Count == 0)
                            {
                                int suiteNumberToExecute = r.Next(0, Test.TestPackage.Suites.Count - 1);
                                int testNumberToExecute  = r.Next(0,
                                                                  Test.TestPackage.Suites[suiteNumberToExecute].Tests.Count - 1);
                                Common.Test testToExecute =
                                    Test.TestPackage.Suites[suiteNumberToExecute].Tests[testNumberToExecute];
                                Test.InvokeTest(testToExecute, Test.TestPackage.Suites[suiteNumberToExecute].Guid);
                                requestSent++;
                            }
                            else
                            {
                                int suiteNumberToExecute = r.Next(0, Test.TestPackage.RestMethods.Count - 1);
                                Task.Factory.StartNew(() =>
                                {
                                    Test.InvokeRestApi(
                                        Test.TestPackage.RestMethods[suiteNumberToExecute], true);
                                });
                                requestSent++;
                            }
                            Thread.Sleep(r.Next(delayRangeStart, delayRangeEnd));
                        }
                        else
                        {
                            if (currentScenario == -1)
                            {
                                Random r        = new Random();
                                currentScenario = r.Next(0, scenariosCount - 1);
                            }
                            var scen = Test.TestPackage.Scenarios[currentScenario];

                            if (currentScenarioOrder == -1)
                            {
                                currentScenarioOrder = 0;
                            }
                            var order = currentScenarioOrder;
                            var ss    = (from s in scen.ScenarioOrder
                                         where s.Order == order
                                         select s).First();
                            int totalMethodsInScenario = scen.ScenarioOrder.Count;

                            if (!ss.IsRest)
                            {
                                var methodName = ss.MethodName;
                                var tts        = from suite in Test.TestPackage.Suites
                                                 from tt in suite.Tests
                                                 where tt.Service.MethodName == methodName &&
                                                 ss.AssemblyGuid == suite.Guid
                                                 select tt;
                                Common.Test testToExecute = tts.ElementAt(0);

                                var valueToUse = (from v in testToExecute.Service.Values.ValueList
                                                  where v.Guid == ss.MethodGuid
                                                  select v).First();

                                Test.InvokeTest(testToExecute, ss.AssemblyGuid, valueToUse);
                            }
                            else
                            {
                                Task.Factory.StartNew(() =>
                                {
                                    Test.InvokeRestApi(
                                        Test.TestPackage.RestMethods.Find(r => r.Guid == ss.MethodGuid), true);
                                });
                            }
                            requestSent++;
                            Random r1 = new Random();
                            Thread.Sleep(r1.Next(delayRangeStart, delayRangeEnd));

                            currentScenarioOrder = currentScenarioOrder + 1;
                            if (totalMethodsInScenario == currentScenarioOrder)
                            {
                                currentScenarioOrder = -1;
                                currentScenario      = -1;
                                Thread.Sleep(Test.TestPackage.IntervalBetweenScenarios);
                            }
                        }
                    }
                }, CancellationTokens.GetPerformanceCancellationToken());
                clientTasks[clientIndex].Start();
                clientsSpawned++;
            }

            try
            {
                Task.WaitAll(clientTasks);
                SpinWait.SpinUntil(() => (requestSent == Test.TotalResponsesRecieved), 60000);
            }
            catch (AggregateException ae)
            {
                Logger.LogMessage("Aggregaate Exception Occured : " + ae.Message);
                foreach (Exception ex in ae.InnerExceptions)
                {
                    Logger.LogMessage(string.Format("Aggregate exception : {0} {1} {2}", ex.Message, Environment.NewLine, ex.StackTrace));
                }
            }
        }