From c64b2e2829e78b7ff758b6cf49bdc807e71fc67b Mon Sep 17 00:00:00 2001 From: Maxim Yurchuk Date: Tue, 20 May 2025 16:02:12 +0000 Subject: Stress test readme (#18538) --- ydb/tests/stress/README.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 ydb/tests/stress/README.md 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). + +Рекомендуемая структура директорий: +- `/__main__.py` — утилита для генерации нагрузки. +- `/tests` — директория с тестами, использующими эту нагрузку. -- cgit v1.3