private void RunTests_OnClick(object sender, RoutedEventArgs e)
        {
            var wrapper = new WebClientPerfWrapper();
            var results = new List <Tuple <TimeSpan, string, string> >();
            int numTries;
            var request = string.Format("{0}?{1}", UrlPath.Text, Query.Text);

            if (!Int32.TryParse(Tries.Text, out numTries))
            {
                MessageBox.Show("Number of tries is not an integer.");
                return;
            }
            if (numTries <= 0)
            {
                MessageBox.Show("Number of tries must be greater than 0.");
                return;
            }
            for (var i = 0; i < numTries; i++)
            {
                var result = wrapper.RunPerformanceRequest(request);
                if (result != null)
                {
                    results.Add(result);
                }
            }

            if (!_requests.Contains(request))
            {
                ReportSummary.AddDataToChart(request, results.Select(x => x.Item1).ToList(), results.Select(x => x.Item1).ToList());
                ReportSummary.StatSummary.ViewModel       = new StatSummaryViewModel(request, results.Select(x => x.Item1).ToList());
                ReportSummary.IndividualRuntime.ViewModel = new IndividualRuntimeViewModel(results.Select(x => x.Item1).ToList());
                _requests.Add(request);
            }
            else
            {
                ReportSummary.MergeDataToChart(request, results.Select(x => x.Item1).ToList());
                var newModelData = ReportSummary.StatSummary.ViewModel.Runtimes;
                foreach (var item in results.Select(x => x.Item1).ToList())
                {
                    newModelData.Add(item);
                }
                ReportSummary.StatSummary.ViewModel = new StatSummaryViewModel(request, newModelData);
                foreach (var item in results.Select(x => x.Item1).ToList())
                {
                    ReportSummary.IndividualRuntime.ViewModel.Runtimes.Add(item.TotalMilliseconds);
                }
            }
        }
        private async void RunTests_OnClick(object sender, RoutedEventArgs e)
        {
            if (UrlGeneratorPlugins.SelectedItem == null)
            {
                return;
            }
            if (!(UrlGeneratorPlugins.SelectedItem is IThreadedPerformanceSessionTestUrlGenerator))
            {
                return;
            }
            _testUrls = (UrlGeneratorPlugins.SelectedItem as IThreadedPerformanceSessionTestUrlGenerator).GenerateTests();

            var wrapper  = new WebClientPerfWrapper();
            var results  = new List <Tuple <TimeSpan, string, string> >();
            var numTries = Int32.Parse(TrialsTextBox.Text);

            ReportSummary.StatSummary.ViewModel = new StatSummaryViewModel();
            foreach (var testCase in _testUrls)
            {
                var request = testCase;
                if (string.IsNullOrEmpty(request))
                {
                    continue;
                }

                var tasks       = Enumerable.Range(0, numTries).Select(x => wrapper.RunPerformanceRequestTask(request));
                var taskResults = await Task.WhenAll(tasks);

                var newResults = taskResults.Where(x => x != null).ToList();
                results.AddRange(newResults);
                ReportSummary.AddDataToChart(request, newResults.Select(x => x.Item1).ToList(), results.Select(x => x.Item1).ToList());
                ReportSummary.StatSummary.ViewModel.Requests.Add(request);
                foreach (var result in results)
                {
                    ReportSummary.StatSummary.ViewModel.Runtimes.Add(result.Item1);
                }
                ReportSummary.IndividualRuntime.ViewModel = new IndividualRuntimeViewModel(results.Select(x => x.Item1).ToList());
            }
        }
