Skip to content

Commit a656f04

Browse files
committed
bombardier tests implemented
1 parent 8b141a3 commit a656f04

File tree

10 files changed

+171
-14
lines changed

10 files changed

+171
-14
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"BasePath":"https://petstore3.swagger.io/api/v3","Path":"/pet/1","OperationId":"getPetById","Method":{"Method":"GET"},"Summary":"Find pet by ID","Description":"Returns a single pet","Tags":["pet"],"Parameters":[{"Name":"petId","Type":"integer","Nullable":false,"Value":"1"}],"RequestBodies":[],"Responses":[{"StatusCode":"200","Properties":[{"Name":"id","Description":null,"Type":"integer","Value":null},{"Name":"name","Description":null,"Type":"string","Value":null},{"Name":"category","Description":null,"Type":"object","Value":null},{"Name":"photoUrls","Description":null,"Type":"array","Value":null},{"Name":"tags","Description":null,"Type":"array","Value":null},{"Name":"status","Description":"pet status in the store","Type":"string","Value":null}]},{"StatusCode":"400","Properties":[]},{"StatusCode":"404","Properties":[]}],"TestTypes":[],"AuthenticationTypes":[]}]
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using QAToolKit.Core.Models;
2+
using System.Linq;
3+
using Xunit;
4+
5+
namespace QAToolKit.Engine.Bombardier.Test
6+
{
7+
public class BombardierGeneratorOptionsTests
8+
{
9+
[Fact]
10+
public void BombardierGeneratorOptionsAddApiKeyTest_Successful()
11+
{
12+
var options = new BombardierGeneratorOptions();
13+
options.AddApiKey("12345");
14+
15+
Assert.Equal("12345", options.ApiKey);
16+
}
17+
18+
[Fact]
19+
public void BombardierGeneratorOptionsAddBasicAuthenticationTest_Successful()
20+
{
21+
var options = new BombardierGeneratorOptions();
22+
options.AddBasicAuthentication("user", "password");
23+
24+
Assert.Equal("user", options.UserName);
25+
Assert.Equal("password", options.Password);
26+
}
27+
28+
[Fact]
29+
public void BombardierGeneratorOptionsAddOAuth2TokenTest_Successful()
30+
{
31+
var options = new BombardierGeneratorOptions();
32+
options.AddOAuth2Token("token", AuthenticationType.Administrator);
33+
34+
Assert.Equal(AuthenticationType.Administrator, options.AccessTokens.FirstOrDefault(t => t.Key == AuthenticationType.Administrator).Key);
35+
Assert.Equal("token", options.AccessTokens.FirstOrDefault(t => t.Key == AuthenticationType.Administrator).Value);
36+
}
37+
38+
[Fact]
39+
public void BombardierGeneratorOptionsTest_Successful()
40+
{
41+
var options = new BombardierGeneratorOptions
42+
{
43+
BombardierConcurrentUsers = 1,
44+
BombardierDuration = 12,
45+
BombardierRateLimit = 3,
46+
BombardierTimeout = 30,
47+
BombardierUseHttp2 = true
48+
};
49+
50+
Assert.Equal(1, options.BombardierConcurrentUsers);
51+
Assert.Equal(12, options.BombardierDuration);
52+
Assert.Equal(3, options.BombardierRateLimit);
53+
Assert.Equal(30, options.BombardierTimeout);
54+
Assert.True(options.BombardierUseHttp2);
55+
Assert.False(options.BombardierInsecure);
56+
}
57+
}
58+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using Xunit;
2+
3+
namespace QAToolKit.Engine.Bombardier.Test
4+
{
5+
public class BombardierOutputOptionsTests
6+
{
7+
[Fact]
8+
public void BombardierOutputOptionsTrueTest_Successful()
9+
{
10+
var options = new BombardierOutputOptions();
11+
options.ObfuscateAuthenticationHeader = true;
12+
13+
Assert.True(options.ObfuscateAuthenticationHeader);
14+
}
15+
16+
[Fact]
17+
public void BombardierOutputOptionsFalseTest_Successful()
18+
{
19+
var options = new BombardierOutputOptions();
20+
options.ObfuscateAuthenticationHeader = false;
21+
22+
Assert.False(options.ObfuscateAuthenticationHeader);
23+
}
24+
}
25+
}

src/QAToolKit.Engine.Bombardier.Test/BombardierTestsGeneratorTests.cs

Lines changed: 65 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
using Newtonsoft.Json;
22
using QAToolKit.Core.Models;
3+
using System;
34
using System.Collections.Generic;
45
using System.IO;
56
using System.Linq;
7+
using System.Net.Http;
68
using System.Threading.Tasks;
79
using Xunit;
810

911
namespace QAToolKit.Engine.Bombardier.Test
1012
{
1113
public class BombardierTestsGeneratorTests
1214
{
13-
/* [Fact]
14-
public async Task BombardierTestWithoutOptionsTest_Successfull()
15+
[Fact]
16+
public async Task GenerateBombardierTestWithOptionsTest_Successfull()
1517
{
1618

1719
var bombardierTestsGenerator = new BombardierTestsGenerator(options =>
@@ -22,7 +24,56 @@ public async Task BombardierTestWithoutOptionsTest_Successfull()
2224
options.BombardierUseHttp2 = true;
2325
});
2426

25-
var content = File.ReadAllText("d:\\getPetById.json");
27+
var content = File.ReadAllText("Assets/getPetById.json");
28+
var httpRequest = JsonConvert.DeserializeObject<IList<HttpTestRequest>>(content);
29+
30+
var bombardierTests = await bombardierTestsGenerator.Generate(httpRequest);
31+
32+
Assert.NotNull(bombardierTests);
33+
Assert.Single(bombardierTests);
34+
Assert.Contains(" -m GET https://petstore3.swagger.io/api/v3/pet/1?petId=1 -c 1 --http2 --timeout=30s --duration=1s", bombardierTests.FirstOrDefault().Command);
35+
Assert.Equal(HttpMethod.Get, bombardierTests.FirstOrDefault().Method);
36+
Assert.Equal("/pet/1", bombardierTests.FirstOrDefault().Url.ToString());
37+
}
38+
39+
[Fact]
40+
public async Task GenerateBombardierTestWithOptionsAlternativeTest_Successfull()
41+
{
42+
43+
var bombardierTestsGenerator = new BombardierTestsGenerator(options =>
44+
{
45+
options.BombardierConcurrentUsers = 1;
46+
options.BombardierDuration = 10;
47+
options.BombardierTimeout = 30;
48+
options.BombardierUseHttp2 = true;
49+
options.BombardierInsecure = true;
50+
});
51+
52+
var content = File.ReadAllText("Assets/getPetById.json");
53+
var httpRequest = JsonConvert.DeserializeObject<IList<HttpTestRequest>>(content);
54+
55+
var bombardierTests = await bombardierTestsGenerator.Generate(httpRequest);
56+
57+
Assert.NotNull(bombardierTests);
58+
Assert.Single(bombardierTests);
59+
Assert.Contains(" -m GET https://petstore3.swagger.io/api/v3/pet/1?petId=1 -c 1 --http2 --timeout=30s --duration=10s --insecure", bombardierTests.FirstOrDefault().Command);
60+
Assert.Equal(HttpMethod.Get, bombardierTests.FirstOrDefault().Method);
61+
Assert.Equal("/pet/1", bombardierTests.FirstOrDefault().Url.ToString());
62+
}
63+
64+
[Fact]
65+
public async Task BombardierTestWithOptionsTest_Successfull()
66+
{
67+
68+
var bombardierTestsGenerator = new BombardierTestsGenerator(options =>
69+
{
70+
options.BombardierConcurrentUsers = 1;
71+
options.BombardierDuration = 1;
72+
options.BombardierTimeout = 30;
73+
options.BombardierUseHttp2 = true;
74+
});
75+
76+
var content = File.ReadAllText("Assets/getPetById.json");
2677
var httpRequest = JsonConvert.DeserializeObject<IList<HttpTestRequest>>(content);
2778

2879
var bombardierTests = await bombardierTestsGenerator.Generate(httpRequest);
@@ -35,6 +86,16 @@ public async Task BombardierTestWithoutOptionsTest_Successfull()
3586
var bombardierResults = await bombardierTestsRunner.Run();
3687

3788
Assert.NotNull(bombardierResults);
38-
}*/
89+
Assert.Single(bombardierResults);
90+
Assert.True(bombardierResults.FirstOrDefault().AverageLatency > 0);
91+
Assert.True(bombardierResults.FirstOrDefault().MaxLatency > 0);
92+
Assert.True(bombardierResults.FirstOrDefault().StdevLatency > 0);
93+
Assert.True(bombardierResults.FirstOrDefault().AverageRequestsPerSecond > 0);
94+
Assert.True(bombardierResults.FirstOrDefault().MaxRequestsPerSecond > 0);
95+
Assert.True(bombardierResults.FirstOrDefault().StdevRequestsPerSecond > 0);
96+
Assert.True(bombardierResults.FirstOrDefault().TestStart.AddMinutes(60) > DateTime.Now);
97+
Assert.True(bombardierResults.FirstOrDefault().TestStop.AddMinutes(60) > DateTime.Now);
98+
Assert.True(bombardierResults.FirstOrDefault().TestStop.Subtract(bombardierResults.FirstOrDefault().TestStart).TotalSeconds == bombardierResults.FirstOrDefault().Duration);
99+
}
39100
}
40101
}

