public GeneralTests() { parser = new Parser(); custom_variables = new Dictionary<string, string>(); custom_variables.Add("first", "second"); custom_variables.Add("x", "42"); }
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; }
/// <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; }