Как запустить одиночный тест с помощью Nose в Pylons
У меня есть приложение Pylons 1.0 с кучей тестов в тестовом/функциональном каталоге.
Я получаю странные результаты тестов, и я хочу просто запустить один тест.
Документация носа говорит, что я должен иметь возможность передать тестовое имя в командной строке, но я получаю ImportErrors независимо от того, что я делаю
Например:
nosetests -x -s sometestname
дает:
Traceback (most recent call last):
File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.egg/nose/loader.py", line 371, in loadTestsFromName
module = resolve_name(addr.module)
File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.egg/nose/util.py", line 334, in resolve_name
module = __import__('.'.join(parts_copy))
ImportError: No module named sometestname
Я получаю ту же ошибку для
nosetests -x -s appname.tests.functional.testcontroller
Каков правильный синтаксис?
Ответы
Ответ 1
nosetests appname.tests.functional.test_controller
должен работать, где файл имеет имя test_controller.py
.
Для запуска определенного тестового класса и метода используйте путь к форме module.path:ClassNameInFile.method_name
, то есть с двоеточием, разделяющим путь модуля/файла и объекты в файле. module.path
- относительный путь к файлу (например, tests/my_tests.py:ClassNameInFile.method_name
).
Ответ 2
Для меня, используя Nosetests 1.3.0, эти варианты работают (но убедитесь, что у вас есть __init__.py
в папке с тестами):
nosetests [options] tests.ui_tests
nosetests [options] tests/ui_tests.py
nosetests [options] tests.ui_tests:TestUI.test_admin_page
Обратите внимание, что один двоеточие между именем модуля и именем класса.
Ответ 3
Мне нужно добавить расширение ".py", то есть
r'/path_to/my_file.py:' + r'test_func_xy'
Возможно, это потому, что у меня нет никаких классов в файле.
Без .py
нос жаловался:
Невозможно найти вызываемый test_func_xy в файле /path _to/my_file: файл не модуль python
И это, хотя у меня есть __init__.py
в папке /path_to/
.
Ответ 4
Я написал этот небольшой script, основываясь на предыдущих ответах:
#!/usr/bin/env bash
#
# Usage:
#
# ./noseTest <filename> <method_name>
#
# e.g.:
#
# ./noseTest test/MainTest.py mergeAll
#
# It is assumed that the file and the test class have the _same name_
# (e.g. the test class `MainTest` is defined in the file `MainTest.py`).
# If you don't follow this convention, this script won't work for you.
#
testFile="$1"
testMethod="$2"
testClass="$(basename "$testFile" .py)"
nosetests "$testFile:$testClass.test_$testMethod"
Ответ 5
Следующее сработало для меня просто хорошо:
nosetests test_file.py:method_name
Обратите внимание, что мои тесты, где не в классе. Методы испытаний были в одном файле.