Example #3
0
        private void LoadTests_OnClick(object sender, RoutedEventArgs e)
        {
            int  time = 0, threads = 0;
            bool loadTestTimeParsed    = Int32.TryParse(loadTestTime.Text, out time);

            if (!loadTestTimeParsed)
            {
                MessageBox.Show("Error parsing load test time. Stopping tests.");
                return;
            }

            bool loadTestThreadsParsed = Int32.TryParse(loadTestThreads.Text, out threads);

            if (!loadTestThreadsParsed)
            {
                MessageBox.Show("Error parsing load test threads. Stopping tests.");
                return;
            }

            var durationViewModel      = DataContext as TimeDurationViewModel;

            if (durationViewModel == null)
            {
                MessageBox.Show("ViewModel null, Aborting tests");
                return;
            }

            var queries = durationViewModel.Queries;
            var urls    = durationViewModel.Urls;

            if (!queries.Any())
            {
                MessageBox.Show("No queries loaded. Aborting tests");
                return;
            }

            Stopwatch sw      = Stopwatch.StartNew();
            var       wrapper = new WebClientPerfWrapper();

            while (sw.ElapsedMilliseconds < time * 60 * 1000)
            {
                int index = 0;
                foreach (var query in queries)
                {
                    if (urls.Any())
                    {
                        // Build one request for each url.
                        var requests = urls.Select(x => string.Format("{0}?{1}", x, query)).ToList();
                        if (sw.ElapsedMilliseconds >= time * 60 * 1000)
                        {
                            break;
                        }
                        foreach (var req in requests)
                        {
                            var thread = new Thread(() =>
                            {
                                var runtime = wrapper.RunPerformanceRequest(
                                    req);
                                _concurrentRuntimes.Enqueue(new Tuple <string, TimeSpan, string>(req, runtime.Item1, runtime.Item2));
                            });
                            thread.Start();
                        }

                        index++;
                        if (index % threads == 0)
                        {
                            Thread.Sleep(1000);
                        }
                    }
                    else
                    {
                        MessageBox.Show("No urls loaded. Aborting tests");
                        return;
                    }
                }
            }

            var csvValue = BuildLoadTimesCsv();

            var dialog = new SaveFileDialog
            {
                InitialDirectory = AppDomain.CurrentDomain.BaseDirectory,
                Filter           = "CSV (Comma delimited) |*.csv",
                DefaultExt       = ".csv"
            };

            if (dialog.ShowDialog() != true)
            {
                return;
            }
            using (var fs = File.Create(dialog.FileName))
            {
                using (var writer = new StreamWriter(fs))
                {
                    writer.Write(csvValue);
                }
            }
        }
