Локальный запуск тестов SciPy#

Основное написание и выполнение тестов из интерпретатора Python описано в Рекомендации по тестированию NumPy/SciPy. Эта страница включает информацию о запуске тестов из командной строки с использованием dev.py инструмент командной строки. Примечание: перед началом убедитесь, что pytest установлен.

Примечание

The dev.py интерфейс является самодокументируемым, в том смысле, что все на этой странице и больше (включая примеры использования для каждой команды) можно получить с помощью python dev.py --help и для отдельных команд, таких как python dev.py --help. В этом случае можно проверить python dev.py test --help.

Чтобы запустить все тесты, перейдите в корневую директорию SciPy в командной строке и выполните

python dev.py test

Это собирает SciPy (или обновляет существующую сборку) и запускает тесты.

Чтобы запустить тесты для конкретного подмодуля, например, optimize, используйте --submodule опция:

python dev.py test -s optimize

Для запуска конкретного тестового модуля используйте синтаксис Pytest: --test (или -t):

python dev.py test -t scipy.<module>.tests.<test_file>

Пример для scipy/optimize/tests/test_linprog.py файловые тесты, запустите:

python dev.py test -t scipy.optimize.tests.test_linprog

Для запуска тестового класса:

python dev.py test -t scipy.<module>.tests.<test_file>::<TestClass>

Пример для TestLinprogRSCommon класс из test_linprog.py:

python dev.py test -t scipy.optimize.tests.test_linprog::TestLinprogRSCommon

Для запуска конкретного теста:

python dev.py test -t scipy.<module>.tests.<test_file>::<test_name>

Пример для test_unknown_solvers_and_options из test_linprog.py:

python dev.py test -t scipy.optimize.tests.test_linprog::test_unknown_solvers_and_options

Для тестов внутри класса необходимо указать имя класса и имя теста:

python dev.py test -t scipy.<module>.tests.<test_file>::<TestClass>::<test_name>

Пример:

python dev.py test -t scipy.optimize.tests.test_linprog::TestLinprogRSCommon::test_nontrivial_problem_with_guess

Другие полезные опции включают:

  • -v или --verbose, который активирует опцию verbose для более подробного вывода.

  • -b или --array-api-backend бэкенд для включения альтернативных бэкендов массивов в тесты, совместимые с array-api. См. Поддержка стандарта array API подробности.

  • --coverage для генерации отчёта о покрытии тестами в scipy/build/coverage/index.html. Примечание: pytest-cov должен быть установлен.

  • -n или --no-build чтобы предотвратить обновление сборки SciPy перед тестированием

  • -j или --parallel n для взаимодействия n ядер при сборке SciPy; например. python dev.py test -j 4 задействует четыре ядра. Начиная с #10172 это также запускает тесты на четырех ядрах, если pytest-xdist установлен.

  • -m full или --mode full для запуска «полного» набора тестов, включая тесты, помеченные slow (например, с @pytest.mark.slow). Обратите внимание, что это не запустить тесты отмечены xslow; см. советы ниже.

  • -- для отправки оставшихся аргументов командной строки в pytest вместо dev.py test. Например, в то время как -n отправлено в pytest.py активирует --no-build опция, -n отправлено в pytest запускает тесты на нескольких ядрах; например, python dev.py test -- -n 4 запускает тесты, используя четыре ядра. Примечание: pytest-xdist должен быть установлен для тестирования на нескольких ядрах. Общие аргументы командной строки для pytest включать:

    • --durations=m для отображения длительности самых медленных m тесты. Используйте --durations=0 вместе с --durations-min=x отображать длительности всех тестов с длительностями, превышающими x секунд.

    • --fail-slow=x чтобы вызвать сбой теста, если они превысят x секунд. (Примечание: pytest-fail-slow должен быть установлен.)

    • --timeout=x остановить все выполнение тестов, если любой тест превышает время x секунд. (Примечание: pytest-timeout должен быть установлен.)

Для получения гораздо больше информации о pytest, см. pytest документация.

Советы:#

Если вы собрали SciPy из исходников, но испытываете проблемы с запуском тестов после изменения кодовой базы, попробуйте удалить scipy/build каталог. Это принудительно dev.py для полной пересборки SciPy перед выполнением тестов.

Существует дополнительный уровень очень медленных тестов (несколько минут), которые отключены даже при вызове python dev.py test -m full. Их можно включить, установив переменную окружения SCIPY_XSLOW=1 перед запуском набора тестов.

По умолчанию тесты, которые используют Hypothesis запустить с deterministic профиль, определённый в scipy/scipy/conftest.py. Этот профиль включает настройку Hypothesis derandomize=True так что одни и те же примеры используются до тех пор, пока не обновятся Hypothesis, Python или тестовая функция. Чтобы лучше использовать возможности Hypothesis для поиска контрпримеров, выберите nondeterministic профиль, установив переменную окружения SCIPY_HYPOTHESIS_PROFILE=nondeterministic перед запуском набора тестов. Количество запускаемых примеров можно настроить, отредактировав выбранную конфигурацию, например, добавив max_examples=100_000.