private static void DoSetOutcomeByRun(RhinoTestCase testCase, string outcome) { // setup var executor = new JiraCommandsExecutor(testCase.GetAuthentication()); // send var response = RavenCommandsRepository.GetTestStauses().Send(executor).AsJToken(); // extract status var status = response.FirstOrDefault(i => $"{i.SelectToken("name")}".Equals(outcome, Compare)); // exit conditions if (status == default) { return; } // exit conditions if (!int.TryParse($"{status["id"]}", out int outcomeOut)) { return; } // send RavenCommandsRepository.SetTestExecuteResult(testCase.TestRunKey, testCase.Key, outcomeOut).Send(executor); }
/// <summary> /// Upload evidences into an existing test execution. /// </summary> /// <param name="testCase">RhinoTestCase by and into which to upload evidences.</param> public static RhinoTestCase SetEvidences(this RhinoTestCase testCase) { try { // setup var forUploadOutcomes = new[] { "PASSED", "FAILED" }; // exit conditions if (!forUploadOutcomes.Contains($"{testCase.Context["outcome"]}".ToUpper())) { return(testCase); } // setup var testRun = (testCase.Context["testRun"] as JToken).AsJObject(); var id = $"{testRun.SelectToken("id")}"; var key = $"{testRun.SelectToken("key")}"; var options = new ParallelOptions { MaxDegreeOfParallelism = 4 }; // send var client = new XpandClient(testCase.GetAuthentication()); Parallel.ForEach(GetEvidence(testCase), options, evidenceData => { var evidences = evidenceData["evidences"] as List <string>; evidences ??= new List <string>(); Parallel.ForEach(evidences, options, evidence => client.CreateEvidence((id, key), $"{evidenceData["testRun"]}", $"{evidenceData["step"]}", evidence)); }); }
/// <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); }
/// <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> /// Upload evidences into an existing test execution. /// </summary> /// <param name="testCase">RhinoTestCase by and into which to upload evidences.</param> public static void UploadEvidences(this RhinoTestCase testCase) { // setup var runOut = 0; if (testCase.Context.ContainsKey("runtimeid")) { _ = int.TryParse($"{testCase.Context["runtimeid"]}", out runOut); } // build var executor = new JiraCommandsExecutor(testCase.GetAuthentication()); // send foreach (var(Id, Data) in GetEvidence(testCase)) { RavenCommandsRepository.CreateAttachment($"{runOut}", $"{Id}", Data).Send(executor); } }