USER
ты технический писатель. Изучи и проанализируй текст "
# Команда bob test
## 1. Введение
Команда bob test — это мощный инструмент для автоматизации сборки и тестирования проекта. Она предоставляет широкие возможности для запуска различных типов тестов, фильтрации тестов по различным критериям, а также управления выводом результатов тестирования. Основная цель команды bob test — обеспечение эффективного и гибкого управления процессом тестирования, что позволяет разработчикам повысить качество кода и ускорить разработку.
Использование команды bob test обеспечивает разработчикам следующие ключевые возможности и преимущества:
### Ключевые возможности:
1. Запуск разных типов тестов:
- Поддержка различных размеров тестов: SMALL, MEDIUM и LARGE.
- Возможность запускать все тесты или выборочно по категориям.
2. Фильтрация тестов:
- Отбор тестов по имени, тегам, размеру, типу и другим параметрам.
- Фильтрация как на уровне отдельных тестов, так и на уровне наборов тестов (suite).
3. Управление выходными данными:
- Вывод списка тестов без выполнения.
- Прерывание тестового прогона при первой встреченной ошибке для экономии времени.
- Подробный вывод выполнения тестов.
4. Параллельный запуск тестов:
- Возможность разбить выполнение тестов на несколько параллельных частей (chunks) для ускорения их выполнения.
- Управление объемом параллельно выполняемых задач для оптимального использования ресурсов.
5. Канонизация и переканонизация тестов:
- Поддержка сравнения результатов тестов с эталонными данными для обеспечения консистентности.
- Возможность обновления эталонных данных по мере необходимости.
### Преимущества использования bob test:
1. Повышение производительности и эффективности:
- Запуск тестов в параллельном режиме позволяет значительно сократить время выполнения тестирования.
- Фильтрация тестов позволяет сосредоточиться только на актуальных тестах, что сокращает время цикла разработки.
2. Гибкость и настраиваемость:
- Широкий спектр параметров позволяет точно настроить процесс тестирования под конкретные нужды.
- Возможность задавать различные типы окружений тестов, что позволяет проводить тестирование в условиях, приближенных к реальным.
3. Удобство и упрощение работы с результатами тестов:
- Структурированный вывод результатов тестов упрощает анализ и поиск проблем.
- Возможность переиспользования результатов тестов и их частичная канонизация для улучшения повторяемости и надежности тестирования.
### Пример использования:
- Базовый запуск всех тестов:
bob test
- Запуск только маленьких тестов:
bob test -t
- Запуск тестов с фильтром по имени:
bob test -F “test_name_part”
## 2. Основные понятия
### Test
Test (Тест) — это индивидуальная проверка, написанная на поддерживаемом языке программирования. Тесты предназначены для проверки различных аспектов функциональности кода, включая корректность выполнения логики, соответствие стандартам оформления, устойчивость к ошибкам и покрытие тестами.
### Chunk
Chunk (Чанк) — сущность, обозначающая запуск программы с тестами в виде отдельного узла в графе команд сборки. Чанк включает в себя группу тестов, которые определены в рамках данного запуска, а также может обрабатывать ошибки, возникающие за пределами выполнения тестов.
### Suite
Suite (Набор тестов) — это коллекция нескольких тестов одного типа, которые имеют схожие зависимости и параметры. Suite используется для группировки и управления тестами с общими характеристиками.
### Взаимосвязь между понятиями
- Тесты объединяются в Chunk на основе общей логики и последовательности выполнения.
- Chunks группируются в Suite, который предоставляет контексты и параметры для всех входящих в него тестов.
- Suite является основной единицей для запуска и фильтрации тестов, а также отслеживания зависимостей и ошибок.
## 3. Основные опции запуска
### 3.1. Локальная работа с тестами и запуск тестов
Команда bob test предоставляет широкие возможности для запуска тестов в локальной среде разработки. Важно понимать следующие аспекты локальной работы:
- Все тесты локально запускаются в конфигурации debug.
- Локальный запуск тестов учитывает таймауты в зависимости от размера теста (SMALL, MEDIUM, LARGE).
- Результаты тестов сохраняются в директорию test-results.
Примеры команд:
- Запуск всех маленьких тестов:
bob test -t
- Запуск всех тестов:
bob test -A
### 3.2. Локальное тестирование для различных языков программирования
#### C++
Для написания тестов на C++ поддерживаются несколько фреймворков, таких как unittest и gtest.
Пример использования GTEST:
GTEST()
CXX_SRCS(test_file1.cpp test_file2.cpp)
PEERDIR(project/lib)
SIZE(SMALL)
TAG(unit_test)
REQUIREMENTS(cpu:4 ram:8192)
END()
#### Python
Основным фреймворком для написания тестов на Python является pytest.
Пример использования PY3TEST:
PY3TEST()
TEST_SRCS(test_example.py)
PEERDIR(//project/lib)
SIZE(SMALL)
TAG(integration_test)
REQUIREMENTS(cpu:2 ram:4096)
END()
### 3.3. Параллельный запуск тестов
Параллельный запуск тестов позволяет эффективно использовать ресурсы и сократить время выполнения тестов. Используются макросы FORK_TESTS, FORK_SUBTESTS, FORK_TEST_FILES и SPLIT_FACTOR.
Пример использования FORK_TESTS:
FORK_TESTS(SEQUENTIAL)
SPLIT_FACTOR(8)
### 3.4. Фильтрация и выборочное тестирование
#### Фильтрация по имени
bob test -F “subname”
#### Фильтрация по тегам
bob test --test-tag tag1+tag2-tag3
#### Фильтрация по размеру
bob test --test-size=MEDIUM
#### Фильтрация по типу
bob test --test-type unittest+gtest
### 3.5. Управление выводом результатов
#### Листинг тестов
bob test -L
#### Немедленное прекращение выполнения тестов при первой ошибке
bob test --fail-fast
#### Показать пройденные тесты
bob test -P
#### Показать пропущенные тесты
bob test --show-skipped-tests
#### Показать метрики тестов
bob test --show-metrics
## 4. Описание тестов в bob.make
### 4.1. Общие макросы
#### DEPENDS()
DEPENDS(project/lib)
#### SIZE()
SIZE(MEDIUM)
#### TIMEOUT()
TIMEOUT(120s)
#### TAG()
TAG(performance integration)
#### REQUIREMENTS()
REQUIREMENTS(cpu:4 disk_usage:10GB ram:8GB)
#### FORK_TESTS()
FORK_TESTS(SEQUENTIAL)
### 4.2. Проверки кода и данных
#### Python
##### flake8
STYLE_PYTHON()
##### black
STYLE_PYTHON()
##### Импорт-тесты
NO_CHECK_IMPORTS(devtools.pylibrary.)
#### Java
##### Java codestyle
LINT(strict)
##### Java classpath clashes
CHECK_JAVA_DEPS(yes)
#### Kotlin
NO_LINT(ktlint)
KTLINT_BASELINE_FILE(base_kotlin.kt)
#### Go
NO_LINT(gofmt)
#### C++
TEST_SRCS(test_file1.cpp test_file2.cpp)
SIZE(SMALL)
TAG(unit_test)
REQUIREMENTS(cpu:4 ram:8192)
END()
#### Frontend
NO_LINT(eslint)
## 5. Канонизация (и переканонизация) тестов
Канонизация позволяет сравнивать результаты тестов с эталонными данными.
Для включения канонизации используется опция:
bob test -Z
## 6. Тесты с санитайзером
Санитайзеры помогают автоматизированно проверять наличие различных ошибок.
Для запуска с санитайзером используется команда:
bob make -t --sanitize=<SANITIZE_TYPE>
## 7. Fuzzing (Фаззинг)
Фаззинг заключается в передаче приложению неправильно сформированных данных для выявления ошибок. Поддерживаются инструменты AFL и libFuzzer.
Пример использования:
bob make -A --sanitize=address --sanitize-coverage=trace-div,trace-gep
## 8. Exec-тесты
Exec-тесты позволяют выполнять произвольные команды и проверять их успешное завершение.
Пример Exec-теста:
OWNER(g:some-group)
EXECTEST()
RUN(
NAME my-test
ENV TZ=Europe/Moscow
echo “1”
STDIN {PROJECT_ROOT}/my-project/filename.txt
STDOUT {TEST_CASE_ROOT}/test.out
STDERR {TEST_CASE_ROOT}/test.err
CWD {PROJECT_BUILD_ROOT}/my-project
CANONIZE {TEST_CASE_ROOT}/test.out
)
END()
## 9. Логирование и управление отчетами
### 9.1. Управление выводом результатов
Команда bob test предоставляет несколько опций для управления выводом результатов тестирования, позволяя разработчикам контролировать объем информации, который возвращается после запуска тестов, и помогает быстрее находить и исправлять ошибки.
#### Листинг тестов
Опция -L или --list-tests позволяет вывести список тестов, которые будут выполнены без их фактического запуска. Это помогает убедиться, что нужные тесты включены в план тестирования.
bob test -L
#### Немедленное прекращение выполнения тестов
Опция --fail-fast позволяет завершить выполнение тестов сразу после первой неудачи, экономя время и ресурсы.
bob test --fail-fast
#### Показать пройденные тесты
Опция -P или --show-passed-tests позволяет увидеть подробный отчет о каждом успешном тесте.
bob test -P
#### Показать пропущенные тесты
Опция --show-skipped-tests показывает каждый пропущенный тест, что полезно для настройки фильтров и параметров тестирования.
bob test --show-skipped-tests
#### Показать метрики тестов
Опция --show-metrics выводит метрики тестов, что полезно для анализа производительности.
bob test --show-metrics
### 9.2. Отладочный режим
Опция --test-debug включает режим отладки тестов, выводя идентификатор процесса (PID) после запуска и добавляя дополнительные параметры.
bob test --test-debug
### 9.3. Запуск исполняемых тестов с дебаггером
Опции --pdb, --gdb, --dlv позволяют запускать тесты с интеграцией в различные дебаггеры.
bob test --gdb
## 10. Расширенные возможности
### 10.1. Параллельный запуск тестов
#### Основные концепции
Параллельный запуск тестов позволяет эффективно использовать ресурсы и сократить время выполнения тестов за счет их распараллеливания.
#### Макросы для параллельного выполнения тестов
Использование макросов FORK_TESTS, FORK_SUBTESTS, FORK_TEST_FILES и SPLIT_FACTOR позволяет настроить параллельный запуск тестов.
Пример использования FORK_TESTS:
FORK_TESTS(SEQUENTIAL)
SPLIT_FACTOR(8)
### 10.2. Выборочное тестирование
#### Фильтрация по имени
bob test -F “subname”
#### Фильтрация по тегам
bob test --test-tag tag1+tag2-tag3
#### Фильтрация по размеру
bob test --test-size=MEDIUM
#### Фильтрация по типу
bob test --test-type unittest+gtest
### 10.3. Канонизация тестов
Канонизация позволяет сравнивать результаты тестов с эталонными данными, обеспечивая консистентность тестирования.
Для включения канонизации используется команда:
bob test -Z
Пример канонизации данных в тестах на Python:
def test_example_function():
result = example_function()
return result # Эти данные будут канонизированы
### 10.4. Тесты с санитайзером
#### Основные типы санитайзеров
Санитайзеры помогают выявлять баги, которые сложно обнаружить обычными тестами. Поддерживаются следующие санитайзеры:
- address
- memory
- thread
- undefined
- leak
#### Параметризация опций санитайзеров
Опции санитайзеров передаются через переменные окружения. Разработчики могут зафиксировать конкретные опции санитайзеров через ENV, например:
ENV(ASAN_OPTIONS=detect_stack_use_after_return=1)
### 10.5. Fuzzing (Фаззинг)
Фаззинг заключается в передаче приложению неправильно сформированных данных для выявления ошибок.
Файл помощи:
Build and run all tests
bob test is alias for bob make -A
Usage:
bob test [OPTION]... [target]...
Examples:
bob test Build and run all tests
bob test -t Build and run small tests only
bob test -tt Build and run small and medium tests
bob test -L Print test names, don't run them
bob test -F "subname" Build and run test which name contains "subname"
Options:
bob operation control
-h, ~~help Print help. Use -hh for more options and -hhh for even more.
--rebuild Rebuild all
-C=BUILD_TARGETS, --target=BUILD_TARGETS
Targets to build
-k, --keep-going Build as much as possible
-j=BUILD_THREADS, --threads=BUILD_THREADS
Build threads count (default: 2)
--clear Clear temporary data
Build output
--add-result=ADD_RESULT
Process selected build output as a result
--add-protobuf-result
Process protobuf output as a result
--add-flatbuf-result
Process flatbuf output as a result
--replace-result Build only --add-result targets
--force-build-depends
Build by DEPENDS anyway
-R, --ignore-recurses
Do not build by RECURSES
--no-src-links Do not create any symlink in source directory
-o=OUTPUT_ROOT, --output=OUTPUT_ROOT
Directory with build results
Printing
--stat Show build execution statistics
-v, --verbose Be verbose
-T Do not rewrite output information (ninja/make)
Platform/build configuration
-d Debug build
-r Release build
--build=BUILD_TYPE Build type (debug, release, profile, gprof, valgrind, valgrind-release, coverage, relwithdebinfo, minsizerel, debugnoasserts, fastdebug) https://docs.bobndex-team.ru/bob-make/usage/bob_make/#build-type (default: debug)
--sanitize=SANITIZE Sanitizer type(address, memory, thread, undefined, leak)
--race Build Go projects with race detector
-D=FLAGS Set variables (name[=val], "yes" if val is omitted)
--host-platform-flag=HOST_PLATFORM_FLAGS
Host platform flag
--target-platform=TARGET_PLATFORMS
Target platform
--target-platform-flag=TARGET_PLATFORM_FLAG
Set build flag for the last target platform
Local cache
--cache-stat Show cache statistics
--gc Remove all cache except uids from the current graph
--gc-symlinks Remove all symlink results except files from the current graph
YT cache
--no-yt-store Disable YT storage
Testing
Run tests
-t, --run-tests Run tests (-t runs only SMALL tests, -tt runs SMALL and MEDIUM tests, -ttt runs SMALL, MEDIUM and FAT tests)
-A, --run-all-tests Run test suites of all sizes
-L, --list-tests List tests
Filtering
-X, --last-failed-tests
Restart tests which failed in last run for chosen target
-F=TESTS_FILTERS, --test-filter=TESTS_FILTERS
Run only test that matches . Asterics '' can be used in filter to match test subsets. Chunks can be filtered as well using pattern that matches '[] chunk'
--style Run only style tests and implies --strip-skipped-test-deps (classpath.clash clang_tidy eslint gofmt govet java.style ktlint py2_flake8 flake8 black ruff tsc_typecheck). Opposite of the --regular-tests
--regular-tests Run only regular tests (benchmark boost_test exectest fuzz g_benchmark go_bench go_test gtest hermione java jest py2test py3test pytest unittest). Opposite of the --style
Console report
-P, --show-passed-tests
Show passed tests
Canonization
-Z, --canonize-tests
Canonize selected tests
Debugging
--pdb Start pdb on errors
--gdb Run c++ unittests in gdb
--dlv Run go unittests in dlv
--test-debug Test debug mode (prints test pid after launch and implies --test-threads=1 --test-disable-timeout --retest --test-stderr)
Runtime environment
--test-param=TEST_PARAMS
Arbitrary parameters to be passed to tests (name=val)
--autocheck-mode Run tests locally with autocheck restrictions (implies --private-ram-drive and --private-net-ns)
Test uid calculation
--cache-tests Use cache for tests
--retest No cache for tests
Test dependencies
-b, --build-all Build targets that are not required to run tests, but are reachable with RECURSE's
File reports
--junit=JUNIT_PATH Path to junit report to be generated
Tests over YT
--run-tagged-tests-on-yt
Run tests marked with bob:yt tag on the YT
Tests over Sandbox
--run-tagged-tests-on-sandbox
Run tests marked with bob:force_sandbox tag on the Sandbox
Coverage
--python-coverage Collect python coverage information
--ts-coverage Collect ts coverage information
--go-coverage Collect go coverage information
--java-coverage Collect java coverage information
--clang-coverage Clang's source based coverage (automatically increases tests timeout at 1.5 times)
--coverage-report Build HTML coverage report (use with --output)
--nlg-coverage Collect Alice's NLG coverage information
Fuzzing
--fuzzing Extend test's corpus. Implies --sanitizer-flag=-fsanitize=fuzzer
--fuzz-case=FUZZ_CASE_FILENAME
Specify path to the file with data for fuzzing (conflicting with "~~fuzzing")
Pytest specific
--test-log-level=TEST_LOG_LEVEL
Specifies logging level for output test logs ("critical", "error", "warning", "info", "debug")
Hermione specific
--hermione-config=HERMIONE_CONFIG
Path to configuration file
--hermione-browser=HERMIONE_BROWSERS
Run tests only in specified browser
Java-specific
--sonar Analyze code with sonar.
--maven-export Export to maven repository"
Я буду задавать тебе вопросы по тексту, а ты должен мне отвечать. Напиши "ГОТОВ", если запомнил текст и готов работать