static void Main() { DebugLog.EscribirLog("Inicio de la generacion del worker BDT"); GeneralWorkerNetFramework.RabbitMQ rabbitMQ = new GeneralWorkerNetFramework.RabbitMQ(); EstrategiaDTO strategy = rabbitMQ.GetMessages("QUEUE_BDT"); if (strategy != null) { for (int i = 0; i < strategy.TipoPruebas.First().CantidadEjecuciones; i++) { StartProcess(strategy); } } DebugLog.EscribirLog("Fin de la generacion del worker BDT"); Environment.Exit(0); }
/// <summary> /// Start with the process of environment preparation and test execution /// </summary> /// <param name="strategy"><see cref="EstrategiaDTO"/></param> static void StartProcess(EstrategiaDTO strategy) { DebugLog.EscribirLog("Procesando la estrategia " + strategy.Estrategia_ID); TipoPruebaController tipoPruebaController = new TipoPruebaController(); int idExecution = 0; try { WorkerStatus worker = new WorkerStatus(); worker.WorkerID = Convert.ToInt32(ConfigurationManager.AppSettings["WorkerID"]); worker.Estado.ID = 6; worker.TipoPrueba = "QUEUE_BDT"; WorkerController workerController = new WorkerController(); workerController.UpdateWorkerStatus(worker); foreach (TipoPruebaDTO tipoPrueba in strategy.TipoPruebas) { DebugLog.EscribirLog("Procesando la prueba " + tipoPrueba.ID); ScriptFile scriptFile = new ScriptFile(); //guarda en el historico de ejecucion de pruebas idExecution = tipoPruebaController.InsertEjecucionTipoPrueba(strategy.Estrategia_ID, strategy.TipoPruebas[0].ID, 0, "", EstadoEnum.EnEjecucion); //ruta donde se encuentra el archivo del script string testProject = Path.Combine(ConfigurationManager.AppSettings["RutaScript"]); //ruta destino temporal string destinationFolder = @"C:\Temp"; DebugLog.EscribirLog("id ejecucion " + idExecution); string destinationPath = string.Concat(destinationFolder, @"\", tipoPrueba.Script.Script); DebugLog.EscribirLog(destinationPath); //ruta de origen del script string scriptPath = string.Concat(testProject, tipoPrueba.Script.Script, tipoPrueba.Script.Nombre, tipoPrueba.Script.Extension); //si la ruta destino no existe se crea if (!File.Exists(destinationPath)) { Directory.CreateDirectory(destinationPath); } DebugLog.EscribirLog("creo ruta de temp"); // Extract the zip file GeneralWorkerNetFramework.ActionsFile actionsFile = new GeneralWorkerNetFramework.ActionsFile(); actionsFile.UnzipFile(scriptPath, destinationPath); // Create json structure file //string projectPath = //@"F:\Universidad de los Andes\MISO\Pruebas Automaticas\T Grupal\-201920_MISO4208\PrestashopTest"; string dataDestinationFolder = Path.Combine(destinationPath, @"Prestashop.Core\fixtures\data.json"); DebugLog.EscribirLog("ruta del fixtures"); //parametros de mockaroo #region Mockaroo ParametersRequest parameters = new ParametersRequest { ApiController = tipoPrueba.ApiController, Key = tipoPrueba.ApiKey }; JsonFile jsonFile = new JsonFile(); int numberDataGenerated = jsonFile.GenerateData(parameters, dataDestinationFolder); #endregion // Reemplaza tokens del script DebugLog.EscribirLog(destinationPath); #region Reemplazar tokens IEnumerable <string> featureFiles = scriptFile.GetFeatureFiles(destinationPath); // Replace tokens with random position object of json file DebugLog.EscribirLog("inicio del reemplazo tokens"); foreach (string featureFile in featureFiles) { scriptFile.ReplaceTokens(featureFile, numberDataGenerated); } DebugLog.EscribirLog("reemplazo tokens"); #endregion // Executes Cypress script if (strategy != null) { DebugLog.EscribirLog("ruta del package"); string package = destinationPath + "\\" + "BDT.TestProject"; DebugLog.EscribirLog("fin ruta del fixtures"); // Install the node modules for each of the test project var psiNpmRunDist = new ProcessStartInfo { FileName = "cmd.exe", RedirectStandardInput = true, UseShellExecute = false, WorkingDirectory = package }; DebugLog.EscribirLog("Abiendo CMD " + package); using (var pNpmRunDist = Process.Start(psiNpmRunDist)) { StringBuilder output = new StringBuilder(); pNpmRunDist.StandardInput.WriteLine("npm i"); Thread.Sleep(1000); pNpmRunDist.StandardInput.WriteLine("npx cypress run " + tipoPrueba.Parametros); pNpmRunDist.WaitForExit(360000); pNpmRunDist.Close(); } DebugLog.EscribirLog("marca como finalizado"); //marca como finalizado } } } catch (Exception ex) { DebugLog.EscribirLog("error " + ex.Message); Console.WriteLine("error " + ex); //en caso de error envia nuevamente a la cola Dispatcher rabbit = new Dispatcher(); rabbit.EnviaMensajes(strategy); } finally { DebugLog.EscribirLog("Liberando el worker"); WorkerStatus worker = new WorkerStatus(); worker.WorkerID = Convert.ToInt32(ConfigurationManager.AppSettings["WorkerID"]); worker.Estado.ID = 5; worker.TipoPrueba = "QUEUE_BDT"; WorkerController workerController = new WorkerController(); workerController.UpdateWorkerStatus(worker); DebugLog.EscribirLog("Fin del proceso de la estrategia " + strategy.Estrategia_ID); tipoPruebaController.InsertEjecucionTipoPrueba(strategy.Estrategia_ID, strategy.TipoPruebas[0].ID, idExecution, "", EstadoEnum.WorkerLibre); } }