Пример #1
0
 public GeneralTests()
 {
     parser = new Parser();
     custom_variables = new Dictionary<string, string>();
     custom_variables.Add("first", "second");
     custom_variables.Add("x", "42");
 }
Пример #2
0
 public Scenario(Dictionary<string, string> values, String type, String operation, Parser parser, Boolean[] useTemplate, Dictionary<string, string> customVariables)
 {
     this.values = values;
     this.type = type;
     this.operation = operation;
     this.parser = parser;
     this.useTemplate = useTemplate;
     this.customVariables = customVariables;
 }
Пример #3
0
        /// <summary>
        /// Running request worker.
        /// </summary>
        public static void ThreadWorker(object RunningObject)
        {
            // Clear running objects
            List<Scenario> Scenarios = new List<Scenario>();
            RunningObjects.Clear();

            // Add all scenarios
            if (RunningObject is Server)
            {
                Scenarios = ((Server)RunningObject).Scenarios;
            }
            else
                Scenarios.Add((Scenario)RunningObject);

            // Set all scenarios to before-running time!
            foreach (var s in Scenarios)
            {
                // Change icon
                ChangeIcon(s.TreePosition, ScenarioImage);

                // Create variables if not exists
                if (s.customVariables == null)
                    s.customVariables = new Dictionary<string, string>();

                // Change icons
                foreach (var r in s.Requests)
                    ChangeIcon(r.TreePosition, RequestImage);
            }

            // First
            bool first = true;

            // Run scenarios in specific order
            foreach (var s in Scenarios.OrderBy(n => n.Position))
            {
                // Running success?
                bool success = true;

                // Scenariio is running!
                RunningObjects.Add(s.TreePosition);

                // Waiting time
                if (first == false && s.TimeAfterPrevious > 0)
                {
                    int time = s.TimeAfterPrevious;
                    while (time > 0)
                    {
                        ChangeIcon(s.TreePosition, text: string.Format("{0} ({1} s)", s.Name, time));
                        Thread.Sleep(1000);
                        time--;
                    }
                    ChangeIcon(s.TreePosition, text: s.Name);
                }
                first = false;

                foreach (var r in s.Requests.OrderBy(n => n.Position))
                {
                    // Add to running objects
                    RunningObjects.Add(r.TreePosition);

                    // Wait?
                    if (r.WaitAfterPreviousRequest > 0)
                    {
                        int time = r.WaitAfterPreviousRequest;
                        while (time > 0)
                        {
                            ChangeIcon(r.TreePosition, text: string.Format("{0} ({1} s)", r.Name, time));
                            Thread.Sleep(1000);
                            time--;
                        }
                        ChangeIcon(r.TreePosition, text: r.Name);
                    }

                    // Set running variables
                    bool valid = false;
                    RestResponse response = null;
                    string RequestBody = null;
                    int RepeatCounter = r.RepeatsCounter;

                    do
                    {
                        // Reset variables
                        valid = false;

                        // Clear result
                        r.ClearResults();

                        // Parser
                        Parser p = new Parser();

                        // Prepare URL
                        ParserResult result = Parser.parseHeader(r.Url, r.ParentScenario.customVariables);
                        if (result.isSuccess() == false)
                        {
                            // Headers
                            r.AddResultViewItem(1, Director.Properties.Resources.ErrorGeneratingUrl + ":");

                            // Errors
                            foreach (var i in result.getErrors())
                            {
                                r.AddResultViewItem(2, i.getMessage());
                            }

                            // Change icon
                            ChangeIcon(r.TreePosition, ERORImage);
                            success = false;
                            break;
                        }
                        // Erro result
                        String URL = result.getResult();

                        // Body
                        RequestBody = null;

                        // Create RestRequest
                        var request = new RestRequest(r.RequestMethod);

                        // Prepare template
                        if (r.RequestTemplate != null && r.RequestTemplate.Length > 0)
                        {
                            if (r.RequestTemplateType == ContentType.PLAIN)
                            {
                                RequestBody = r.RequestTemplate;
                                request.AddParameter("text/plain", RequestBody, ParameterType.RequestBody);
                            }
                            else
                            {
                                string jsonData = r.RequestTemplate;

                                if (r.RequestTemplateType == ContentType.XML)
                                {
                                    XmlDocument doc = new XmlDocument();
                                    doc.LoadXml(jsonData);
                                    jsonData = Newtonsoft.Json.JsonConvert.SerializeXmlNode(doc);
                                }

                                // Generate
                                result = p.generateRequest(jsonData, r.ParentScenario.customVariables);

                                // Cannot generate reqeust!
                                if (result.isSuccess() == false)
                                {
                                    // Write errors!
                                    r.AddResultViewItem(1, Director.Properties.Resources.ErrorWhenGeneratingTemplate + ":");

                                    // Errors
                                    foreach (var i in result.getErrors())
                                    {
                                        r.AddResultViewItem(2, i.getMessage());
                                    }

                                    // Change icon
                                    ChangeIcon(r.TreePosition, ERORImage);
                                    success = false;
                                    break;
                                }

                                // Parameter
                                if (result.getResult() != null && result.getResult().Length > 0)
                                {
                                    if (r.RequestTemplateType == ContentType.XML)
                                    {
                                        RequestBody = JsonConvert.DeserializeXmlNode(result.getResult()).ToString();
                                        request.RequestFormat = DataFormat.Xml;
                                        request.AddParameter("application/xml", RequestBody, ParameterType.RequestBody);
                                    }
                                    else
                                    {
                                        request.RequestFormat = DataFormat.Json;
                                        RequestBody = result.getResult();
                                        request.AddParameter("application/json", result.getResult(), ParameterType.RequestBody);
                                    }
                                }
                            }
                        }

                        // Prepare headers
                        foreach (var h in r.Headers)
                        {
                            result = Parser.parseHeader(h.Value, r.ParentScenario.customVariables);
                            if (result.isSuccess() == false)
                            {
                                // Headers
                                r.AddResultViewItem(1, Director.Properties.Resources.ErrorWhenGeneratingHeaders + ":");

                                // Errors
                                foreach (var i in result.getErrors())
                                {
                                    r.AddResultViewItem(2, i.getMessage());
                                }

                                // Change icon
                                ChangeIcon(r.TreePosition, ERORImage);
                                success = false;
                                break;
                            }
                            // Add header
                            request.AddHeader(h.Name, result.getResult());
                        }

                        // Prepare error...
                        r.AddResultViewItem(1, Director.Properties.Resources.Error + ":");

                        // Send
                        response = Director.Remote.Remote.SendRemoteRequest(r, request, URL);

                        // Response
                        p = new Parser();
                        ParserResult res = null;

                        if (r.ResponseTemplate != null && r.ResponseTemplate.Length > 0)
                        {
                            string json = r.ResponseTemplate;
                            string jsonBody = response.Content;
                            if (r.ResponseTemplateType == ContentType.XML)
                            {
                                // Convert to JSON both of them
                                XmlDocument doc = new XmlDocument();
                                doc.LoadXml(json);
                                json = Newtonsoft.Json.JsonConvert.SerializeXmlNode(doc);

                                doc = new XmlDocument();
                                doc.LoadXml(jsonBody);
                                jsonBody = Newtonsoft.Json.JsonConvert.SerializeXmlNode(doc);
                            }

                            res = p.parseResponse(json, jsonBody, s.customVariables, true);
                        }

                        // Parse response
                        if (response.ResponseStatus != ResponseStatus.Completed)
                        {
                            r.AddResultViewItem(2, string.Format(Director.Properties.Resources.RequestNotSuccessfull, response.ResponseStatus.ToString()));
                        }
                        else if (r.ExpectedStatusCode != -1 && ((int)response.StatusCode) != r.ExpectedStatusCode)
                        {
                            // Set error message:
                            r.AddResultViewItem(2, string.Format(Director.Properties.Resources.InvalidReturnCode, r.ExpectedStatusCode, (int)response.StatusCode));
                        }
                        else if (res is ParserResult && !res.isSuccess())
                        {
                            foreach (var er in res.getErrors())
                                r.AddResultViewItem(2, er.getMessage());
                        }
                        else
                        {
                            valid = true;
                            r.ClearResults();
                            r.AddResultViewItem(1, Director.Properties.Resources.ResultIsOk);
                        }

                        if (valid == true)
                            break;

                        // Set repeats counter
                        RepeatCounter--;

                        // Wait propriet time
                        int BetweenTime = r.RepeatsTimeout;
                        if (RepeatCounter >= 0)
                        {
                            if (BetweenTime > 0)
                            {
                                Console.WriteLine("Waiting for {0}s", BetweenTime);
                                while (BetweenTime > 0)
                                {
                                    ChangeIcon(r.TreePosition, text: string.Format("{0} ({1} s)", r.Name, BetweenTime));
                                    Thread.Sleep(1000);
                                    BetweenTime--;
                                }
                                r.AddResultViewItem(2, string.Format(Director.Properties.Resources.TryNumberOfTotals, RepeatCounter, r.RepeatsCounter));
                                RefreshCurrentServer = true;
                                ChangeIcon(r.TreePosition, text: r.Name);
                            }
                        }

                        // Loop again
                    } while (RepeatCounter >= 0);

                    // Add response headers
                    r.AddResultViewItem(1, Director.Properties.Resources.ResponseHeaders + ":");

                    // Iterate
                    foreach (var h in response.Headers)
                        r.AddResultViewItem(2, string.Format("{0} - {1}", h.Name, h.Value));

                    // Add request content
                    r.AddResultViewItem(1, Director.Properties.Resources.RequestTab + ":");

                    // Response
                    String formatted = (RequestBody != null && RequestBody.Length > 0) ? JSONFormatter.Format(RequestBody) : null;

                    // Request box
                    if (formatted != null)
                        r.AddResultViewItem(3, formatted);
                    else if (RequestBody == null || RequestBody.Length == 0)
                        r.AddResultViewItem(2, Director.Properties.Resources.RequestBodyIsEmpty);
                    else
                        r.AddResultViewItem(3, RequestBody);

                    // Add response content
                    r.AddResultViewItem(1, Director.Properties.Resources.Response + ":");

                    // Response
                    formatted = (response.Content != null && response.Content.Length > 0) ? JSONFormatter.Format(response.Content) : null;

                    // Request box
                    if (formatted != null)
                        r.AddResultViewItem(3, formatted);
                    else if (response.Content == null || response.Content.Length == 0)
                        r.AddResultViewItem(2, Director.Properties.Resources.ResponseBodyIsEmpty);
                    else
                        r.AddResultViewItem(3, response.Content);

                    // Refresh UI
                    RefreshCurrentServer = true;

                    // Remove from running
                    RunningObjects.Remove(r.TreePosition);

                    // Set error image
                    if (valid)
                        ChangeIcon(r.TreePosition, OKImage);
                    else
                    {
                        ChangeIcon(r.TreePosition, ERORImage);
                        success = false;
                        break;
                    }
                }

                RunningObjects.Remove(s.TreePosition);
                if (success)
                    ChangeIcon(s.TreePosition, ScenarioImage);
                else
                    ChangeIcon(s.TreePosition, ERORImage);
            }

            // Remove all running objects
            RunningObjects.Clear();

            // Remove thread
            WorkingThread = null;
        }