static void Main(string[] args) { PerformanceProfiler.Profiler.Init(); RegisterPrograms(); if ((args.Length == 1) && (args[0] == "auto")) { MainLooped(args); } else { try { // Понять какой тест запускать if (args.Length == 0) { throw new Exception("Неуказана программа первым параметром командной строки."); } string programName = args[0]; Console.Write("\nИнициализация программы {0}...", programName); FabricateProgram programFabric = CustomProgram.FindProgram(programName); if (programFabric == null) { throw new Exception(String.Format("Программа {0} неопределена.", programName)); } // Создаем тест CustomProgram program = programFabric(); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("[OK]"); Console.ResetColor(); // Передать параметры ApplyParams(program, args); program.VerifyParameters(); program.WriteParametersToReport(); // Запустить тест try { program.Report.ProgramName = programName; program.Report.StartTime = DateTime.UtcNow; Console.WriteLine(" - Предпусковая подготовка..."); program.BeforeRun(); Console.WriteLine(" - Выполнение..."); program.Run(); program.Report.Success = true; // Передать результат } catch (Exception exception) { program.Report.Success = false; program.Report.ErrorText = exception.Message; program.OnError(exception); throw; } finally { Console.WriteLine(" - Завершение..."); try { program.AfterRun(); } finally { program.Report.FinishTime = DateTime.UtcNow; string report = program.ReportText(); try { Console.WriteLine("Отправка отчета"); ProjectManagerWebClient.SendReport(program.Report); } catch (Exception) { // stub } Console.WriteLine("Сохранение отчета в файл lastresult.json"); File.WriteAllText(@"lastReport.json", report); } } } catch (Exception e) { Console.ForegroundColor = ConsoleColor.DarkRed; Console.BackgroundColor = ConsoleColor.Yellow; Console.Write("\n\n [!] "); Console.ResetColor(); Console.WriteLine(" Ошибка выполнения - {0}", e.Message); } }
static void TryExecuteTask(TestTaskResponseBody data) { FabricateProgram programFabric = CustomProgram.FindProgram(data.program); try { if (programFabric == null) { throw new Exception(String.Format("Программа {0} не найдена", data.program)); } CustomProgram program = programFabric(); // Читаем настройки по-умолчанию string jsonText = File.ReadAllText(@"default.settings", System.Text.Encoding.UTF8); program.ReadParamsFromJson(jsonText); // Читаем параметры из тест-задачи program.ReadParameters(data); ProjectManagerWebClient.ApplyParamsToProgram(program); // Предварительная инициализация program.VerifyParameters(); program.WriteParametersToReport(); // Если на этом этапе все ок - отправляем серверу ПМ подтсверждение - что автотестировщик переходит в режим выполнения теста if (ProjectManagerWebClient.ConfirmTask(data.task)) { // Если подтверждение принято - начинаем тестирование try { program.Report.ProgramName = data.program; program.Report.StartTime = DateTime.UtcNow; program.BeforeRun(); program.Run(); program.Report.Success = true; } catch (Exception e) { program.Report.Success = false; program.Report.ErrorText = e.Message; program.OnError(e); } finally { try { program.AfterRun(); } finally { program.Report.FinishTime = DateTime.UtcNow; ProjectManagerWebClient.SendReport(program.Report); } } } } catch (Exception e) { ProjectManagerWebClient.RejectTestTask(data.task, e.Message); } }