|
| 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