Локальный запуск тестов SciPy#
Основное написание и выполнение тестов из интерпретатора Python описано в
Рекомендации по тестированию NumPy/SciPy. Эта страница
включает информацию о запуске тестов из командной строки с использованием
dev.py инструмент командной строки. Примечание: перед началом убедитесь, что pytest
установлен.
Примечание
The dev.py интерфейс является самодокументируемым, в том смысле, что все на этой странице и больше (включая примеры использования для каждой команды) можно получить с помощью python dev.py --help и для отдельных команд, таких как
python dev.py . В этом случае можно проверить
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или--paralleln для взаимодействия 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.