src/QAToolKit.Engine.Bombardier.Test/QAToolKit.Engine.Bombardier.Test.csproj

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<TargetFramework>netcoreapp3.1</TargetFramework>
@@ -23,4 +23,10 @@
2323
<ProjectReference Include="..\QAToolKit.Engine.Bombardier\QAToolKit.Engine.Bombardier.csproj" />
2424
</ItemGroup>
2525

26+
<ItemGroup>
27+
<None Update="Assets\getPetById.json">
28+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
29+
</None>
30+
</ItemGroup>
31+
2632
</Project>

src/QAToolKit.Engine.Bombardier/BombardierGeneratorOptions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using QAToolKit.Core.Models;
22
using System.Collections.Generic;
3+
using System.Runtime.CompilerServices;
34

5+
[assembly: InternalsVisibleTo("QAToolKit.Engine.Bombardier.Test")]
46
namespace QAToolKit.Engine.Bombardier
57
{
68
/// <summary>

src/QAToolKit.Engine.Bombardier/BombardierOutputOptions.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
namespace QAToolKit.Engine.Bombardier
1+
using System.Runtime.CompilerServices;
2+
3+
[assembly: InternalsVisibleTo("QAToolKit.Engine.Bombardier.Test")]
4+
namespace QAToolKit.Engine.Bombardier
25
{
36
/// <summary>
47
/// Bombardier output options

src/QAToolKit.Engine.Bombardier/BombardierTest.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
namespace QAToolKit.Engine.Bombardier
1+
using System;
2+
using System.Net.Http;
3+
4+
namespace QAToolKit.Engine.Bombardier
25
{
36
/// <summary>
47
/// Bombardier test
@@ -8,11 +11,11 @@ public class BombardierTest
811
/// <summary>
912
/// Bombardier HTTP request method
1013
/// </summary>
11-
public string Method { get; set; }
14+
public HttpMethod Method { get; set; }
1215
/// <summary>
1316
/// Bombardier HTTP request Url
1417
/// </summary>
15-
public string Url { get; set; }
18+
public Uri Url { get; set; }
1619
/// <summary>
1720
/// Bombardier command
1821
/// </summary>

src/QAToolKit.Engine.Bombardier/BombardierTestsGenerator.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using System;
55
using System.Collections.Generic;
66
using System.IO;
7-
using System.Linq;
87
using System.Runtime.InteropServices;
98
using System.Text;
109
using System.Threading.Tasks;
@@ -37,7 +36,7 @@ public async Task<IEnumerable<BombardierTest>> Generate(IList<HttpTestRequest> r
3736
var bombardierTests = new List<BombardierTest>();
3837
var scriptBuilder = new StringBuilder();
3938

40-
var bombardierFullPath = String.Empty;
39+
string bombardierFullPath;
4140

4241
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
4342
{
@@ -66,8 +65,8 @@ public async Task<IEnumerable<BombardierTest>> Generate(IList<HttpTestRequest> r
6665

6766
bombardierTests.Add(new BombardierTest()
6867
{
69-
Url = request.Path,
70-
Method = request.Method.ToString(),
68+
Url = new Uri(request.Path, UriKind.RelativeOrAbsolute),
69+
Method = request.Method,
7170
Command = scriptBuilder.ToString()
7271
});
7372
}

src/QAToolKit.Engine.Bombardier/Helpers/GeneratorHelper.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using Microsoft.AspNetCore.WebUtilities;
2-
using QAToolKit.Core.Helpers;
32
using QAToolKit.Core.Models;
43
using System;
54
using System.Collections.Generic;

0 commit comments

Comments
 (0)