/// <summary> /// Run the given <paramref name="scenario"/> for <paramref name="count"/> number of iterations parallalelly. /// Each iteration will get their own iteration context that will be shared across the scenario steps. /// </summary> /// <returns>Collection of all <see cref="ScenarioResult"/>.</returns> public static async Task <IEnumerable <ScenarioResult> > RunAsync(ScenarioDescription scenario, ScenarioContext context, int count) { List <Task> tasks = new List <Task>(); List <ScenarioResult> results = new List <ScenarioResult>(); for (int i = 0; i < count; i++) { using (var iterationContext = new ScenarioContext(context)) { var result = new ScenarioResult(scenario); results.Add(result); tasks.Add(Task.Run(() => result.Run(iterationContext))); } } await Task.WhenAll(tasks.ToArray()); return(results); }
/// <summary> /// Create <see cref="ScenarioDescription"/> from <paramref name="json"/> using /// steps defined in <paramref name="types"/>. /// </summary> /// <returns>A scenario description of steps in json</returns> public static ScenarioDescription FromJson(string description, string json, params Type[] types) { var definedSteps = GetStepDefinitions(types); var steps = JsonConvert.DeserializeObject <StepDefinition[]>(json); var scenarioSteps = new List <ScenarioStep>(); for (int i = 0; i < steps.Length; i++) { var found = definedSteps.FirstOrDefault( s => s.GetMethodInfo().GetCustomAttribute <StepAttribute>().Name == steps[i].Action); if (found == null) { throw new Exception($"{steps[i].Action} not found in Step definitions"); } scenarioSteps.Add(found); } var scenario = new ScenarioDescription(description, scenarioSteps.ToArray()); return(scenario); }
public ScenarioResult(ScenarioDescription scenario) { Scenario = scenario; }