public void BasicSiteValidatorTest() { var requestList = new List <HttpRequestData>() { new HttpRequestData { Url = "http://www.microsoft.com/en-us/default.aspx" }, new HttpRequestData { Url = "http://localhost/WebLog" }, new HttpRequestData { Url = "http://localhost/WebLog/posts" } }; var stress = new StressTester(); var validator = new SiteValidator(stress); bool result = validator.CheckAllServers(requestList); Assert.IsFalse(result); Console.WriteLine(validator.ErrorMessage); }
public void TestAllSitesThreadsTest() { SessionParser parser = new SessionParser(); List <HttpRequestData> httpRequests = null; var tester = new StressTester(); var swatch = new Stopwatch(); swatch.Start(); var results = tester.CheckAllSites(httpRequests, 40, 40); Assert.IsNotNull(results); swatch.Stop(); long totalTime = swatch.ElapsedMilliseconds / 1000; Console.WriteLine(tester.ParseResults(results, (int)totalTime)); int count = 0; foreach (var result in results.OrderByDescending(res => res.StatusCode)) { count++; Console.WriteLine(count + ". " + result.Url); Console.WriteLine("\t" + result.StatusCode + " " + result.TimeTakenMs.ToString("n0") + "ms " + result.ErrorMessage); } }
public void FileRequestWriterBasic() { var stressTester = new StressTester(); int requestCount = 10_000_001; Stopwatch watch = new Stopwatch(); watch.Start(); using (var writer = new FileCollectionRequestWriter(stressTester) { MaxCollectionItems = 10_000 })
public void CheckSingleSiteWithGzipTest() { var tester = new StressTester(); tester.Options.MaxResponseSize = 0; var resp = tester.CheckSite(new HttpRequestData() { HttpVerb = "GET", Url = "http://weblog.west-wind.com/posts/2014/Feb/22/Using-CSS-Transitions-to-SlideUp-and-SlideDown" }); Console.WriteLine(resp.StatusCode); Console.WriteLine(resp.TimeTakenMs); Console.WriteLine(resp.ResponseContent); }
public void CheckSiteSyncTest() { SessionParser parser = new SessionParser(); List <HttpRequestData> httpRequests = null; Assert.IsNotNull(httpRequests); foreach (var req in httpRequests) { var tester = new StressTester(); var res = tester.CheckSite(req); Assert.IsNotNull(res, "No Result Returned."); Assert.IsNotNull(res.IsError, res.ErrorMessage); Console.WriteLine(res.StatusCode + " " + res.Url + " " + res.TimeTakenMs.ToString("n0") + " " + res.ErrorMessage); //Console.WriteLine(res.ResponseContent); } }
public void Basic3SiteValidatorTest() { var requestList = new List <HttpRequestData>() { // should work because it's local loopback new HttpRequestData { Url = "http://rasxps/WebLog" }, new HttpRequestData { Url = "http://rasxps/WebLog/posts" } }; var stress = new StressTester(); var validator = new SiteValidator(stress); bool result = validator.CheckAllServers(requestList); Console.WriteLine(validator.ErrorMessage); Assert.IsTrue(result); }
public void MemoryRequestWriterBasic() { var stressTester = new StressTester(); var writer = new RequestWriter(stressTester); int requestCount = 10_000_001; for (int i = 0; i < requestCount; i++) { var req = new HttpRequestData { TimeTakenMs = 10, Timestamp = DateTime.Now, Url = "http://localhost" }; writer.Write(req); } Assert.IsTrue(writer.RequestsProcessed == requestCount); Assert.IsTrue(writer.GetResults().Count == requestCount); }
public void ResultsReportTimeTakenTest() { var time = DateTime.UtcNow; var requests = new List <HttpRequestData>() { new HttpRequestData() { Timestamp = time, TimeTakenMs = 10 }, new HttpRequestData() { Timestamp = time.AddMilliseconds(20), TimeTakenMs = 15 }, new HttpRequestData { Timestamp = time.AddMilliseconds(220), TimeTakenMs = 15 }, new HttpRequestData { Timestamp = time.AddMilliseconds(1020), TimeTakenMs = 20 }, new HttpRequestData { Timestamp = time.AddMilliseconds(1050), TimeTakenMs = 20 }, new HttpRequestData { Timestamp = time.AddMilliseconds(1200), TimeTakenMs = 20 }, new HttpRequestData { Timestamp = time.AddMilliseconds(3020), TimeTakenMs = 20 }, new HttpRequestData { Timestamp = time.AddMilliseconds(3050), TimeTakenMs = 20 }, new HttpRequestData { Timestamp = time.AddMilliseconds(3200), TimeTakenMs = 20 }, new HttpRequestData { Timestamp = time.AddMilliseconds(3500), TimeTakenMs = 50 } }; var timeTakenMs = 30000; var stressTester = new StressTester(); var writer = new RequestWriter(stressTester); writer.SetResults(requests); var parser = new ResultsParser(); var results = parser.GetResultReport(writer, timeTakenMs, 10); Assert.AreEqual(timeTakenMs / 1000, results.TestResult.TimeTakenSecs); Console.WriteLine(JsonSerializationUtils.Serialize(results, false, true)); }
static void Main(string[] args) { var origColor = Console.ForegroundColor; var options = new CommandLineOptions(); if (!CommandLine.Parser.Default.ParseArguments(args, options)) { return; } Console.ForegroundColor = ConsoleColor.White; // If SessionFile is a Url assign to Url so we run on a single URL if (!string.IsNullOrEmpty(options.SessionFile) && (options.SessionFile.StartsWith("http://") || options.SessionFile.StartsWith("https://"))) { options.Url = options.SessionFile; options.SessionFile = null; } var stressTester = new StressTester(); List <HttpRequestData> requests; if (!string.IsNullOrEmpty(options.SessionFile)) { requests = stressTester.ParseSessionFile(options.SessionFile); } else { if (string.IsNullOrEmpty(options.Url)) { Console.WriteLine(options.GetUsage()); Console.ForegroundColor = origColor; return; } requests = new List <HttpRequestData>(); requests.Add(new HttpRequestData { Url = options.Url }); } if (options.Silent != 0 && options.Silent != 1) { Console.WriteLine("West Wind WebSurge v" + GetVersion()); Console.WriteLine("------------------------"); } int time = options.Time; int threads = options.Threads; stressTester.Options.DelayTimeMs = options.DelayTimeMs; stressTester.Options.RandomizeRequests = options.RandomizeRequests; stressTester.Options.WarmupSeconds = options.WarmupSeconds; if (options.Silent != 0 && options.Silent != 1) { stressTester.RequestProcessed += stressTester_RequestProcessed; } if (options.Silent != 0 && options.Silent != 2) { stressTester.Progress += stressTester_Progress; } Console.ForegroundColor = ConsoleColor.Green; var results = stressTester.CheckAllSites(requests, threads, time); if (results == null) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Error: " + stressTester.ErrorMessage); Console.ForegroundColor = origColor; return; } Console.ForegroundColor = ConsoleColor.White; if (options.Json) { var result = stressTester.ResultsParser.GetResultReport(stressTester.Results, stressTester.TimeTakenForLastRunMs, stressTester.ThreadsUsed); string json = JsonSerializationUtils.Serialize(result, formatJsonOutput: true); Console.WriteLine(json); Console.ForegroundColor = origColor; if (options.OutputFile != null) { File.WriteAllText(options.OutputFile, json); } return; } string resultText = stressTester.ParseResults(results); if (options.Silent != 0) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(); Console.WriteLine("Summary:"); Console.WriteLine("--------"); Console.ForegroundColor = ConsoleColor.White; } if (options.SessionFile != null) { Console.WriteLine("Session: " + options.SessionFile); } else { Console.WriteLine("Url: " + options.Url); } Console.WriteLine(); Console.WriteLine(resultText); if (options.OutputFile != null) { File.WriteAllText(options.OutputFile, resultText); } Console.ForegroundColor = origColor; }
static void Main(string[] args) { var origColor = Console.ForegroundColor; var options = new CommandLineOptions(); if (!CommandLine.Parser.Default.ParseArguments(args, options)) return; Console.ForegroundColor = ConsoleColor.White; // If SessionFile is a Url assign to Url so we run on a single URL if (!string.IsNullOrEmpty(options.SessionFile) && (options.SessionFile.StartsWith("http://") || options.SessionFile.StartsWith("https://"))) { options.Url = options.SessionFile; options.SessionFile = null; } var stressTester = new StressTester(); List<HttpRequestData> requests; if (!string.IsNullOrEmpty(options.SessionFile)) requests = stressTester.ParseSessionFile(options.SessionFile); else { if (string.IsNullOrEmpty(options.Url)) { Console.WriteLine(options.GetUsage()); Console.ForegroundColor = origColor; return; } requests = new List<HttpRequestData>(); requests.Add(new HttpRequestData { Url =options.Url }); } if (options.Silent != 0 && options.Silent != 1) { Console.WriteLine("West Wind WebSurge v" + GetVersion()); Console.WriteLine("------------------------"); } int time = options.Time; int threads = options.Threads; stressTester.Options.DelayTimeMs = options.DelayTimeMs; stressTester.Options.RandomizeRequests = options.RandomizeRequests; stressTester.Options.WarmupSeconds = options.WarmupSeconds; if (options.Silent != 0 && options.Silent != 1) stressTester.RequestProcessed += stressTester_RequestProcessed; if (options.Silent != 0 && options.Silent != 2) stressTester.Progress += stressTester_Progress; Console.ForegroundColor = ConsoleColor.Green; var results = stressTester.CheckAllSites(requests,threads,time); if (results == null) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Error: " + stressTester.ErrorMessage); Console.ForegroundColor = origColor; return; } Console.ForegroundColor = ConsoleColor.White; if (options.Json) { var result = stressTester.ResultsParser.GetResultReport(stressTester.Results, stressTester.TimeTakenForLastRunMs, stressTester.ThreadsUsed); string json = JsonSerializationUtils.Serialize(result, formatJsonOutput: true); Console.WriteLine(json); Console.ForegroundColor = origColor; return; } string resultText = stressTester.ParseResults(results); if (options.Silent != 0) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(); Console.WriteLine("Summary:"); Console.WriteLine("--------"); Console.ForegroundColor = ConsoleColor.White; } if (options.SessionFile != null) Console.WriteLine("Session: " + options.SessionFile); else Console.WriteLine("Url: " + options.Url); Console.WriteLine(); Console.WriteLine(resultText); Console.ForegroundColor = origColor; }