diff options
| author | Maxim Yurchuk <[email protected]> | 2025-05-20 16:02:12 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-05-20 19:02:12 +0300 |
| commit | c64b2e2829e78b7ff758b6cf49bdc807e71fc67b (patch) | |
| tree | a807388124343805cb9e889b4a77148f1719f9ae | |
| parent | bca6912923bd629f3255d517d8905e3fd39082c1 (diff) | |
Stress test readme (#18538)
| -rw-r--r-- | ydb/tests/stress/README.md | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/ydb/tests/stress/README.md b/ydb/tests/stress/README.md new file mode 100644 index 00000000000..6400623ec9c --- /dev/null +++ b/ydb/tests/stress/README.md @@ -0,0 +1,39 @@ +# Стресс-тесты и утилиты для нагрузки + +**Стресс-тесты** — это тесты, которые организованы следующим образом: +- Разворачивается кластер YDB. +- На кластер подается нагрузка. +- Проверяется, что кластер YDB не упал. + +Преимущества тестов такого типа: +- Проверяется, что во время работы кластера не возникает ошибок типа VERIFY. +- При запуске с санитайзерами (ASan, MSan, TSan) возможно обнаружить дополнительные проблемы, так как задействован большой объем логики. +- Код для создания нагрузки может быть переиспользован в тестах совместимости и в тестах nemesis. + +## Как писать тесты такого типа + +С точки зрения кода тест должен быть разделён на две части: +- Утилита, которая создает нагрузку. +- Тест, который поднимает кластер и использует утилиту для генерации нагрузки. Тест должен запускать нагрузку и останавливать её через некоторое время (например, через 2 минуты). + +## Создание утилиты для подачи нагрузки + +Утилита должна поддерживать следующие аргументы: +```python + parser.add_argument("--endpoint", default="localhost:2135", help="An endpoint to be used") + parser.add_argument("--database", default="Root/test", help="A database to connect") + parser.add_argument("--path", default="olap_workload", help="A path prefix for tables") + parser.add_argument("--duration", default=10 ** 9, type=lambda x: int(x), help="A duration of workload in seconds.") +``` + +При реализации утилиты для нагрузки рекомендуется задействовать как можно больше функциональности в текущей области. Например, если пишется нагрузка на чтение и запись таблиц, стоит использовать разные типы, различные индексы, ALTER TABLE, создавать множество таблиц и т.д. Требуется генерировать нагрузку с высокой интенсивностью, то есть непрерывно совершать операции с кластером. Это помогает охватить больше логики YDB и выявить больше потенциальных проблем. + +## Примеры + +Пример реализации нагрузки можно посмотреть [здесь](olap_workload/__main__.py). + +Пример самого теста находится [здесь](olap_workload/tests/test_workload.py). + +Рекомендуемая структура директорий: +- `<stress_test_name>/__main__.py` — утилита для генерации нагрузки. +- `<stress_test_name>/tests` — директория с тестами, использующими эту нагрузку. |
