public async Task <JsonResult> startAPITest([FromBody] APIVMod apiDat) { apiDat = await _utils.testAPI(apiDat); //var dict = apiDat.timings.elapsedTimes.Select((s, i) => new { s, i }).ToDictionary(x => x.i, x => x.s); apiDat.timings.jsonTimes = JsonConvert.SerializeObject(apiDat.timings.elapsedTimes); return(Json(apiDat)); }
//method for performing the test. public async Task <APIVMod> testAPI(APIVMod apiDat) { List <string> tresults = new List <string>(); List <long> elapsedTimes = new List <long>(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); for (int i = 0; i < apiDat.testNum; i += apiDat.conNum) { List <Task <HttpResponseMessage> > calls = new List <Task <HttpResponseMessage> >(); for (int d = 0; d < apiDat.conNum; d++) { try { var client = new HttpClient(); StringContent stringContent = new StringContent(apiDat.jsonBody, UnicodeEncoding.UTF8, "application/json"); if (apiDat.requestType == "Post") { calls.Add(client.PostAsync(apiDat.apiUrl, stringContent)); } else if (apiDat.requestType == "Get") { calls.Add(client.GetAsync(apiDat.apiUrl)); } } catch (HttpRequestException ex) { } } Task.WhenAny(calls).ContinueWith(t => elapsedTimes.Add(stopwatch.ElapsedMilliseconds)); var results = await Task.WhenAll(calls); foreach (var call in results) { var test = call.StatusCode; tresults.Add(test.ToString()); } apiDat.finalResponseText = results.LastOrDefault().Content.ReadAsStringAsync().Result; apiDat.testData.successCount = tresults.Count(p => p.Contains("OK")); if (!(i >= apiDat.testNum)) { Thread.Sleep(apiDat.testDelay); } } var totalTime = stopwatch.ElapsedMilliseconds; stopwatch.Stop(); apiDat.timings.elapsedTimes = getTimeDifs(elapsedTimes); apiDat.timings.totalTime = totalTime; return(apiDat); }