Интеграционные тесты
Этот документ содержит информацию о фреймворке интеграционного тестирования, используемом в данном проекте.
Обзор
Интеграционные тесты предназначены для проверки сквозной функциональности Qwen Code. Они запускают собранный бинарный файл в контролируемой среде и проверяют, что он ведет себя должным образом при взаимодействии с файловой системой.
Эти тесты находятся в каталоге integration-tests и запускаются с помощью пользовательского раннера тестов.
Запуск тестов
Интеграционные тесты не запускаются как часть стандартной команды npm run test. Их необходимо запускать явно с помощью скрипта npm run test:integration:all.
Интеграционные тесты также можно запустить, используя следующую команду:
npm run test:e2eЗапуск определенного набора тестов
Чтобы запустить подмножество файлов тестов, вы можете использовать npm run <команда интеграционного теста> <имя_файла1> ...., где <команда интеграционного теста> — это либо test:e2e, либо test:integration*, а <имя_файла> — любой из файлов .test.js в каталоге integration-tests/. Например, следующая команда запускает list_directory.test.js и write_file.test.js:
npm run test:e2e list_directory write_fileЗапуск одного теста по имени
Чтобы запустить один тест по его имени, используйте флаг --test-name-pattern:
npm run test:e2e -- --test-name-pattern "reads a file"Запуск всех тестов
Чтобы запустить весь набор интеграционных тестов, используйте следующую команду:
npm run test:integration:allМатрица песочниц
Команда all запустит тесты для no sandboxing, docker и podman.
Каждый отдельный тип можно запустить с помощью следующих команд:
npm run test:integration:sandbox:nonenpm run test:integration:sandbox:dockernpm run test:integration:sandbox:podmanДиагностика
Инструмент запуска интеграционных тестов предоставляет несколько опций диагностики, которые помогут отследить причины сбоев тестов.
Сохранение вывода теста
Вы можете сохранить временные файлы, созданные во время выполнения теста, для последующего анализа. Это полезно при отладке проблем с операциями файловой системы.
Чтобы сохранить вывод теста, установите переменную окружения KEEP_OUTPUT в значение true.
KEEP_OUTPUT=true npm run test:integration:sandbox:noneЕсли вывод сохраняется, инструмент запуска тестов выведет путь к уникальному каталогу для этого запуска теста.
Подробный вывод
Для более детальной отладки установите переменную окружения VERBOSE в значение true.
VERBOSE=true npm run test:integration:sandbox:noneПри одновременном использовании VERBOSE=true и KEEP_OUTPUT=true в одной команде вывод передается в консоль и также сохраняется в файл журнала внутри временного каталога теста.
Подробный вывод форматируется так, чтобы четко определить источник журналов:
--- TEST: <log dir>:<test-name> ---
... вывод из команды qwen ...
--- END TEST: <log dir>:<test-name> ---Проверка и форматирование
Чтобы обеспечить качество и согласованность кода, файлы интеграционных тестов проверяются в рамках основного процесса сборки. Вы также можете вручную запустить линтер и автоматическое исправление.
Запуск линтера
Чтобы проверить наличие ошибок линтинга, выполните следующую команду:
npm run lintВы можете добавить флаг :fix к команде, чтобы автоматически исправить все устранимые ошибки линтинга:
npm run lint:fixСтруктура каталогов
Интеграционные тесты создают уникальный каталог для каждого запуска теста внутри каталога .integration-tests. В этом каталоге создается подкаталог для каждого тестового файла, а в нем — подкаталог для каждого отдельного тестового случая.
Такая структура облегчает поиск артефактов для конкретного тестового запуска, файла или случая.
.integration-tests/
└── <run-id>/
└── <test-file-name>.test.js/
└── <test-case-name>/
├── output.log
└── ...другие тестовые артефакты...Непрерывная интеграция
Чтобы гарантировать, что интеграционные тесты всегда выполняются, в файле .github/workflows/e2e.yml определён рабочий процесс GitHub Actions. Этот рабочий процесс автоматически запускает интеграционные тесты для пул-реквестов в ветку main, либо когда пул-реквест добавляется в очередь слияния.
Рабочий процесс запускает тесты в различных средах песочниц, чтобы убедиться, что Qwen Code тестируется в каждой из них:
sandbox:none: Запуск тестов без использования песочницы.sandbox:docker: Запуск тестов в контейнере Docker.sandbox:podman: Запуск тестов в контейнере Podman.