Интеграционные тесты
Этот документ содержит информацию о фреймворке интеграционного тестирования, используемом в этом проекте.
Обзор
Интеграционные тесты предназначены для проверки сквозной функциональности Qwen Code. Они выполняют собранный бинарный файл в контролируемой среде и проверяют, что он ведет себя ожидаемым образом при взаимодействии с файловой системой.
Эти тесты находятся в каталоге integration-tests и запускаются с помощью пользовательского средства запуска тестов.
Запуск тестов
Интеграционные тесты не выполняются как часть команды по умолчанию npm run test. Их необходимо запускать явно с помощью скрипта npm run test:integration:all.
Интеграционные тесты также можно запустить с помощью следующего сокращения:
npm run test:e2eЗапуск определенного набора тестов
Чтобы запустить подмножество тестовых файлов, можно использовать npm run <команда интеграционного теста> <имя_файла1> ..., где <команда интеграционного теста> — это либо test:e2e, либо test:integration*, а <имя_файла> — любой из файлов .test.ts в каталоге integration-tests/. Например, следующая команда запускает list_directory.test.ts и write_file.test.ts:
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Матрица изоляции (sandbox)
Команда 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> ---
... output from the qwen command ...
--- END TEST: <log dir>:<test-name> ---Линтинг и форматирование
Для обеспечения качества и согласованности кода файлы интеграционных тестов проверяются линтером в рамках основного процесса сборки. Вы также можете запустить линтер и автоисправление вручную.
Запуск линтера
Чтобы проверить наличие ошибок линтинга, выполните следующую команду:
npm run lintВы можете добавить флаг :fix в команду, чтобы автоматически исправить все исправимые ошибки линтинга:
npm run lint:fixСтруктура каталогов
Интеграционные тесты создают уникальный каталог для каждого запуска теста внутри каталога .integration-tests. Внутри этого каталога создается подкаталог для каждого тестового файла, а внутри него — подкаталог для каждого отдельного тестового сценария.
Такая структура упрощает поиск артефактов для конкретного запуска теста, файла или сценария.
.integration-tests/
└── <run-id>/
└── <test-file-name>.test.ts/
└── <test-case-name>/
├── output.log
└── ...other test artifacts...Непрерывная интеграция
Чтобы интеграционные тесты всегда выполнялись, в файле .github/workflows/e2e.yml определен рабочий процесс GitHub Actions. Этот рабочий процесс автоматически запускает интеграционные тесты для запросов на слияние в ветку main или при добавлении запроса на слияние в очередь слияния.
Рабочий процесс запускает тесты в различных средах изоляции (sandbox), чтобы гарантировать тестирование Qwen Code в каждой из них:
sandbox:none: Запускает тесты без какой-либо изоляции.sandbox:docker: Запускает тесты в контейнере Docker.sandbox:podman: Запускает тесты в контейнере Podman.