/// <summary> /// Set XRay runtime ids on all steps under this RhinoTestCase. /// </summary> /// <param name="testCase">RhinoTestCase on which to update runtime ids.</param> /// <param name="testExecutionKey">Jira test execution key by which to find runtime ids.</param> public static void SetRuntimeKeys(this RhinoTestCase testCase, string testExecutionKey) { // setup var ravenClient = new JiraCommandsExecutor(testCase.GetAuthentication()); var command = RavenCommandsRepository.GetTestRunExecutionDetails(testExecutionKey, testCase.Key); // send var response = ravenClient.SendCommand(command).AsJToken(); // exit conditions if ($"{response["id"]}".Equals("-1")) { return; } // setup var jsonToken = response["steps"]; var stepsToken = JArray.Parse($"{jsonToken}"); var stepsCount = testCase.Steps.Count(); // apply runtime id to test-step context for (int i = 0; i < stepsCount; i++) { testCase.Steps.ElementAt(i).Context["runtimeid"] = stepsToken[i]["id"].ToObject <long>(); testCase.Steps.ElementAt(i).Context["testStep"] = JToken.Parse($"{stepsToken[i]}"); } // apply test run key int.TryParse($"{response["id"]}", out int idOut); testCase.Context["runtimeid"] = idOut; testCase.Context["testRunKey"] = testExecutionKey; }
/// <summary> /// Set XRay test execution results of test case by setting steps outcome. /// </summary> /// <param name="testCase">RhinoTestCase by which to update XRay results.</param> /// <returns>-1 if failed to update, 0 for success.</returns> /// <remarks>Must contain runtimeid field in the context.</remarks> public static void SetOutcomeBySteps(this RhinoTestCase testCase) { // get steps // add exceptions images - if exists or relevant if (testCase.Context.ContainsKey(ContextEntry.OrbitResponse)) { testCase.AddExceptionsScreenshot(); } // collect steps var steps = new List <object>(); foreach (var testStep in testCase.Steps) { steps.Add(testStep.GetUpdateRequest(outcome: $"{testCase.Context["outcome"]}")); } // setup var executor = new JiraCommandsExecutor(testCase.GetAuthentication()); var command = RavenCommandsRepository.UpdateTestRun( testRun: $"{testCase.Context["runtimeid"]}", data: new { Steps = steps }); // send executor.SendCommand(command); }
/// <summary> /// Updates test results comment. /// </summary> /// <param name="testCase">RhinoTestCase by which to update test results.</param> public static void UpdateResultComment(this RhinoTestCase testCase, string comment) { // setup var executor = new JiraCommandsExecutor(testCase.GetAuthentication()); var command = RavenCommandsRepository.UpdateTestRun( testRun: $"{testCase.Context["runtimeid"]}", data: new { Comment = comment }); // send executor.SendCommand(command); }
private void AttachToTestPlan(RhinoTestRun testRun) { // attach to plan (if any) var plans = testRun.TestCases.SelectMany(i => (List <string>)i.Context["testPlans"]).Distinct(); // exit conditions if (!plans.Any()) { return; } // build commands var commands = plans.Select(i => RavenCommandsRepository.AssociateExecutions(i, new[] { testRun.Key })); // send var options = new ParallelOptions { MaxDegreeOfParallelism = BucketSize }; Parallel.ForEach(commands, options, command => jiraExecutor.SendCommand(command)); }
/// <summary> /// Set XRay runtime ids on all steps under this RhinoTestCase. /// </summary> /// <param name="testCase">RhinoTestCase on which to update runtime ids.</param> /// <param name="testExecutionKey">Jira test execution key by which to find runtime ids.</param> public static void SetRuntimeKeys(this RhinoTestCase testCase, string testExecutionKey) { // setup var ravenClient = new JiraCommandsExecutor(testCase.GetAuthentication()); var command = RavenCommandsRepository.GetTestRunExecutionDetails(testExecutionKey, testCase.Key); // send var response = ravenClient.SendCommand(command).AsJToken(); // exit conditions if ($"{response["id"]}".Equals("-1")) { return; } // setup var jsonToken = response["steps"]; var stepsToken = JArray.Parse($"{jsonToken}"); var aggregated = testCase.AggregateSteps(); var steps = aggregated.Steps.ToList(); // apply runtime id to test-step context for (int i = 0; i < steps.Count; i++) { steps[i].Context["runtimeid"] = stepsToken[i]["id"].ToObject <long>(); steps[i].Context["testStep"] = JToken.Parse($"{stepsToken[i]}"); var isKey = steps[i].Context.ContainsKey(ContextEntry.ChildSteps); var isType = isKey && steps[i].Context[ContextEntry.ChildSteps] is IEnumerable <RhinoTestStep>; if (isType) { foreach (var _step in (IEnumerable <RhinoTestStep>)steps[i].Context[ContextEntry.ChildSteps]) { _step.Context["runtimeid"] = steps[i].Context["runtimeid"]; } } } // apply test run key _ = int.TryParse($"{response["id"]}", out int idOut); testCase.Context["runtimeid"] = idOut; testCase.Context["testRunKey"] = testExecutionKey; testCase.Context["aggregated"] = aggregated; aggregated.Steps = steps; }
/// <summary> /// Set XRay test execution results of test case by setting steps outcome. /// </summary> /// <param name="testCase">RhinoTestCase by which to update XRay results.</param> /// <returns>-1 if failed to update, 0 for success.</returns> /// <remarks>Must contain runtimeid field in the context.</remarks> public static void SetOutcomeBySteps(this RhinoTestCase testCase) { // get steps var onTestCase = testCase.AggregateSteps(); onTestCase.Context.AddRange(testCase.Context, new[] { "aggregated" }); // collect steps var steps = new List <object>(); foreach (var testStep in onTestCase.Steps) { steps.Add(testStep.GetUpdateRequest(outcome: $"{onTestCase.Context["outcome"]}")); } // setup var executor = new JiraCommandsExecutor(onTestCase.GetAuthentication()); var command = RavenCommandsRepository.UpdateTestRun( testRun: $"{onTestCase.Context["runtimeid"]}", data: new { Steps = steps }); // send executor.SendCommand(command); }