Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

## Возможности

- **Гибкая настройка:** конфигурация тестов через аннотации или программный код.
- **Гибкая настройка:** конфигурация тестов через аннотации, программный код и CLI.
- **Параметризованные тесты:** запуск одних и тех же тестов с разными входными данными.
- **Мониторинг памяти:** отслеживание аллокации памяти во время выполнения.
- **Метрики:** время выполнения (среднее, минимум, максимум), стандартное отклонение и ошибка, операций в секунду (Op/s), квартили и произвольные процентили.
Expand Down Expand Up @@ -75,11 +75,9 @@ opm install benchmark
**CLI:**

```bash
benchos run [FILE]
benchos run [OPTIONS] [FILE]
```

`FILE` - имя файла класса бенчмарков в текущем каталоге, либо полный путь к нему

**API:**

```bsl
Expand All @@ -89,7 +87,7 @@ benchos run [FILE]
Результат = Бенчмаркинг.Запустить(Тип("КонкатенацияСтрок"));
```

Более подробно можно почитать в [документации](docs/ЗапускБенчмарков.md).
Более подробно про запуск бенчмарков можно почитать в [документации](docs/ЗапускБенчмарков.md).

## 4. Просмотр результатов

Expand Down
46 changes: 46 additions & 0 deletions docs/CLI.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# CLI

## Команда `run`

Запускает бенчмарки по указанному файлу, имени класса или директории.

```bash
benchos run [OPTIONS] [FILE]
```

### Опции

