public async Task <TestRunResponse> StartTestRunAsync(TestCaseInfo testCase, TestRunState state) { if (_session.State == TestRunSessionState.NotStarted) { await SetSessionStateAsync(TestRunSessionState.Running); } _logger.Debug($"Start testing test case {testCase.AzureTestCaseId}, State: {state}"); if (testCase.TestRunId == 0) { var testRunResponse = await _client.InsertTestRunAsync( _session.Id, new TestRunRequest() { TestCaseId = testCase.Id, StartTime = DateTime.Now, State = state, }); testCase.TestRunId = testRunResponse.Id; return(testRunResponse); } else { var patch = new JsonPatchDocument <TestRunRequest>(); patch.Add(r => r.StartTime, DateTime.Now); patch.Add(r => r.State, state); return(await _client.PatchTestRunAsync(_session.Id, testCase.TestRunId, patch)); } }
private Task <TestRunResponse> SetTestRunStateAsync(TestCaseInfo testCase, TestRunState state) { var patch = new JsonPatchDocument <TestRunRequest>(); patch.Add(r => r.State, state); _logger.Debug($"Updating test case state: {testCase.AzureTestCaseId} => {state}"); return(_client.PatchTestRunAsync(_session.Id, testCase.TestRunId, patch)); }
public Task <TestRunResponse> AdvanceTestRunStateAsync(TestCaseInfo testCase, TestRunState state) { if (state == TestRunState.NotStarted) { throw new ArgumentException($"Test run should have already been started. State cannot be {state}."); } if (state == TestRunState.Finished) { throw new ArgumentException($"Finishing test run should be recorded with `{nameof(RecordTestRunEndAsync)}`."); } return(SetTestRunStateAsync(testCase, state)); }
public async Task <TestRunResponse> RecordTestRunEndAsync(TestCaseInfo testCase, TestRunOutcome outcome, string errorMessage, IEnumerable <string> impactFiles, IEnumerable <string> impactMethods) { var patch = new JsonPatchDocument <TestRunRequest>(); patch.Add(r => r.State, TestRunState.Finished); patch.Add(r => r.Outcome, outcome); patch.Add(r => r.FinishTime, DateTime.Now); patch.Add(r => r.ErrorMessage, errorMessage); var runResponse = await _client.PatchTestRunAsync(_session.Id, testCase.TestRunId, patch); _logger.Info("Test run finished: " + ObjToString(runResponse)); List <CodeSignature> codeSignatures = new List <CodeSignature>(); if (impactFiles != null) { codeSignatures.AddRange( impactFiles.Select(f => new CodeSignature(f, CodeSignatureUtils.CalculateSignature(f), CodeSignatureType.File))); } if (impactMethods != null) { codeSignatures.AddRange( impactMethods.Select(f => new CodeSignature(f, CodeSignatureUtils.CalculateSignature(f), CodeSignatureType.Method))); } var impactRequest = new TestCaseImpactUpdateRequest() { ProductLine = _productLine, CodeSignatures = codeSignatures }; var impactDataCount = codeSignatures.Count; LogDebug("Updating test impact information. Number of files/methods (code signatures): " + impactDataCount); if (impactDataCount == 0) { LogDebug("(No impact data is available)"); } Exception impactUpdateException = null; try { await _client.UpdateTestImpactAsync(testCase.Id, impactRequest); } catch (Exception ex) { impactUpdateException = ex; _logger.Error("Updating test case impact data failed:\r\n" + ex.ToString()); } var lastStateRequest = new TestLastStateUpdateRequest() { ProductLine = _productLine, TestRunSessionId = _session.Id, Outcome = outcome }; if (impactUpdateException != null) { lastStateRequest.DictatedRunReason = RunReason.ImpactUpdateFailed; _logger.Warn("Test case will be run again next time."); } LogDebug($"Updating test last state. Azure Test Case Id: {testCase.AzureTestCaseId}, Outcome: {outcome}"); await _client.UpdateTestLastStateAsync(testCase.Id, lastStateRequest); return(runResponse); }