public async Task <HttpResponse> ExecuteRequestAsync(IRestRequest request, HttpLogWriter httpLogWriter) { // // Get the response back, parsing the headers // DateTime startTime = DateTime.UtcNow; IRestResponse response = await _restClient.ExecuteTaskAsync(request); TimeSpan responseTime = DateTime.UtcNow - startTime; var headers = new List <HttpHeader>(); if (response.Headers != null) { headers = response.Headers.Select(x => new HttpHeader(x.Name, Convert.ToString(x.Value))) .ToList(); } // Logging httpLogWriter.AppendRequest(_restClient.BaseUrl, request); httpLogWriter.AppendResponse(response); return(new HttpResponse() { StatusCode = response.StatusCode, Content = response.Content, Headers = headers, ResponseTime = responseTime }); }
public Task <HttpResponse> ExecuteRequestAsync(IRestRequest request, HttpLogWriter httpLogWriter) { if (Responses == null) { if (ResponseTimes != null) { Response.ResponseTime = ResponseTimes[_responseCounter++]; } return(Task.FromResult(Response)); } return(Task.FromResult(Responses[_responseCounter++])); }
internal async Task <TestResult> RunTestAsync(Test test, int position, ICapturedVariableProvider variables, AssertionsMatcher assertionMatcher) { var testResult = new TestResult { Position = position, SessionId = SessionId, Test = test }; try { string resolvedUrl = variables.ReplacePlainTextVariablesIn(test.Url); testResult.ActualUrl = resolvedUrl; string postBody = variables.ReplacePlainTextVariablesIn(test.PostBody); foreach (HeaderItem header in test.Headers) { header.Value = variables.ReplacePlainTextVariablesIn(header.Value); } IRestRequest request = _httpClient.CreateRestRequest(test.Method, resolvedUrl, postBody, test.Headers); var logger = _loggerFactory.CreateLogger(); // Scripting part if (test.ScriptSnippets != null && !string.IsNullOrEmpty(test.ScriptSnippets.BeforeExecuteFilename)) { logger.WriteLine("Evaluating C# script"); try { var snippetReader = new SnippetFileReader(_configuration); var evaluator = new TestFileScriptEvaluator(_configuration, snippetReader); bool success = evaluator.EvaluateBeforeExecute(test, request); if (success) { request = evaluator.RequestGlobals.Request; test = evaluator.RequestGlobals.Test; logger.WriteLine("Compilation successful."); } } catch (Exception ex) { testResult.ScriptCompilationSuccess = false; testResult.ExceptionMessage = "The script failed to compile - see the log file for a stack trace."; logger.WriteLine("Compilation failed: {0}", ex); } } var httpLogWriter = new HttpLogWriter(); HttpResponse response = await _httpClient.ExecuteRequestAsync(request, httpLogWriter); testResult.ResponseTime = response.ResponseTime; testResult.HttpResponse = response; testResult.HttpLog = httpLogWriter.StringBuilder.ToString(); testResult.HttpContent = response.Content; if (response.StatusCode == test.ExpectedHttpStatusCode) { testResult.ResponseCodeSuccess = true; string content = response.ToString(); // Put the captured variables regex values in the current variable set foreach (var capturedVariable in test.CapturedVariables) { capturedVariable.Regex = variables.ReplacePlainTextVariablesIn(capturedVariable.Regex); } List <Variable> parsedVariables = CapturedVariableProvider.MatchVariables(test.CapturedVariables, content, logger); variables.AddOrUpdateVariables(parsedVariables); logger.WriteLine("{0} captured variable(s) parsed.", parsedVariables.Count); // Verify assertions testResult.AssertionResults = assertionMatcher.MatchVerifications(test.Assertions, content); logger.WriteLine("Verifying {0} assertion(s)", testResult.AssertionResults.Count); foreach (Assertion item in testResult.AssertionResults) { logger.AppendTextLine(item.Log); } // Store the log testResult.Log = logger.GetLog(); } else { testResult.ResponseCodeSuccess = false; testResult.Log = $"No verifications run - the response code {response.StatusCode} did not match the expected response code {test.ExpectedHttpStatusCode}."; } } catch (Exception ex) { testResult.Log = "An exception occured: " + ex; testResult.ResponseCodeSuccess = false; testResult.ExceptionMessage = ex.Message; } return(testResult); }
private static void ProcessResponse(Test test, ICapturedVariableProvider variables, AssertionsMatcher assertionMatcher, TestResult testResult, HttpResponse response, HttpLogWriter httpLogWriter, ITestFileRunnerLogger logger) { testResult.ResponseTime = response.ResponseTime; testResult.HttpResponse = response; testResult.HttpLog = httpLogWriter.StringBuilder.ToString(); testResult.HttpContent = response.Content; if (response.StatusCode == test.ExpectedHttpStatusCode) { testResult.ResponseCodeSuccess = true; string content = response.ToString(); // Put the captured variables regex values in the current variable set foreach (var capturedVariable in test.CapturedVariables) { capturedVariable.Regex = variables.ReplacePlainTextVariablesIn(capturedVariable.Regex); } List <Variable> parsedVariables = CapturedVariableProvider.MatchVariables(test.CapturedVariables, content, logger); variables.AddOrUpdateVariables(parsedVariables); logger.WriteLine("{0} captured variable(s) parsed.", parsedVariables.Count); // Verify assertions testResult.AssertionResults = assertionMatcher.MatchVerifications(test.Assertions, content); logger.WriteLine("Verifying {0} assertion(s)", testResult.AssertionResults.Count); foreach (Assertion item in testResult.AssertionResults) { logger.AppendTextLine(item.Log); } // Store the log testResult.Log = logger.GetLog(); } else { testResult.ResponseCodeSuccess = false; testResult.Log = $"No verifications run - the response code {response.StatusCode} did not match the expected response code {test.ExpectedHttpStatusCode}."; } }
internal async Task <TestResult> RunTestAsync(Test test, int position, ICapturedVariableProvider variables, AssertionsMatcher assertionMatcher, string environment) { var testResult = new TestResult { Position = position, SessionId = SessionId, Test = test, ResultState = TestResultState.Failed }; if (test.TestConditions.RequiredEnvironments.Any()) { bool inEnvironment = test.TestConditions.RequiredEnvironments .Where(x => !string.IsNullOrEmpty(x)) .Any(x => x.Equals(environment, StringComparison.InvariantCultureIgnoreCase)); if (!inEnvironment) { testResult.ResultState = TestResultState.Skipped; return(testResult); } } try { string resolvedUrl = variables.ReplacePlainTextVariablesIn(test.Url); testResult.ActualUrl = resolvedUrl; string postBody = variables.ReplacePlainTextVariablesIn(test.PostBody); foreach (HeaderItem header in test.Headers) { header.Value = variables.ReplacePlainTextVariablesIn(header.Value); } var logger = _loggerFactory.CreateLogger(); IRestRequest request = _httpClient.CreateRestRequest(test.Method, resolvedUrl, postBody, test.Headers); // Scripting part if (!string.IsNullOrEmpty(test.ScriptSnippets?.BeforeExecuteFilename)) { logger.WriteLine("Evaluating C# script"); try { var snippetReader = new SnippetFileReader(_configuration); var evaluator = new TestFileScriptEvaluator(_configuration, snippetReader); bool success = evaluator.EvaluateBeforeExecute(test, request); if (success) { request = evaluator.RequestGlobals.Request; test = evaluator.RequestGlobals.Test; logger.WriteLine("Compilation successful."); } } catch (Exception ex) { testResult.ScriptCompilationSuccess = false; testResult.ExceptionMessage = "The script failed to compile - see the log file for a stack trace."; logger.WriteLine("Compilation failed: {0}", ex); } } var httpLogWriter = new HttpLogWriter(); HttpResponse response = await _httpClient.ExecuteRequestAsync(request, httpLogWriter); ProcessResponse(test, variables, assertionMatcher, testResult, response, httpLogWriter, logger); } catch (Exception ex) { testResult.Log = "An exception occured: " + ex; testResult.ResponseCodeSuccess = false; testResult.ExceptionMessage = ex.Message; } if (testResult.ResponseCodeSuccess && testResult.AssertionsSuccess && testResult.ScriptCompilationSuccess) { testResult.ResultState = TestResultState.Success; } return(testResult); }
private HttpLogWriter GetHttpLogWriter() { var logWriter = new HttpLogWriter(); return(logWriter); }