Skip to content

Commit aca99b7

Browse files
authored
Refactoring (#7)
1 parent b6198c9 commit aca99b7

29 files changed

+586
-608
lines changed

NBomber.Converter.Tool/InputFileType.cs

Lines changed: 0 additions & 8 deletions
This file was deleted.

NBomber.Converter.Tool/Options.cs

Lines changed: 0 additions & 18 deletions
This file was deleted.

NBomber.Converter.Tool/ToolHelper.cs

Lines changed: 0 additions & 24 deletions
This file was deleted.

NBomber.Converter.sln

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio Version 17
4-
VisualStudioVersion = 17.13.35818.85 d17.13
4+
VisualStudioVersion = 17.13.35818.85
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NBomber.Converter", "src\NBomber.Converter\NBomber.Converter.csproj", "{82B41147-6658-4613-A266-E414D5847C51}"
77
EndProject
@@ -13,7 +13,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo", "examples\Demo\Demo.
1313
EndProject
1414
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "examples", "examples", "{DDA148E0-7B6B-49BA-B259-25507FFA9D73}"
1515
EndProject
16-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NBomber.Converter.Tool", "NBomber.Converter.Tool\NBomber.Converter.Tool.csproj", "{35F56C2F-87E7-4933-AD81-C9F73F31B474}"
16+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NBomber.Converter.Tool", "src\NBomber.Converter.Tool\NBomber.Converter.Tool.csproj", "{79D4DE44-843F-448B-A679-C863FF633EE4}"
1717
EndProject
1818
Global
1919
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -33,10 +33,10 @@ Global
3333
{EE5EB627-12CE-48F1-9EA4-48D81E38D592}.Debug|Any CPU.Build.0 = Debug|Any CPU
3434
{EE5EB627-12CE-48F1-9EA4-48D81E38D592}.Release|Any CPU.ActiveCfg = Release|Any CPU
3535
{EE5EB627-12CE-48F1-9EA4-48D81E38D592}.Release|Any CPU.Build.0 = Release|Any CPU
36-
{35F56C2F-87E7-4933-AD81-C9F73F31B474}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
37-
{35F56C2F-87E7-4933-AD81-C9F73F31B474}.Debug|Any CPU.Build.0 = Debug|Any CPU
38-
{35F56C2F-87E7-4933-AD81-C9F73F31B474}.Release|Any CPU.ActiveCfg = Release|Any CPU
39-
{35F56C2F-87E7-4933-AD81-C9F73F31B474}.Release|Any CPU.Build.0 = Release|Any CPU
36+
{79D4DE44-843F-448B-A679-C863FF633EE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
37+
{79D4DE44-843F-448B-A679-C863FF633EE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
38+
{79D4DE44-843F-448B-A679-C863FF633EE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
39+
{79D4DE44-843F-448B-A679-C863FF633EE4}.Release|Any CPU.Build.0 = Release|Any CPU
4040
EndGlobalSection
4141
GlobalSection(SolutionProperties) = preSolution
4242
HideSolutionNode = FALSE

examples/Demo/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
using NBomber.Converter.PostmanScenarioConverter;
2-
using NBomber.Converter.HARScenarioConverter;
1+
using NBomber.Converter.HAR;
2+
using NBomber.Converter.Postman;
33

44
var harFileContent = File.ReadAllText("HarExample_4steps.har");
55
var harScenario = HARScenarioConverter.Convert(harFileContent);
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using CommandLine;
2+
3+
namespace NBomber.Converter.Tool;
4+
5+
public enum InputFileType
6+
{
7+
HAR,
8+
PostmanCollection
9+
}
10+
11+
class CliArgs
12+
{
13+
[Value(0, MetaName = "input", HelpText = "Input file path", Required = true)]
14+
public string InputFilePath { get; set; }
15+
16+
[Option('t', "file-type", Required = false, HelpText = "Input file type")]
17+
public InputFileType? InputFileType { get; set; }
18+
19+
[Option('o', "output", Required = true, HelpText = "Location of the output file")]
20+
public string OutputFilePath { get; set; }
21+
}

NBomber.Converter.Tool/NBomber.Converter.Tool.csproj renamed to src/NBomber.Converter.Tool/NBomber.Converter.Tool.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
</ItemGroup>
1717

1818
<ItemGroup>
19-
<ProjectReference Include="..\src\NBomber.Converter\NBomber.Converter.csproj" />
19+
<ProjectReference Include="..\NBomber.Converter\NBomber.Converter.csproj" />
2020
</ItemGroup>
2121

2222
</Project>

NBomber.Converter.Tool/Program.cs renamed to src/NBomber.Converter.Tool/Program.cs

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
using CommandLine;
2-
using NBomber.Converter.HARScenarioConverter;
3-
using NBomber.Converter.PostmanScenarioConverter;
4-
using NBomber.Converter.Tool;
52
using Serilog;
63
using Serilog.Sinks.SystemConsole.Themes;
4+
using NBomber.Converter.HAR;
5+
using NBomber.Converter.Postman;
6+
using NBomber.Converter.Tool;
77

88
Log.Logger = new LoggerConfiguration()
99
.WriteTo.Console(
@@ -15,12 +15,11 @@
1515
var version = typeof(HARScenarioConverter).Assembly.GetName().Version;
1616
Log.Information("{0} version: {1}.{2}.{3}", "NBomber Converter", version.Major, version.Minor, version.Build);
1717

18-
Parser.Default.ParseArguments<Options>(args)
19-
.WithParsed<Options>(o =>
18+
Parser.Default.ParseArguments<CliArgs>(args)
19+
.WithParsed<CliArgs>(o =>
2020
{
2121
var content = File.ReadAllText(o.InputFilePath);
22-
var fileType = o.InputFileType.HasValue ?
23-
o.InputFileType : ToolHelper.DetermineFileType(o.InputFilePath);
22+
var fileType = o.InputFileType.HasValue ? o.InputFileType : DetermineFileType(o.InputFilePath);
2423

2524
switch (fileType)
2625
{
@@ -38,6 +37,7 @@
3837
Log.Error(ex.Message);
3938
}
4039
break;
40+
4141
case InputFileType.PostmanCollection:
4242
Log.Information($"Converting {o.InputFilePath}");
4343

@@ -52,9 +52,27 @@
5252
Log.Error(ex.Message);
5353
}
5454
break;
55+
5556
default:
5657
Log.Error("Unknown file type");
5758
break;
5859
}
5960
});
61+
6062
Log.CloseAndFlush();
63+
64+
static InputFileType DetermineFileType(string filePath)
65+
{
66+
var fileExtension = Path.GetExtension(filePath).ToLower();
67+
68+
if (fileExtension == ".json")
69+
{
70+
Log.Information("Automatically detected file type - Postman collection");
71+
return InputFileType.PostmanCollection;
72+
}
73+
else
74+
{
75+
Log.Information("Automatically detected file type - HAR");
76+
return InputFileType.HAR;
77+
}
78+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
namespace NBomber.Converter.Contracts;
2+
3+
public class FileFormatException(string message) : Exception(message);
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
using System.Text.Json.Serialization;
2+
3+
namespace NBomber.Converter.HAR.Contracts;
4+
5+
public class HARFile
6+
{
7+
[JsonPropertyName("log")]
8+
public HARLog Log { get; set; }
9+
}
10+
11+
public class HARLog
12+
{
13+
[JsonPropertyName("version")]
14+
public string Version { get; set; }
15+
16+
[JsonPropertyName("creator")]
17+
public Creator Creator { get; set; }
18+
19+
[JsonPropertyName("pages")]
20+
public List<HARPage> Pages { get; set; }
21+
22+
[JsonPropertyName("entries")]
23+
public List<HAREntry> Entries { get; set; }
24+
}
25+
26+
public class Creator
27+
{
28+
[JsonPropertyName("name")]
29+
public string Name { get; set; }
30+
31+
[JsonPropertyName("version")]
32+
public string Version { get; set; }
33+
}
34+
35+
public class HARPage
36+
{
37+
[JsonPropertyName("startedDateTime")]
38+
public DateTime StartedDateTime { get; set; }
39+
40+
[JsonPropertyName("id")]
41+
public string Id { get; set; }
42+
43+
[JsonPropertyName("title")]
44+
public string Title { get; set; }
45+
46+
[JsonPropertyName("pageTimings")]
47+
public PageTimings PageTimings { get; set; }
48+
}
49+
50+
public class PageTimings
51+
{
52+
[JsonPropertyName("onContentLoad")]
53+
public double OnContentLoad { get; set; }
54+
55+
[JsonPropertyName("onLoad")]
56+
public double OnLoad { get; set; }
57+
}
58+
59+
public class HAREntry
60+
{
61+
[JsonPropertyName("startedDateTime")]
62+
public DateTime StartedDateTime { get; set; }
63+
64+
[JsonPropertyName("time")]
65+
public double Time { get; set; }
66+
67+
[JsonPropertyName("request")]
68+
public HARRequest Request { get; set; }
69+
70+
[JsonPropertyName("response")]
71+
public HARResponse Response { get; set; }
72+
73+
[JsonPropertyName("timings")]
74+
public HARTimings Timings { get; set; }
75+
}
76+
77+
public class HARRequest
78+
{
79+
[JsonPropertyName("method")]
80+
public string Method { get; set; }
81+
82+
[JsonPropertyName("url")]
83+
public string Url { get; set; }
84+
85+
[JsonPropertyName("httpVersion")]
86+
public string HttpVersion { get; set; }
87+
88+
[JsonPropertyName("headers")]
89+
public List<Header> Headers { get; set; }
90+
91+
[JsonPropertyName("queryString")]
92+
public List<QueryString> QueryString { get; set; }
93+
94+
[JsonPropertyName("cookies")]
95+
public List<Cookie> Cookies { get; set; }
96+
97+
[JsonPropertyName("bodySize")]
98+
public int BodySize { get; set; }
99+
100+
[JsonPropertyName("postData")]
101+
public PostData PostData { get; set; }
102+
}
103+
104+
public class PostData
105+
{
106+
[JsonPropertyName("mimeType")]
107+
public string MimeType { get; set; }
108+
109+
[JsonPropertyName("text")]
110+
public string Text { get; set; }
111+
112+
[JsonPropertyName("params")]
113+
public List<(string, string)> Params { get; set; }
114+
}
115+
116+
public class HARResponse
117+
{
118+
[JsonPropertyName("status")]
119+
public int Status { get; set; }
120+
121+
[JsonPropertyName("statusText")]
122+
public string StatusText { get; set; }
123+
124+
[JsonPropertyName("headers")]
125+
public List<Header> Headers { get; set; }
126+
127+
[JsonPropertyName("cookies")]
128+
public List<Cookie> Cookies { get; set; }
129+
130+
[JsonPropertyName("content")]
131+
public HARContent Content { get; set; }
132+
133+
[JsonPropertyName("redirectURL")]
134+
public string RedirectUrl { get; set; }
135+
136+
[JsonPropertyName("bodySize")]
137+
public int BodySize { get; set; }
138+
}
139+
140+
public class HARContent
141+
{
142+
[JsonPropertyName("mimeType")]
143+
public string MimeType { get; set; }
144+
145+
[JsonPropertyName("size")]
146+
public int Size { get; set; }
147+
}
148+
149+
public class HARTimings
150+
{
151+
[JsonPropertyName("blocked")]
152+
public double Blocked { get; set; }
153+
154+
[JsonPropertyName("dns")]
155+
public double Dns { get; set; }
156+
157+
[JsonPropertyName("connect")]
158+
public double Connect { get; set; }
159+
160+
[JsonPropertyName("send")]
161+
public double Send { get; set; }
162+
163+
[JsonPropertyName("wait")]
164+
public double Wait { get; set; }
165+
166+
[JsonPropertyName("receive")]
167+
public double Receive { get; set; }
168+
169+
[JsonPropertyName("ssl")]
170+
public double Ssl { get; set; }
171+
}
172+
173+
public class Header
174+
{
175+
[JsonPropertyName("name")]
176+
public string Name { get; set; }
177+
178+
[JsonPropertyName("value")]
179+
public string Value { get; set; }
180+
}
181+
182+
public class QueryString
183+
{
184+
[JsonPropertyName("name")]
185+
public string Name { get; set; }
186+
187+
[JsonPropertyName("value")]
188+
public string Value { get; set; }
189+
}
190+
191+
public class Cookie
192+
{
193+
[JsonPropertyName("name")]
194+
public string Name { get; set; }
195+
196+
[JsonPropertyName("value")]
197+
public string Value { get; set; }
198+
}

0 commit comments

Comments
 (0)