Skip to content

Commit c64b2e2

Browse files
authored
Stress test readme (#18538)
1 parent bca6912 commit c64b2e2

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

ydb/tests/stress/README.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Стресс-тесты и утилиты для нагрузки
2+
3+
**Стресс-тесты** — это тесты, которые организованы следующим образом:
4+
- Разворачивается кластер YDB.
5+
- На кластер подается нагрузка.
6+
- Проверяется, что кластер YDB не упал.
7+
8+
Преимущества тестов такого типа:
9+
- Проверяется, что во время работы кластера не возникает ошибок типа VERIFY.
10+
- При запуске с санитайзерами (ASan, MSan, TSan) возможно обнаружить дополнительные проблемы, так как задействован большой объем логики.
11+
- Код для создания нагрузки может быть переиспользован в тестах совместимости и в тестах nemesis.
12+
13+
## Как писать тесты такого типа
14+
15+
С точки зрения кода тест должен быть разделён на две части:
16+
- Утилита, которая создает нагрузку.
17+
- Тест, который поднимает кластер и использует утилиту для генерации нагрузки. Тест должен запускать нагрузку и останавливать её через некоторое время (например, через 2 минуты).
18+
19+
## Создание утилиты для подачи нагрузки
20+
21+
Утилита должна поддерживать следующие аргументы:
22+
```python
23+
parser.add_argument("--endpoint", default="localhost:2135", help="An endpoint to be used")
24+
parser.add_argument("--database", default="Root/test", help="A database to connect")
25+
parser.add_argument("--path", default="olap_workload", help="A path prefix for tables")
26+
parser.add_argument("--duration", default=10 ** 9, type=lambda x: int(x), help="A duration of workload in seconds.")
27+
```
28+
29+
При реализации утилиты для нагрузки рекомендуется задействовать как можно больше функциональности в текущей области. Например, если пишется нагрузка на чтение и запись таблиц, стоит использовать разные типы, различные индексы, ALTER TABLE, создавать множество таблиц и т.д. Требуется генерировать нагрузку с высокой интенсивностью, то есть непрерывно совершать операции с кластером. Это помогает охватить больше логики YDB и выявить больше потенциальных проблем.
30+
31+
## Примеры
32+
33+
Пример реализации нагрузки можно посмотреть [здесь](olap_workload/__main__.py).
34+
35+
Пример самого теста находится [здесь](olap_workload/tests/test_workload.py).
36+
37+
Рекомендуемая структура директорий:
38+
- `<stress_test_name>/__main__.py` — утилита для генерации нагрузки.
39+
- `<stress_test_name>/tests` — директория с тестами, использующими эту нагрузку.

0 commit comments

Comments
 (0)