コード例 #1
0
        /// <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;
            });
        }
コード例 #2
0
ファイル: TestEngine.cs プロジェクト: huoxudong125/WCFLoadUI
        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;
        }
コード例 #3
0
        public void TestRestApi()
        {
            RestMethodResponse response = Test.InvokeRestApi(SelectedRestMethod, false);

            Controller.ShowRestApiResultView(response.StatusCode, response.Response, SelectedRestMethod.Guid);
        }