summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxim Yurchuk <[email protected]>2025-05-20 16:02:12 +0000
committerGitHub <[email protected]>2025-05-20 19:02:12 +0300
commitc64b2e2829e78b7ff758b6cf49bdc807e71fc67b (patch)
treea807388124343805cb9e889b4a77148f1719f9ae
parentbca6912923bd629f3255d517d8905e3fd39082c1 (diff)
Stress test readme (#18538)
-rw-r--r--ydb/tests/stress/README.md39
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` — директория с тестами, использующими эту нагрузку.