static void Main(string[] args) { Stopwatch globalSw = Stopwatch.StartNew(); DateTime globalStartTime = DateTime.Now; MetricsProvider metrics = new MetricsProvider(globalSw, globalStartTime); metrics.AddEvent(EventType.Start); Console.WriteLine("Средство нагрузочного тестирования веб-сервисов \"Норма\". Ланит, 2020"); Console.WriteLine(); if (args.Length == 0) { WriteErrorMessage("Не задан параметр командной строки"); return; } if (args.Length > 1) { WriteErrorMessage("Слишком много параметров командной строки"); return; } if (string.IsNullOrWhiteSpace(args[0]) || !File.Exists(args[0])) { WriteErrorMessage("Не найден файл \"" + args[0] + "\""); return; } Console.WriteLine("Проверка конфигурации и подготовка к проведению теста..."); // Загрузка конфигурации metrics.AddEvent(EventType.LoadConfigStart); string json = File.ReadAllText(args[0]); Config config = null; try { config = Newtonsoft.Json.JsonConvert.DeserializeObject <Config>(json); } catch { WriteErrorMessage("Файл \"" + args[0] + "\" содержит некорректные данные"); return; } metrics.AddEvent(EventType.LoadConfigEnd); metrics.SetConfig(json, config); if (config == null) { WriteErrorMessage("Файл \"" + args[0] + "\" содержит некорректные данные"); return; } // Проведение теста ConfigReportData crd; using (Engine engine = new Engine(config, args[0], metrics)) { try { if (!engine.Prepare()) { WriteErrorMessage(engine.GetError()); return; } Console.WriteLine("Подготовка к тесту завершена"); Console.WriteLine(); engine.Run(); crd = engine.GetConfigReportData(); } catch (Exception ex) { WriteErrorMessage(ex.ToString()); return; } } metrics.AddEvent(EventType.Complete); Console.WriteLine("Сохранение отчётов..."); metrics.WriteLogs(crd); Console.WriteLine("Нажмите ENTER для завершения"); Console.ReadLine(); }
internal bool Prepare() { try { _metrics.AddEvent(EventType.PrepareTestStart); if (!CheckConfig()) { return(false); } if (_threads > 10000) { _bufferSize = 32 * 1024; } else if (_threads > 1000) { _bufferSize = 80 * 1024; } else if (_threads > 500) { _bufferSize = 128 * 1024; } else if (_threads > 200) { _bufferSize = 256 * 1024; } else if (_threads > 100) { _bufferSize = 512 * 1024; } else { _bufferSize = 1024 * 1024; } try { _metrics.AddEvent(EventType.LoadDataFileStart); LoadDataFile(); } finally { _metrics.AddEvent(EventType.LoadDataFileEnd); } try { _metrics.AddEvent(EventType.LoadTemplatesStart); LoadTemplates(); } finally { _metrics.AddEvent(EventType.LoadTemplatesEnd); } PrepareAllTraceFolders(); return(true); } finally { _metrics.AddEvent(EventType.PrepareTestEnd); } }