diff --git a/examples/Demo/Demo.csproj b/examples/Demo/Demo.csproj
index cf7109cd..0c5295ef 100644
--- a/examples/Demo/Demo.csproj
+++ b/examples/Demo/Demo.csproj
@@ -57,16 +57,15 @@
-
-
+
-
-
-
+
+
+
-
+
diff --git a/examples/Demo/Features/DynamicWorkload/MultinomialDistributionExample.cs b/examples/Demo/Features/DynamicWorkload/MultinomialDistributionExample.cs
index e528ca3e..260fd00c 100644
--- a/examples/Demo/Features/DynamicWorkload/MultinomialDistributionExample.cs
+++ b/examples/Demo/Features/DynamicWorkload/MultinomialDistributionExample.cs
@@ -1,5 +1,4 @@
-using MathNet.Numerics.Distributions;
-using NBomber.CSharp;
+using NBomber.CSharp;
namespace Demo.Features.DynamicWorkload;
@@ -7,34 +6,37 @@ public class MultinomialDistributionExample
{
public void Run()
{
- var ratios = new[] {0.7, 0.2, 0.1}; // 70%, 20%, 10%
+ // 70% for read, 20% for write, 10% for delete
+ var items = new [] { ("read", 70), ("write", 20), ("delete", 10) };
var scenario = Scenario.Create("multinomial_distribution", async context =>
{
- int[] result = Multinomial.Sample(context.Random, ratios, 1);
- if (result[0] == 1) // 70% for read
+ var randomItem = context.Random.Choice(items);
+ switch (randomItem)
{
- await Step.Run("read", context, async () =>
- {
- await Task.Delay(100);
- return Response.Ok();
- });
- }
- else if (result[1] == 1) // 20% for write
- {
- await Step.Run("write", context, async () =>
- {
- await Task.Delay(100);
- return Response.Ok();
- });
- }
- else // 10% for delete
- {
- await Step.Run("delete", context, async () =>
- {
- await Task.Delay(100);
- return Response.Ok();
- });
+ case "read": // 70% for read
+ await Step.Run("read", context, async () =>
+ {
+ await Task.Delay(100);
+ return Response.Ok();
+ });
+ break;
+
+ case "write": // 20% for write
+ await Step.Run("write", context, async () =>
+ {
+ await Task.Delay(100);
+ return Response.Ok();
+ });
+ break;
+
+ case "delete": // 10% for delete
+ await Step.Run("delete", context, async () =>
+ {
+ await Task.Delay(100);
+ return Response.Ok();
+ });
+ break;
}
return Response.Ok();
diff --git a/examples/Demo/Features/DynamicWorkload/ScenarioWeightExample.cs b/examples/Demo/Features/DynamicWorkload/ScenarioWeightExample.cs
new file mode 100644
index 00000000..8d94c834
--- /dev/null
+++ b/examples/Demo/Features/DynamicWorkload/ScenarioWeightExample.cs
@@ -0,0 +1,37 @@
+using NBomber.CSharp;
+
+namespace Demo.Features.DynamicWorkload;
+
+public class ScenarioWeightExample
+{
+ public void Run()
+ {
+ var readScenario = Scenario.Create("read_scenario", async context =>
+ {
+ await Task.Delay(100);
+ return Response.Ok();
+ })
+ .WithoutWarmUp()
+ .WithLoadSimulations(
+ // we use the same LoadSimulation settings
+ Simulation.Inject(rate: 10, interval: TimeSpan.FromSeconds(1), during: TimeSpan.FromSeconds(30))
+ )
+ .WithWeight(80); // sets 80%
+
+ var writeScenario = Scenario.Create("write_scenario", async context =>
+ {
+ await Task.Delay(100);
+ return Response.Ok();
+ })
+ .WithoutWarmUp()
+ .WithLoadSimulations(
+ // we use the same LoadSimulation settings
+ Simulation.Inject(rate: 10, interval: TimeSpan.FromSeconds(1), during: TimeSpan.FromSeconds(30))
+ )
+ .WithWeight(20); // sets 20%
+
+ NBomberRunner
+ .RegisterScenarios(readScenario, writeScenario)
+ .Run();
+ }
+}
diff --git a/examples/Demo/Features/DynamicWorkload/ZipfianDistributionExample.cs b/examples/Demo/Features/DynamicWorkload/ZipfianDistributionExample.cs
index 570e8463..1b11dfed 100644
--- a/examples/Demo/Features/DynamicWorkload/ZipfianDistributionExample.cs
+++ b/examples/Demo/Features/DynamicWorkload/ZipfianDistributionExample.cs
@@ -1,5 +1,4 @@
-using MathNet.Numerics.Distributions;
-using NBomber.CSharp;
+using NBomber.CSharp;
namespace Demo.Features.DynamicWorkload;
@@ -9,7 +8,7 @@ public void Run()
{
var scenario = Scenario.Create("zipfian_distribution", async context =>
{
- var stepNumber = Zipf.Sample(s: 1.3, n: 5, rnd: context.Random);
+ var stepNumber = context.Random.Zipf(n: 5, s: 1.3);
if (stepNumber == 1)
{
await Step.Run("step_1", context, async () =>
diff --git a/examples/Demo/Features/RealtimeReporting/CustomReportingSink/CustomReportingSink.cs b/examples/Demo/Features/RealtimeReporting/CustomReportingSink/CustomReportingSink.cs
index 48fd9a46..1ad3d04d 100644
--- a/examples/Demo/Features/RealtimeReporting/CustomReportingSink/CustomReportingSink.cs
+++ b/examples/Demo/Features/RealtimeReporting/CustomReportingSink/CustomReportingSink.cs
@@ -17,7 +17,7 @@ public Task Init(IBaseContext context, IConfiguration infraConfig)
return Task.CompletedTask;
}
- public Task Start() => Task.CompletedTask;
+ public Task Start(SessionStartInfo sessionInfo) => Task.CompletedTask;
public Task SaveRealtimeStats(ScenarioStats[] stats) => Task.CompletedTask;
public Task SaveFinalStats(NodeStats stats) => Task.CompletedTask;
public Task Stop() => Task.CompletedTask;
@@ -44,4 +44,4 @@ public void Run()
.WithReportingInterval(TimeSpan.FromSeconds(10))
.Run();
}
-}
\ No newline at end of file
+}
diff --git a/examples/Demo/Program.cs b/examples/Demo/Program.cs
index 8121f75e..26a077a2 100644
--- a/examples/Demo/Program.cs
+++ b/examples/Demo/Program.cs
@@ -74,6 +74,7 @@
// new HttpWithTimeoutExample().Run();
// ---- Dynamic Workloads ----
+// new ScenarioWeightExample().Run();
// new InstanceNumberDistributionExample().Run();
// new UniformDistributionExample().Run();
// new ZipfianDistributionExample().Run();