public async Task GenerateBombardierTestWithOptionsBasicAuthTest_Successfull() { var content = File.ReadAllText("Assets/GetAllBikes.json"); var httpRequest = JsonConvert.DeserializeObject <IEnumerable <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest, options => { options.AddBasicAuthentication("user", "pass"); options.BombardierConcurrentUsers = 1; options.BombardierDuration = 1; options.BombardierTimeout = 30; options.BombardierUseHttp2 = true; options.BombardierRateLimit = 20; }); var bombardierTests = await bombardierTestsGenerator.Generate(); var authHeader = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes("user:pass")); Assert.NotNull(bombardierTests); Assert.Single(bombardierTests); Assert.Contains($" -m GET https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1 -c 1 -H \"Authorization: Basic {authHeader}\" --http2 --timeout=30s --duration=1s --rate=20", bombardierTests.FirstOrDefault().Command); Assert.Equal(HttpMethod.Get, bombardierTests.FirstOrDefault().Method); Assert.Equal("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1", bombardierTests.FirstOrDefault().Url.ToString()); }
public async Task GenerateBombardierTestWithOptionsVariation2Test_Successfull() { var content = File.ReadAllText("Assets/GetAllBikes.json"); var httpRequest = JsonConvert.DeserializeObject <IEnumerable <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest, options => { options.BombardierConcurrentUsers = 1; options.BombardierDuration = 10; options.BombardierTimeout = 30; options.BombardierUseHttp2 = true; options.BombardierInsecure = true; options.AddReplacementValues(new Dictionary <string, object> { { "id", 1000 }, { "name", "MJ" } }); }); var bombardierTests = await bombardierTestsGenerator.Generate(); Assert.NotNull(bombardierTests); Assert.Single(bombardierTests); Assert.Contains(" -m GET https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1 -c 1 --http2 --timeout=30s --duration=10s --insecure", bombardierTests.FirstOrDefault().Command); Assert.Equal(HttpMethod.Get, bombardierTests.FirstOrDefault().Method); Assert.Equal("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1", bombardierTests.FirstOrDefault().Url.ToString()); }
public async Task BombardierPostTestWithBodyAndOptionsTest_Successfull() { var content = File.ReadAllText("Assets/AddBike.json"); var httpRequest = JsonConvert.DeserializeObject <IList <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest, options => { options.BombardierConcurrentUsers = 1; options.BombardierDuration = 1; options.BombardierTimeout = 30; options.BombardierUseHttp2 = true; options.AddReplacementValues(new Dictionary <string, object> { { "Bicycle", @"{""id"":66,""name"":""my bike"",""brand"":""cannondale"",""BicycleType"":1}" } }); }); var bombardierTests = await bombardierTestsGenerator.Generate(); //Run Bombardier Tests var bombardierTestsRunner = new BombardierTestsRunner(bombardierTests.ToList(), options => { options.ObfuscateAuthenticationHeader = true; }); var bombardierResults = await bombardierTestsRunner.Run(); _logger.LogInformation(JsonConvert.SerializeObject(bombardierResults, Formatting.Indented)); Assert.NotNull(bombardierResults); Assert.Single(bombardierResults); Assert.Equal(@"-m POST https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1 -c 1 -H ""Content-Type: application/json"" -b ""{""id"":66,""name"":""my bike"",""brand"":""cannondale"",""BicycleType"":1}"" --http2 --timeout=30s --duration=1s", bombardierResults.FirstOrDefault().Command); var asserter = new BombardierTestAsserter(bombardierResults.FirstOrDefault()); var assertResults = asserter .NumberOf1xxResponses(x => x == 0) .NumberOf2xxResponses(x => x >= 0) .NumberOf3xxResponses(x => x == 0) .NumberOf4xxResponses(x => x == 0) .NumberOf5xxResponses(x => x == 0) .AverageLatency(x => x >= 0) .AverageRequestsPerSecond(x => x >= 0) .MaximumLatency(x => x >= 0) .MaximumRequestsPerSecond(x => x >= 0) .AssertAll(); foreach (var result in assertResults) { Assert.True(result.IsTrue, result.Message); } }
public async Task GenerateBombardierTestGeneratorCreationTest_Success() { var content = File.ReadAllText("Assets/GetAllBikes.json"); var httpRequest = JsonConvert.DeserializeObject <IEnumerable <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest); var bombardierTests = await bombardierTestsGenerator.Generate(); Assert.NotNull(bombardierTests); Assert.Single(bombardierTests); Assert.Contains(" -m GET https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1 -c 3 --http2 --timeout=30s --duration=10s", bombardierTests.FirstOrDefault().Command); Assert.Equal(HttpMethod.Get, bombardierTests.FirstOrDefault().Method); Assert.Equal("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1", bombardierTests.FirstOrDefault().Url.ToString()); }
public async Task GenerateBombardierTestGetSupportNoIdTest_Successfull() { var content = File.ReadAllText("Assets/Support.json"); var httpRequest = JsonConvert.DeserializeObject <IEnumerable <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest); var bombardierTests = await bombardierTestsGenerator.Generate(); Assert.NotNull(bombardierTests); Assert.Single(bombardierTests); Assert.Contains($@" -m GET https://petstore3.swagger.io/sales/support/v2/SupportTicket?CaseId={{CaseId}} -c 3 --http2 --timeout=30s --duration=10s", bombardierTests.FirstOrDefault().Command); Assert.Equal(HttpMethod.Get, bombardierTests.FirstOrDefault().Method); Assert.Equal("https://petstore3.swagger.io/sales/support/v2/SupportTicket?CaseId={CaseId}", bombardierTests.FirstOrDefault().Url.ToString()); }
public async Task GenerateBombardierTestRateLimitNumberOfRequestTest_Fails() { var content = File.ReadAllText("Assets/GetAllBikes.json"); var httpRequest = JsonConvert.DeserializeObject <IEnumerable <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest, options => { options.BombardierConcurrentUsers = 1; options.BombardierDuration = 1; options.BombardierTimeout = 30; options.BombardierNumberOfTotalRequests = 100; options.BombardierRateLimit = 10; }); await Assert.ThrowsAsync <QAToolKitBombardierException>(async() => await bombardierTestsGenerator.Generate()); }
public async Task BombardierPostTestWithOptionsTest_Successfull() { var content = File.ReadAllText("Assets/AddBike.json"); var httpRequest = JsonConvert.DeserializeObject <IList <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest, options => { options.BombardierConcurrentUsers = 1; options.BombardierDuration = 1; options.BombardierTimeout = 30; options.BombardierUseHttp2 = true; options.BombardierNumberOfTotalRequests = 1; options.AddReplacementValues(new Dictionary <string, object> { { "id", 1241451 }, { "name", "MJ" } }); }); var bombardierTests = await bombardierTestsGenerator.Generate(); //Run Bombardier Tests var bombardierTestsRunner = new BombardierTestsRunner(bombardierTests.ToList(), options => { options.ObfuscateAuthenticationHeader = true; }); var bombardierResults = await bombardierTestsRunner.Run(); _logger.LogInformation(JsonConvert.SerializeObject(bombardierResults, Formatting.Indented)); Assert.NotNull(bombardierResults); Assert.Single(bombardierResults); Assert.True(bombardierResults.FirstOrDefault().Counter1xx == 0); Assert.True(bombardierResults.FirstOrDefault().Counter2xx > 0); Assert.True(bombardierResults.FirstOrDefault().Counter3xx == 0); Assert.True(bombardierResults.FirstOrDefault().Counter4xx == 0); Assert.True(bombardierResults.FirstOrDefault().Counter5xx == 0); Assert.True(bombardierResults.FirstOrDefault().AverageLatency >= 0); Assert.True(bombardierResults.FirstOrDefault().MaxLatency >= 0); Assert.True(bombardierResults.FirstOrDefault().StdevLatency >= 0); Assert.True(bombardierResults.FirstOrDefault().AverageRequestsPerSecond >= 0); Assert.True(bombardierResults.FirstOrDefault().MaxRequestsPerSecond >= 0); Assert.True(bombardierResults.FirstOrDefault().StdevRequestsPerSecond >= 0); Assert.True(bombardierResults.FirstOrDefault().TestStart.AddMinutes(60) > DateTime.Now); Assert.True(bombardierResults.FirstOrDefault().TestStop.AddMinutes(60) > DateTime.Now); Assert.True(bombardierResults.FirstOrDefault().TestStop.Subtract(bombardierResults.FirstOrDefault().TestStart).TotalSeconds == bombardierResults.FirstOrDefault().Duration); }
public async Task BombardierPostTestWithOptionsTest_Successfull() { var content = File.ReadAllText("Assets/AddBike.json"); var httpRequest = JsonConvert.DeserializeObject <IList <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest, options => { options.BombardierConcurrentUsers = 1; options.BombardierDuration = 1; options.BombardierTimeout = 30; options.BombardierUseHttp2 = true; options.BombardierNumberOfTotalRequests = 1; options.AddReplacementValues(new Dictionary <string, object> { { "id", 1241451 }, { "name", "MJ" } }); }); var bombardierTests = await bombardierTestsGenerator.Generate(); //Run Bombardier Tests var bombardierTestsRunner = new BombardierTestsRunner(bombardierTests.ToList(), options => { options.ObfuscateAuthenticationHeader = true; }); var bombardierResults = await bombardierTestsRunner.Run(); var asserter = new BombardierTestAsserter(bombardierResults.FirstOrDefault()); var assertResults = asserter .NumberOf1xxResponses(x => x == 0) .NumberOf2xxResponses(x => x >= 0) .NumberOf3xxResponses(x => x == 0) .NumberOf4xxResponses(x => x == 0) .NumberOf5xxResponses(x => x == 0) .AverageLatency(x => x >= 0) .AverageRequestsPerSecond(x => x >= 0) .MaximumLatency(x => x >= 0) .MaximumRequestsPerSecond(x => x >= 0) .AssertAll(); foreach (var result in assertResults) { Assert.True(result.IsTrue, result.Message); } }
public async Task BombardierPostTestWithBodyAndOptionsTest_Successfull() { var content = File.ReadAllText("Assets/AddBike.json"); var httpRequest = JsonConvert.DeserializeObject <IList <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest, options => { options.BombardierConcurrentUsers = 1; options.BombardierDuration = 1; options.BombardierTimeout = 30; options.BombardierUseHttp2 = true; options.AddReplacementValues(new Dictionary <string, object> { { "Bicycle", @"{""id"":66,""name"":""my bike"",""brand"":""cannondale"",""BicycleType"":1}" } }); }); var bombardierTests = await bombardierTestsGenerator.Generate(); //Run Bombardier Tests var bombardierTestsRunner = new BombardierTestsRunner(bombardierTests.ToList(), options => { options.ObfuscateAuthenticationHeader = true; }); var bombardierResults = await bombardierTestsRunner.Run(); _logger.LogInformation(JsonConvert.SerializeObject(bombardierResults, Formatting.Indented)); Assert.NotNull(bombardierResults); Assert.Single(bombardierResults); Assert.Equal(@"-m POST https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1 -c 1 -H ""Content-Type: application/json"" -b ""{""id"":66,""name"":""my bike"",""brand"":""cannondale"",""BicycleType"":1}"" --http2 --timeout=30s --duration=1s", bombardierResults.FirstOrDefault().Command); Assert.True(bombardierResults.FirstOrDefault().Counter1xx == 0); Assert.True(bombardierResults.FirstOrDefault().Counter2xx > 0); Assert.True(bombardierResults.FirstOrDefault().Counter3xx == 0); Assert.True(bombardierResults.FirstOrDefault().Counter4xx == 0); Assert.True(bombardierResults.FirstOrDefault().Counter5xx == 0); Assert.True(bombardierResults.FirstOrDefault().AverageLatency >= 0); Assert.True(bombardierResults.FirstOrDefault().MaxLatency >= 0); Assert.True(bombardierResults.FirstOrDefault().StdevLatency >= 0); Assert.True(bombardierResults.FirstOrDefault().AverageRequestsPerSecond >= 0); Assert.True(bombardierResults.FirstOrDefault().MaxRequestsPerSecond >= 0); Assert.True(bombardierResults.FirstOrDefault().StdevRequestsPerSecond >= 0); Assert.True(bombardierResults.FirstOrDefault().TestStart.AddMinutes(60) > DateTime.Now); Assert.True(bombardierResults.FirstOrDefault().TestStop.AddMinutes(60) > DateTime.Now); Assert.True(bombardierResults.FirstOrDefault().TestStop.Subtract(bombardierResults.FirstOrDefault().TestStart).TotalSeconds == bombardierResults.FirstOrDefault().Duration); }
public async Task BombardierGetTestWithOptionsTest_Successfull() { var content = File.ReadAllText("Assets/GetAllBikes.json"); var httpRequest = JsonConvert.DeserializeObject <IEnumerable <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest, options => { options.BombardierConcurrentUsers = 1; options.BombardierDuration = 1; options.BombardierTimeout = 30; options.BombardierUseHttp2 = true; }); var bombardierTests = await bombardierTestsGenerator.Generate(); //Run Bombardier Tests var bombardierTestsRunner = new BombardierTestsRunner(bombardierTests.ToList(), options => { options.ObfuscateAuthenticationHeader = true; }); var bombardierResults = await bombardierTestsRunner.Run(); _logger.LogInformation(JsonConvert.SerializeObject(bombardierResults, Formatting.Indented)); var asserter = new BombardierTestAsserter(bombardierResults.FirstOrDefault()); var assertResults = asserter .NumberOf1xxResponses(x => x == 0) .NumberOf2xxResponses(x => x >= 0) .NumberOf3xxResponses(x => x == 0) .NumberOf4xxResponses(x => x == 0) .NumberOf5xxResponses(x => x == 0) .AverageLatency(x => x >= 0) .AverageRequestsPerSecond((x) => x >= 0) .MaximumLatency(x => x >= 0) .MaximumRequestsPerSecond(x => x >= 0) .AssertAll(); foreach (var result in assertResults) { Assert.True(result.IsTrue, result.Message); } }
public async Task GenerateBombardierTestPostNewBikeCaseInsensitiveTest_Successfull() { var content = File.ReadAllText("Assets/AddBike.json"); var httpRequest = JsonConvert.DeserializeObject <IEnumerable <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest, options => { options.AddReplacementValues(new Dictionary <string, object> { { "bicycle", @"{""id"":66,""name"":""my bike"",""brand"":""cannondale"",""BicycleType"":1}" } }); }); var bombardierTests = await bombardierTestsGenerator.Generate(); Assert.NotNull(bombardierTests); Assert.Single(bombardierTests); Assert.Contains($@" -m POST https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1 -c 3 -H ""Content-Type: application/json"" -b ""{{\""id\"":66,\""name\"":\""my bike\"",\""brand\"":\""cannondale\"",\""BicycleType\"":1}}"" --http2 --timeout=30s --duration=10s", bombardierTests.FirstOrDefault().Command); Assert.Equal(HttpMethod.Post, bombardierTests.FirstOrDefault().Method); Assert.Equal("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1", bombardierTests.FirstOrDefault().Url.ToString()); }
public async Task GenerateBombardierTestAddNewBikeInsecureTest_Successfull() { var content = File.ReadAllText("Assets/AddBike.json"); var httpRequest = JsonConvert.DeserializeObject <IEnumerable <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest, options => { options.BombardierNumberOfTotalRequests = 10; options.BombardierInsecure = true; options.BombardierUseHttp2 = false; }); var bombardierTests = await bombardierTestsGenerator.Generate(); Assert.NotNull(bombardierTests); Assert.Single(bombardierTests); Assert.Contains($@" -m POST https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1 -c 3 -H ""Content-Type: application/json"" -b ""{{\""id\"":1,\""name\"":\""Foil\"",\""brand\"":\""Cannondale\""}}"" --http1 --timeout=30s --duration=10s --insecure --requests=10", bombardierTests.FirstOrDefault().Command); Assert.Equal(HttpMethod.Post, bombardierTests.FirstOrDefault().Method); Assert.Equal("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1", bombardierTests.FirstOrDefault().Url.ToString()); }
public async Task GenerateBombardierTestGetAllBikesInsecureTest_Successfull() { var content = File.ReadAllText("Assets/GetAllBikes.json"); var httpRequest = JsonConvert.DeserializeObject <IEnumerable <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest, options => { options.BombardierNumberOfTotalRequests = 10; options.BombardierInsecure = true; options.BombardierUseHttp2 = false; }); var bombardierTests = await bombardierTestsGenerator.Generate(); Assert.NotNull(bombardierTests); Assert.Single(bombardierTests); Assert.Contains($@" -m GET https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1 -c 3 --http1 --timeout=30s --duration=10s --insecure --requests=10", bombardierTests.FirstOrDefault().Command); Assert.Equal(HttpMethod.Get, bombardierTests.FirstOrDefault().Method); Assert.Equal("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1", bombardierTests.FirstOrDefault().Url.ToString()); }
public async Task GenerateBombardierTestDeleteBikeTest_Successfull() { var content = File.ReadAllText("Assets/DeleteBike.json"); var httpRequest = JsonConvert.DeserializeObject <IEnumerable <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest, options => { options.AddReplacementValues(new Dictionary <string, object> { { "id", 1 } }); }); var bombardierTests = await bombardierTestsGenerator.Generate(); Assert.NotNull(bombardierTests); Assert.Single(bombardierTests); Assert.Contains($@" -m DELETE https://qatoolkitapi.azurewebsites.net/api/bicycles/1?api-version=1 -c 3 --http2 --timeout=30s --duration=10s", bombardierTests.FirstOrDefault().Command); Assert.Equal(HttpMethod.Delete, bombardierTests.FirstOrDefault().Method); Assert.Equal("https://qatoolkitapi.azurewebsites.net/api/bicycles/1?api-version=1", bombardierTests.FirstOrDefault().Url.ToString()); }
private BombardierTest CreateBombardierTest(int concurrentUsersCount, int totalRequestsCount) { var testsGenerator = new BombardierTestsGenerator( CreateRequest(), options => { options.BombardierConcurrentUsers = concurrentUsersCount; options.BombardierNumberOfTotalRequests = totalRequestsCount; options.BombardierInsecure = true; } ); var bombardierTest = testsGenerator.Generate().Result.Single(); if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { bombardierTest.Command = bombardierTest.Command.Replace("&", "^&"); //screening HTTP-Query arg delimiter } PrintProgress(bombardierTest.Command); return(bombardierTest); }
public async Task GenerateBombardierTestGetBikesExampleWithFilterTest_Successfull() { var content = File.ReadAllText("Assets/GetAllBikes.json"); var httpRequest = JsonConvert.DeserializeObject <IEnumerable <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest, options => { options.AddReplacementValues(new Dictionary <string, object> { { "api-version", "2" }, { "bicycleType", "1" } }); }); var bombardierTests = await bombardierTestsGenerator.Generate(); Assert.NotNull(bombardierTests); Assert.Single(bombardierTests); Assert.Contains($@" -m GET https://qatoolkitapi.azurewebsites.net/api/bicycles?bicycleType=1&api-version=2 -c 3 --http2 --timeout=30s --duration=10s", bombardierTests.FirstOrDefault().Command); Assert.Equal(HttpMethod.Get, bombardierTests.FirstOrDefault().Method); Assert.Equal("https://qatoolkitapi.azurewebsites.net/api/bicycles?bicycleType=1&api-version=2", bombardierTests.FirstOrDefault().Url.ToString()); }
public async Task GenerateBombardierTestExclusiveNumberOfRequest100Test_Successfull() { var content = File.ReadAllText("Assets/GetAllBikes.json"); var httpRequest = JsonConvert.DeserializeObject <IEnumerable <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest, options => { options.BombardierConcurrentUsers = 1; options.BombardierDuration = 1; options.BombardierTimeout = 30; options.BombardierNumberOfTotalRequests = 100; }); var bombardierTests = await bombardierTestsGenerator.Generate(); _logger.LogInformation(JsonConvert.SerializeObject(bombardierTests, Formatting.Indented)); Assert.NotNull(bombardierTests); Assert.Single(bombardierTests); Assert.Contains(" -m GET https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1 -c 1 --http2 --timeout=30s --duration=1s --requests=100", bombardierTests.FirstOrDefault().Command); Assert.Equal(HttpMethod.Get, bombardierTests.FirstOrDefault().Method); Assert.Equal("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1", bombardierTests.FirstOrDefault().Url.ToString()); }
public async Task GenerateBombardierTestWithOptionsOAuth2Test_Successfull() { var content = File.ReadAllText("Assets/GetAllBikes.json"); var httpRequest = JsonConvert.DeserializeObject <IEnumerable <HttpRequest> >(content); var bombardierTestsGenerator = new BombardierTestsGenerator(httpRequest, options => { options.AddOAuth2Token("1234567890", AuthenticationType.Customer); options.BombardierConcurrentUsers = 1; options.BombardierDuration = 1; options.BombardierTimeout = 30; options.BombardierUseHttp2 = true; options.BombardierNumberOfTotalRequests = 22; }); var bombardierTests = await bombardierTestsGenerator.Generate(); Assert.NotNull(bombardierTests); Assert.Single(bombardierTests); Assert.Contains($" -m GET https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1 -c 1 -H \"Authorization: Bearer 1234567890\" --http2 --timeout=30s --duration=1s --requests=22", bombardierTests.FirstOrDefault().Command); Assert.Equal(HttpMethod.Get, bombardierTests.FirstOrDefault().Method); Assert.Equal("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1", bombardierTests.FirstOrDefault().Url.ToString()); }