Пример #1
0
        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();
        }
Пример #2
0
        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);
            }
        }