| Опция | Описание | Пример |
| --- | --- | --- |
| `-r`, `--recursive` | Рекурсивный поиск в поддиректориях | |
| `--iterationCount` | Количество измерительных итераций | `--iterationCount 10 ` |
| `--iterationTime` | Минимальное время выполнения одной итерации (мс) | `--iterationTime 500` |
| `--warmupCount` | Количество прогревочных итераций | `--warmupCount 10` |
| `--invocationCount` | Количество вызовов метода за итерацию | `--invocationCount 100` |
| `-m`, `--memory` | Включить мониторинг использования памяти | |
| `-e`, `--exporters` | Форматы экспорта результатов (`md`, `json`, `xml`, `html`) | `-e json,xml` |
| `-a`, `--artifacts` | Каталог для сохранения результатов | `-a path/to/file` |
| `--throughput` | Стратегия выполнения [`ПропускнаяСпособность`](ВыборСтратегииЗапуска.md#пропускнаяспособность) | |
| `--coldstart` | Стратегия выполнения [`ХолодныйЗапуск`](ВыборСтратегииЗапуска.md#холодныйзапуск) | |

## Примеры

```bash
# Запуск по имени класса (файл МойКласс.os должен существовать в текущей директории)
benchos run МойКласс

# Запуск по имени файла в текущей директории
benchos run МойКласс.os

# Запуск по абсолютному пути
benchos run /path/to/МойКласс.os

# Запуск всех бенчмарков в директории
benchos run /path/to/benchmarks

# Запуск всех бенчмарков в директории, включая вложенные каталоги
benchos run -r /path/to/benchmarks

# Рекурсивный запуск с мониторингом памяти и экспортом в JSON
benchos run -r -m -e json ./benchmarks/
```
1 change: 1 addition & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
- [Статистика](Статистика.md)
- [Сортировка отчета](СортировкаОтчета.md)
- [Экспорт результатов](ЭкспортРезультатов.md)
- [CLI](CLI.md)
- [Аннотации](../src/BenchmarkOneScript/annotations/Классы)

## Примеры
Expand Down
6 changes: 2 additions & 4 deletions docs/БыстрыйСтарт.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,9 @@ opm install benchmark
**CLI:**

```bash
benchos run [FILE]
benchos run [OPTIONS] [FILE]
```

`FILE` - имя файла класса бенчмарков в текущем каталоге, либо полный путь к нему

**API:**

```bsl
Expand All @@ -63,7 +61,7 @@ benchos run [FILE]
Результат = Бенчмаркинг.Запустить(Тип("КонкатенацияСтрок"));
```

Более подробно можно почитать в [документации](ЗапускБенчмарков.md).
Более подробно про запуск бенчмарков можно почитать в [документации](ЗапускБенчмарков.md).

## 4. Просмотр результатов

Expand Down
13 changes: 8 additions & 5 deletions docs/ЗапускБенчмарков.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
## CLI

```bash
benchos run [FILE]
benchos run [OPTIONS] [FILE]
```

`FILE` - имя файла класса бенчмарков в текущем каталоге, либо полный путь к нему
Более подробно про CLI можно почитать в [документации](CLI.md).

**Примеры использования:**
### Примеры использования

```bash
# Запуск по имени класса (файл МойКласс.os должен существовать в текущей директории)
Expand All @@ -20,11 +20,14 @@ benchos run МойКласс.os
# Запуск по абсолютному пути
benchos run /path/to/МойКласс.os

# Запуск из каталога
# Запуск всех бенчмарков в директории
benchos run /path/to/benchmarks

# Запуск из каталога, включая вложенные каталоги
# Запуск всех бенчмарков в директории, включая вложенные каталоги
benchos run -r /path/to/benchmarks

# Рекурсивный запуск с мониторингом памяти и экспортом в JSON
benchos run -r -m -e json ./benchmarks/
```

## API
Expand Down
2 changes: 1 addition & 1 deletion samples/api/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ oscript [FILE]

`FILE` - путь к файлу примера.

Например:
Пример:

```bash
oscript ./ЗапускБенчмарковПример.os
Expand Down
10 changes: 7 additions & 3 deletions samples/benchmarks/Классы/README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
Примеры бенчмарков можно запустить в консоле командой:

```bash
benchos run [FILE]
benchos run [OPTIONS] [FILE]
```

`FILE` - путь к файлу бенчмарка.
Более подробно можно почитать в [документации](../../../docs/CLI.md).

Например:
Примеры:

```bash
# Запуск конкретного класса с бенчмарками
benchos run ./БенчмаркБазовый.os

# Запуск всех бенчмарков в текущем каталоге
benchos run .
```
137 changes: 123 additions & 14 deletions src/BenchmarkOneScript/cmd/Классы/КомандаЗапуска.os
Original file line number Diff line number Diff line change
Expand Up @@ -4,48 +4,86 @@
#Использовать fs
#Использовать logos

&Опция(Имя = "r recursive", Описание = "Искать бенчмарки во вложенных каталогах")
&Опция(Имя = "r recursive", Описание = "Рекурсивный поиск в поддиректориях")
&Флаг
&ПоУмолчанию(Ложь)
Перем Рекурсивно;
Перем _Рекурсивно; // Булево

&Опция(Имя = "m memory", Описание = "Включить мониторинг использования памяти")
&Флаг
Перем _МониторингПамяти; // Булево

&Опция(Имя = "iterationCount", Описание = "Количество измерительных итераций")
&ТЧисло
Перем _КоличествоИтераций; // Число

&Опция(Имя = "iterationTime", Описание = "Минимальное время выполнения одной итерации в миллисекундах")
&ТЧисло
Перем _МинимальноеВремяИтерации; // Число

&Опция(Имя = "warmupCount", Описание = "Количество прогревочных итераций")
&ТЧисло
Перем _КоличествоПрогревочныхИтераций; // Число

&Опция(Имя = "invocationCount", Описание = "Количество вызовов метода за итерацию")
&ТЧисло
Перем _КоличествоВызововЗаИтерацию; // Число

&Опция(Имя = "e exporters", Описание = "Форматы экспорта результатов (md, json, xml, html)")
&ТСтрока
Перем _Экспортеры; // Строка

&Опция(Имя = "a artifacts", Описание = "Каталог для сохранения результатов")
&ТСтрока
Перем _КаталогАртефактов; // Строка

&Опция(Имя = "coldstart", Описание = "Стратегия 'Холодный запуск'")
&ТБулево
Перем _ХолодныйЗапуск; // Булево, Неопределено

&Опция(Имя = "throughput", Описание = "Стратегия 'Пропускная способность'")
&ТБулево
Перем _ПропускнаяСпособность; // Булево, Неопределено

&Аргумент(Имя = "FILE", Описание = "Каталог, полный путь к файлу или имя файла в текущей директории")
&ТСтрока
Перем ПутьКФайлу;
Перем _ПутьКФайлу; // Строка

Перем _Лог;

&КомандаПриложения(Имя = "run", Описание = "Запускает бенчмарки")
&КомандаПриложения(Имя = "run", Описание = "Запуск бенчмарков")
Процедура ПриСозданииОбъекта()
КонецПроцедуры

&ВыполнениеКоманды
Процедура Запустить() Экспорт
Если ФС.КаталогСуществует(ПутьКФайлу) Тогда
Бенчмаркинг.ЗапуститьИзКаталога(ПутьКФайлу, Рекурсивно);

Если ФС.КаталогСуществует(_ПутьКФайлу) Тогда
Бенчмаркинг.ЗапуститьИзКаталога(_ПутьКФайлу, _Рекурсивно, Конфигурация());
Возврат;
КонецЕсли;

Файл = ФайлКласса();
Файл = ФайлСценария();
Если Файл = Неопределено Тогда
_Лог.Ошибка("Файл <%1> не существует", ПутьКФайлу);
_Лог.Ошибка("Файл <%1> не существует", _ПутьКФайлу);
Возврат;
КонецЕсли;

Тип = Бенчмаркинг.ПодключитьКласс(Файл.ПолноеИмя);
Если Не Тип = Неопределено Тогда
Бенчмаркинг.Запустить(Тип);
Конфигурация = Новый КонфигурацияБенчмарков(Тип);
Конфигурация.Объединить(Конфигурация());
Бенчмаркинг.Запустить(Тип, Конфигурация);
КонецЕсли;

КонецПроцедуры

Функция ФайлКласса()
Функция ФайлСценария()

ВариантыПутей = Новый Массив();
ВариантыПутей.Добавить(ПутьКФайлу);
ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), ПутьКФайлу));
ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), ПутьКФайлу + ".os"));
ВариантыПутей.Добавить(_ПутьКФайлу);
ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), _ПутьКФайлу));
ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), _ПутьКФайлу + ".os"));

Для Каждого Путь Из ВариантыПутей Цикл
Файл = Новый Файл(Путь);
Expand All @@ -56,4 +94,75 @@

КонецФункции

Функция Конфигурация()

Конфигурация = Новый КонфигурацияБенчмарков();

Если _МониторингПамяти = Истина Тогда
Конфигурация.ДобавитьМониторингПамяти();
КонецЕсли;

Если ЭтоЧисло(_КоличествоИтераций) Тогда
Конфигурация.УстановитьКоличествоИтераций(_КоличествоИтераций);
КонецЕсли;

Если ЭтоЧисло(_МинимальноеВремяИтерации) Тогда
Конфигурация.УстановитьМинимальноеВремяИтерации(_МинимальноеВремяИтерации);
КонецЕсли;

Если ЭтоЧисло(_КоличествоПрогревочныхИтераций) Тогда
Конфигурация.УстановитьКоличествоПрогревочныхИтераций(_КоличествоПрогревочныхИтераций);
КонецЕсли;

Если ЭтоЧисло(_КоличествоВызововЗаИтерацию) Тогда
Конфигурация.УстановитьКоличествоВызововЗаИтерацию(_КоличествоВызововЗаИтерацию);
КонецЕсли;

Если ЗначениеЗаполнено(_КаталогАртефактов) Тогда
Конфигурация.УстановитьКаталогАртефактов(_КаталогАртефактов);
КонецЕсли;

Если _ХолодныйЗапуск = Истина Тогда
Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск);
КонецЕсли;

Если _ПропускнаяСпособность = Истина Тогда
Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ПропускнаяСпособность);
КонецЕсли;

ПрочитатьЭкспортеры(Конфигурация);

Возврат Конфигурация;

КонецФункции

Функция ЭтоЧисло(Значение)
Возврат ТипЗнч(Значение) = Тип("Число");
КонецФункции

Процедура ПрочитатьЭкспортеры(Конфигурация)

Если Не ЗначениеЗаполнено(_Экспортеры) Тогда
Возврат;
КонецЕсли;

ДопустимыеЗначения = Новый Соответствие();
ДопустимыеЗначения.Вставить("markdown", "Markdown");
ДопустимыеЗначения.Вставить("json", "Json");
ДопустимыеЗначения.Вставить("xml", "Xml");
ДопустимыеЗначения.Вставить("html", "Html");

Для Каждого Экспортер Из СтрРазделить(_Экспортеры, ", ", Ложь) Цикл

Имя = ДопустимыеЗначения[НРег(Экспортер)];

ТекстОшибки = СтрШаблон("Неизвестный экспортер %1. Допустимые значения: markdown, json, xml, html", Экспортер);
Ожидаем.Что(Имя, ТекстОшибки).Заполнено();

Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков[Имя]);

КонецЦикла;

КонецПроцедуры

_Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.cli");
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Использовать delegate

Перем _Тип; // Тип - Тип класса бенчмарков
Перем _Тип; // Тип - Класс бенчмарков
Перем _Метод; // Строка - Метод бенчмарка
Перем _ЭтоЭталон; // Булево
Перем _Категория; // Строка
Expand All @@ -24,7 +24,7 @@

КонецПроцедуры

// Тип класса бенчмарков
// Класс бенчмарков
//
// Возвращаемое значение:
// Тип
Expand Down
Loading