Запустите все тесты в каталоге, используя Nose

Мне нужно иметь возможность запускать все тесты в текущем каталоге, набрав одну строку в оболочке Linux. В некоторых каталогах это работает нормально. Но в других, когда я набираю «nosetests», тесты не запускаются. Тесты будут запускаться, если я вызову их по отдельности, но мне нужно, чтобы все они запускались автоматически. Вот один из каталогов, который не будет работать:

/extwebserver
    __init__.py
    test_Detection.py
    test_Filesystem.py 
    test_Hardware.py
    ...

Когда я запускаю «nosetests» в родительском каталоге, запускаются все тесты в определенном подкаталоге, но не запускаются тесты из /extwebserver или других подкаталогов или самого родительского каталога.

ИЗМЕНИТЬ Вот результат:

matthew@Matthew-Laptop:~/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing$ nosetests -vv --collect-only
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/baseTestCase.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/extwebserver/run.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/extwebserver/test_Detection.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/extwebserver/test_Filesystem.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/extwebserver/test_Hardware.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/extwebserver/test_Mode.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/extwebserver/test_System.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/extwebserver/test_View.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/extwebserver/test_Webserver.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/mocks/bottle.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/utils/test_timestamps.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/testCamera.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/testCameraManager.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/testMainControllerServer.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/testMode.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/testPASEServerClient.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/testView.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/testViewsManager.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/test_commission/test_FSM.py is executable; skipped
nose.selector: INFO: /home/matthew/Documents/ParkAssist/m3/linux/appfs/master/usr/bin/piopio/testing/test_commission/test_Webserver.py is executable; skipped
test_add (testing.utils.test_config.test_config) ... ok
test_add_set (testing.utils.test_config.test_config) ... ok
test_load (testing.utils.test_config.test_config) ... ok
test_load_valid (testing.utils.test_config.test_config) ... ok
test_modify_set (testing.utils.test_config.test_config) ... ok
test_save (testing.utils.test_config.test_config) ... ok
test_update (testing.utils.test_config.test_config) ... ok
test_get_full_version (testing.utils.test_controller.test_controller) ... ok
test_get_hwaddr (testing.utils.test_controller.test_controller) ... ok
test_get_ip (testing.utils.test_controller.test_controller) ... ok
test_get_netmask (testing.utils.test_controller.test_controller) ... ok
test_get_version (testing.utils.test_controller.test_controller) ... ok
test_FloatEncoder (testing.utils.test_fileio.test_fileio) ... ok
test_read_file (testing.utils.test_fileio.test_fileio) ... ok
test_read_json_string (testing.utils.test_fileio.test_fileio) ... ok
test_system_to_text (testing.utils.test_fileio.test_fileio) ... ok
test_write_file (testing.utils.test_fileio.test_fileio) ... ok
test_get_hwaddr (testing.utils.test_netdev.test_netdev) ... ok
test_get_ip (testing.utils.test_netdev.test_netdev) ... ok
test_get_netmask (testing.utils.test_netdev.test_netdev) ... ok
test_set_datetime (testing.utils.test_syncdatetime.test_syncdatetime) ... ok
test_cast (testing.utils.test_tools.test_tools) ... ok
test_get_image (testing.testdetection.test_CameraGuardian.test_CameraGuardian) ... ok

----------------------------------------------------------------------
Ran 23 tests in 0.003s

person Matt    schedule 13.06.2011    source источник
comment
@Matt: Можете ли вы предоставить вывод nosetests -vv --collect-only, чтобы мы могли увидеть подробный вывод алгоритма обнаружения тестов носа?   -  person Matthew Rankin    schedule 13.06.2011
comment
У меня похожая проблема, и меня пропускают, потому что тест является исполняемым..?   -  person user2921139    schedule 16.10.2014


Ответы (2)


Из Тестирование Python: руководство для начинающих Дэниела Арбакла:

Nose ищет тесты в каталогах и модулях, имена которых начинаются с test и Test или содержат '_', '.' или '-', за которыми следует test или Test. Это значение по умолчанию, но на самом деле это еще не все.

Расширенное введение в среду модульного тестирования Nose показывает, что вы можете увидеть подробный вывод алгоритма обнаружения тестов носа, выполнив:

nosetests -vv --collect-only

Когда я запустил вышеуказанное в каталоге, я заметил, что Nose пропускает исполняемые файлы. Если это ваша проблема, вам нужно изменить режим файла на неисполняемый. В Mac OS X или Linux это можно сделать с помощью:

chmod 644 file.py

или похожие.

Если вы знаете, что ваши модули/файлы безопасны для импорта, вы можете запустить Nose с параметром --exe, чтобы «искать тесты в исполняемых модулях Python» (из `man Nosetests):

nosetests --exe
person Matthew Rankin    schedule 13.06.2011
comment
Я попытался переименовать каталоги, но он все еще не собирает из них тесты. Я пробовал формы test* и test_*, и ни один из них не работал. Я также запустил его с параметром --collect-only, и он перечислил файлы из подкаталога, которые были исполняемыми и поэтому были пропущены. Но я удалил путь к python.exe, и файлы по-прежнему указаны как исполняемые. - person Matt; 13.06.2011
comment
Попробуйте изменить режим файла на неисполняемый для файлов, которые пропустил Nose. - person Matthew Rankin; 13.06.2011
comment
Трюк с chmod сработал. Теперь он собирает все тесты из рабочего каталога и всех подкаталогов. Спасибо за помощь! - person Matt; 13.06.2011

Вы можете использовать --exe в командной строке, чтобы заставить нос считать исполняемые файлы допустимыми тестами. Если надоест каждый раз писать --exe, можно поставить строчку:

exe = Истина

в файле .noserc (для Unix/Linux) или Nose.cfg (для Windows) в вашем домашнем каталоге.

person Euribates    schedule 02.09.2011