/// <summary> /// Runs all funtional test /// </summary> public static void InvokeAllFunctionTest() { FunctionalTestResults = new List <FunctionalTestResults>(); IsFunctionalTestCompleted = false; Task.Factory.StartNew(() => { int ii; foreach (var t in WCFLoad.Test.TestPackage.Suites.SelectMany(s => s.FunctionalTests)) { for (ii = 0; ii < t.Service.Values.ValueList.Count; ii++) { FunctionalTestResults.Add(new FunctionalTestResults { MethodName = t.Service.MethodName, FunctionTestNumber = "Function Test " + (ii + 1), Status = Status.NotStarted, Value = t.Service.Values.ValueList[ii] }); } } ii = 0; foreach (var t in WCFLoad.Test.TestPackage.RestMethods.FindAll(r => r.IsAddedToFunctional)) { FunctionalTestResults.Add(new FunctionalTestResults { MethodName = t.Url, FunctionTestNumber = "Function Test " + (ii + 1), Status = Status.NotStarted, Value = new Value() }); ii++; } if (FunctionalTestUpdated != null) { FunctionalTestUpdated(null, null); } int ij; foreach (var s in WCFLoad.Test.TestPackage.Suites) { foreach (var t in s.FunctionalTests) { for (ij = 0; ij < t.Service.Values.ValueList.Count; ij++) { var ftrObj = (from ftr in FunctionalTestResults where ftr.MethodName == t.Service.MethodName && ftr.FunctionTestNumber == "Function Test " + (ij + 1) select ftr).First(); ftrObj.Status = Status.Started; if (FunctionalTestUpdated != null) { FunctionalTestUpdated(null, null); } string input; string result = InvokeFunctionalTest(t, ij, s.Guid, out input); bool passfailstatus = result == t.Service.Values.ValueList[ij].MethodOutput; ftrObj.Status = Status.Completed; ftrObj.Actual = result; ftrObj.Input = input; ftrObj.Expected = t.Service.Values.ValueList[ij].MethodOutput; ftrObj.PassFailStatus = passfailstatus; if (FunctionalTestUpdated != null) { FunctionalTestUpdated(null, null); } } } } ij = 0; foreach (var t in WCFLoad.Test.TestPackage.RestMethods.FindAll(r => r.IsAddedToFunctional)) { var ftrObj = (from ftr in FunctionalTestResults where ftr.MethodName == t.Url && ftr.FunctionTestNumber == "Function Test " + (ij + 1) select ftr).First(); ftrObj.Status = Status.Started; if (FunctionalTestUpdated != null) { FunctionalTestUpdated(null, null); } RestMethodResponse result = WCFLoad.Test.InvokeRestApi(t, false); bool passfailstatus = result.Response == t.MethodOutput; ftrObj.Status = Status.Completed; ftrObj.Actual = result.Response; ftrObj.Input = string.Empty; ftrObj.Expected = t.MethodOutput; ftrObj.PassFailStatus = passfailstatus; if (FunctionalTestUpdated != null) { FunctionalTestUpdated(null, null); } ij++; } IsFunctionalTestCompleted = true; if (FunctionalTestUpdated != null) { FunctionalTestUpdated(null, null); } FunctionalTestUpdated = null; }); }
public static RestMethodResponse InvokeRestApi(RestMethod r, bool trackTime) { bool isMethodAdded = false; string token = Guid.NewGuid().ToString(); RestMethodResponse webResponse = new RestMethodResponse(); try { var webRequest = (HttpWebRequest)WebRequest.Create(r.Url); webRequest.ContentType = r.ContentType; webRequest.ContentLength = 0; webRequest.Method = r.Type.ToString().ToUpper(); webRequest.AllowAutoRedirect = true; //set headers if (r.SelectedHeaderTab == 0) { foreach (var kv in r.Headers) { webRequest.Headers.Add(string.Format("{0}:{1}", kv.Key, kv.Value)); } } else { if (!string.IsNullOrEmpty(r.HeaderText)) { var headers = r.HeaderText.Split(new[] { Environment.NewLine }, StringSplitOptions.None); foreach (var h in headers.Where(h => h.IndexOf(":", StringComparison.Ordinal) > -1)) { webRequest.Headers.Add(h); } } } //set post data var postData = r.SelectedPayloadTab == 0 ? string.Join("&", r.PayloadValues.Select(kv => string.Format("{0}={1}", kv.Key, kv.Value)).ToArray()) : r.PayloadText.Replace(Environment.NewLine, " "); if (!string.IsNullOrEmpty(postData) && (r.Type == RequestType.Post || r.Type == RequestType.Put)) { var bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(postData); webRequest.ContentLength = bytes.Length; using (var writeStream = webRequest.GetRequestStream()) { writeStream.Write(bytes, 0, bytes.Length); } } if (trackTime) InsertNewMethodLog(r.Url, token); isMethodAdded = true; if (trackTime) UpdateMethodLog(token, r.Url, MethodStatus.Started); var sw = new Stopwatch(); sw.Start(); try { using (var response = (HttpWebResponse)webRequest.GetResponse()) { if (response.StatusCode != HttpStatusCode.OK) { webResponse.StatusCode = response.StatusCode; var ellapsedTime2 = sw.ElapsedMilliseconds; if (trackTime) UpdateMethodLog(token, r.Url, MethodStatus.Fail, ellapsedTime2, string.Format("Status Code returned : {0}", response.StatusCode)); return webResponse; } // grab the response webResponse.StatusCode = response.StatusCode; using (var responseStream = response.GetResponseStream()) { if (responseStream == null) return webResponse; using (var reader = new StreamReader(responseStream)) { webResponse.Response = reader.ReadToEnd(); } } var ellapsedTime = sw.ElapsedMilliseconds; if (trackTime) UpdateMethodLog(token, r.Url, MethodStatus.Pass, ellapsedTime); return webResponse; } } catch (Exception ex) { var ellapsedTime1 = sw.ElapsedMilliseconds; if (trackTime) UpdateMethodLog(token, r.Url, MethodStatus.Fail, ellapsedTime1, ex.Message + " -- " + ex.StackTrace); webResponse.Response = ex.Message; webResponse.StatusCode = HttpStatusCode.InternalServerError; } } catch (Exception er) { if (isMethodAdded && trackTime) { UpdateMethodLog(token, r.Url, MethodStatus.Error, null, er.Message + " -- " + er.StackTrace); } webResponse.Response = er.Message; webResponse.StatusCode = HttpStatusCode.InternalServerError; } return webResponse; }
public void TestRestApi() { RestMethodResponse response = Test.InvokeRestApi(SelectedRestMethod, false); Controller.ShowRestApiResultView(response.StatusCode, response.Response, SelectedRestMethod.Guid); }