public void PostTestCleanup() { if (IsLoadTestingEnabled) { try { string requestFileDirectory = Path.GetDirectoryName(_requestsFilePath); if (!Directory.Exists(requestFileDirectory)) { Directory.CreateDirectory(requestFileDirectory); } ConcurrentBag <HttpRequestDto> httpRequestDto = HttpRequestsPerTest[CurrentTestName]; var jsonContent = _jsonSerializer.Serialize(httpRequestDto); var testFilePath = Path.Combine(_requestsFilePath, $"{CurrentTestName}.json"); File.WriteAllText(testFilePath, jsonContent); } catch (UnauthorizedAccessException ex) { throw new UnauthorizedAccessException("Cannot save load test requests.", ex); } catch (PathTooLongException ex) { throw new PathTooLongException("Cannot save load test requests.", ex); } catch (IOException ex) { throw new IOException("Cannot save load test requests.", ex); } } _previousHttpRequestDto = null; CurrentTestName = null; }
public HttpRequestDto Create(Request request, HttpRequestDto previousHttpRequestDto) { var httpRequestDto = new HttpRequestDto { Url = request.Url, Method = request.Method, ContentType = request.ContentType, CreationTime = DateTime.Now, }; if (previousHttpRequestDto != null) { httpRequestDto.MillisecondsPauseAfterPreviousRequest = (httpRequestDto.CreationTime - previousHttpRequestDto.CreationTime).Milliseconds; } foreach (var item in request.Headers) { httpRequestDto.Headers.Add(item.ToString()); } return(httpRequestDto); }
public async Task OnRequestCaptureTrafficEventHandler(object sender, SessionEventArgs e) => await Task.Run( () => { if (IsLoadTestingEnabled && CurrentTestName != null) { if (HttpRequestsPerTest.ContainsKey(CurrentTestName) && e.HttpClient != null && e.HttpClient.Request != null) { var htpRequestDto = _httpRequestDtoFactory.Create(e.HttpClient.Request, _previousHttpRequestDto); if (e.HttpClient.Request.Method == "POST" || e.HttpClient.Request.Method == "PUT" || e.HttpClient.Request.Method == "PATCH") { try { htpRequestDto.Body = e.GetRequestBodyAsString().Result; } catch { // Ignore if doesn't have body } } if (((ShouldFilterByHost && htpRequestDto.Headers.Any(x => x.Contains($"Host: {FilterHost}"))) || !ShouldFilterByHost) && !ShouldFilterRequest(htpRequestDto.Url)) { if (_previousHttpRequestDto == null || !_previousHttpRequestDto.Equals(htpRequestDto)) { HttpRequestsPerTest[CurrentTestName].Add(htpRequestDto); _previousHttpRequestDto = htpRequestDto; } } } } });
private RestRequest CreateRestRequest(HttpRequestDto httpRequestDto) { var method = (Method)Enum.Parse(typeof(Method), httpRequestDto.Method); string resource = HttpUtility.UrlDecode(httpRequestDto.Url); var request = new RestRequest(resource, method); request.RequestFormat = DataFormat.Json; request.JsonSerializer = NewtonsoftJsonSerializer.Default; ////var request = new RestRequest(new Uri(HttpUtility.UrlDecode(httpRequestDto.Url)), method); foreach (var currentHeader in httpRequestDto.Headers) { if (currentHeader.Contains("Cookie")) { string cookiesHeader = currentHeader.Replace("Cookie:", string.Empty).TrimStart(); var cookiesPairs = cookiesHeader.Split(';'); foreach (string cookiePair in cookiesPairs) { var splitHeader = cookiePair.Split('='); var cookieName = splitHeader[0].Trim(); if (_scenarioCookies.ContainsKey(cookieName)) { request.AddCookie(cookieName, _scenarioCookies[cookieName]); } } } else { var headerPairs = currentHeader.Split(':'); if (headerPairs.Count() >= 2) { string headerName = headerPairs[0].Trim(); string headerValue = currentHeader.Replace($"{headerName}:", string.Empty).Trim(); if (!string.IsNullOrEmpty(headerName) && !string.IsNullOrEmpty(headerValue)) { try { request.AddHeader(headerName, headerValue); } catch (Exception ex) { Console.WriteLine(ex); } } } } } if (httpRequestDto.Body != null) { var parametersPairs = httpRequestDto.Body.Split('&'); var urlEncodedPairs = new List <KeyValuePair <string, string> >(); foreach (var parameterPair in parametersPairs) { string parameterName = parameterPair.Split('=').FirstOrDefault(); string parameterValue = parameterPair.Split('=').LastOrDefault() ?? string.Empty; urlEncodedPairs.Add(new KeyValuePair <string, string>(HttpUtility.UrlDecode(parameterName), HttpUtility.UrlDecode(parameterValue))); } var formUrlEncodedContent = new FormUrlEncodedContent(urlEncodedPairs.ToArray()); string rawBody = formUrlEncodedContent.ReadAsStringAsync().Result; string decodedRawBody = rawBody; if (httpRequestDto.Headers.Any(x => x.Contains("text/html"))) { decodedRawBody = HttpUtility.HtmlDecode(rawBody); } else { decodedRawBody = HttpUtility.UrlDecode(rawBody); } request.AddParameter(httpRequestDto.ContentType, decodedRawBody, ParameterType.RequestBody); } return(request); }