Example #4
0
        private void RunTests_OnClick(object sender, RoutedEventArgs e)
        {
            _csvForm = string.Empty;
            var csvBuilder        = new StringBuilder();
            var durationViewModel = DataContext as TimeDurationViewModel;

            if (durationViewModel == null)
            {
                MessageBox.Show("ViewModel null, Aborting tests");
                return;
            }

            var queries = durationViewModel.Queries;
            var urls    = durationViewModel.Urls;

            if (!queries.Any())
            {
                MessageBox.Show("No queries loaded. Aborting tests");
                return;
            }

            double time;

            if (!Double.TryParse(TestTime.Text, out time))
            {
                return;
            }

            int index = 0;

            foreach (var url in urls)
            {
                csvBuilder.Append(url + ",Result Count,");
            }
            csvBuilder.AppendLine("Query,");



            var wrapper = new WebClientPerfWrapper();
            var sw      = new Stopwatch();

            sw.Start();
            while (sw.ElapsedMilliseconds < time * 60 * 1000)
            {
                foreach (var query in queries)
                {
                    if (sw.ElapsedMilliseconds >= time * 60 * 1000)
                    {
                        break;
                    }
                    if (urls.Any())
                    {
                        foreach (var url in urls)
                        {
                            if (sw.ElapsedMilliseconds >= time * 60 * 1000)
                            {
                                break;
                            }
                            var request      = string.Format("{0}?{1}", url, query);
                            var responseTime = wrapper.RunPerformanceRequest(request);
                            var match        = durationViewModel.Summaries.First(x => x.Requests.Contains(url));
                            durationViewModel.Summaries.First(x => x.Requests.Contains(url)).Runtimes.Add(responseTime.Item1);
                            csvBuilder.Append(string.Format("{0},", responseTime.Item1.TotalMilliseconds));
                            var docMatch = Regex.Match(responseTime.Item2, @"Results \d+ through \d+ out of (?'results'\d+) matches");
                            if (Regex.IsMatch(responseTime.Item2, @"Results \d+ through \d+ out of (?'results'\d+) matches"))
                            {
                                csvBuilder.Append(string.Format("{0},", Int32.Parse(docMatch.Groups["results"].ToString())));
                            }
                            else
                            {
                                csvBuilder.Append("0,");
                            }
                        }
                        csvBuilder.AppendLine(string.Format("{0},", query));
                    }
                    else
                    {
                        MessageBox.Show("No urls loaded. Aborting tests");
                        return;
                    }
                }
            }
            sw.Stop();
            _resultRuntimes = wrapper.GetResultRuntimes();
            _csvForm        = csvBuilder.ToString();
            //DataTable dt = new DataTable();
            //string[] tableData = _csvForm.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            //var col = from cl in tableData[0].Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
            //          select new DataColumn(cl);
            //dt.Columns.AddRange(col.ToArray());
            //(from st in tableData.Skip(1)
            //select dt.Rows.Add(st.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries))).ToList();
            //gridView.ItemsSource = dt.DefaultView;
            //gridView.AutoGenerateColumns = true;
            index = 0;
            var max         = durationViewModel.Summaries.Select(x => GetAggregate(x.Runtimes.ToList()).Max()).Max();
            var trialMax    = durationViewModel.Summaries.Select(x => x.Runtimes.Count).Max();
            var timespanMax = durationViewModel.Summaries.Select(x => x.Runtimes.Max()).Max().TotalMilliseconds;
            var timespanMin = durationViewModel.Summaries.Select(x => x.Runtimes.Min()).Min().TotalMilliseconds;

            foreach (var url in urls)
            {
                var timespans             = durationViewModel.Summaries.First(x => x.Requests.Contains(url)).Runtimes.ToList();
                var cumulativeMiliseconds = GetAggregate(timespans).ToList();
                int trialNum = 0;
                var trials   = timespans.Select(item => ++ trialNum).ToList();
                _individualRuntimeChart.Series[index].Points.DataBindXY(trials, "Runs",
                                                                        timespans.Select(x => x.TotalMilliseconds)
                                                                        .ToList(), "Runtime (Milliseconds)");
                _individualRuntimeChart.ChartAreas[0].AxisY.Minimum = timespanMin;
                _individualRuntimeChart.ChartAreas[0].AxisY.Maximum = timespanMax;
                _individualRuntimeChart.ChartAreas[0].AxisX.Minimum = 0;
                _individualRuntimeChart.ChartAreas[0].AxisX.Maximum = trials.Max();

                _cumulativeRuntimeChart.Series[index].Points.DataBindXY(trials, "Runs", cumulativeMiliseconds,
                                                                        "Runtime (Milliseconds)");
                _cumulativeRuntimeChart.ChartAreas[0].AxisY.Minimum = 0;
                _cumulativeRuntimeChart.ChartAreas[0].AxisX.Minimum = 0;
                _cumulativeRuntimeChart.ChartAreas[0].AxisY.Maximum = max;
                _cumulativeRuntimeChart.ChartAreas[0].AxisX.Maximum = trialMax;
                index++;
            }
        }
 public void Test1()
 {
     var wrapper = new WebClientPerfWrapper();
     wrapper.RunPerformanceRequest("http://www.google.com/search?q=c%23&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a");
 }
        public void Test1()
        {
            var wrapper = new WebClientPerfWrapper();

            wrapper.RunPerformanceRequest("http://www.google.com/search?q=c%23&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a");
        }