J'ai une application Pylons 1.0 avec un tas de tests dans le répertoire test/fonctionnel ..__ Je reçois des résultats de test étranges et je veux juste lancer un seul test. La documentation sur le nez indique que je devrais être capable de passer un nom de test sur la ligne de commande, mais j'obtiens ImportErrors peu importe ce que je fais.
Par exemple:
nosetests -x -s sometestname
Donne:
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
Je reçois la même erreur pour
nosetests -x -s appname.tests.functional.testcontroller
Quelle est la syntaxe correcte?
nosetests appname.tests.functional.test_controller
devrait fonctionner, où le fichier est nommé test_controller.py
.
Pour exécuter une classe et une méthode de test spécifiques, utilisez un chemin d'accès de la forme module.path:ClassNameInFile.method_name
, c'est-à-dire avec deux points séparant le chemin du module/fichier et les objets du fichier. module.path
est le chemin relatif du fichier (par exemple tests/my_tests.py:ClassNameInFile.method_name
).
Pour moi, avec Nosetests 1.3.0, ces variantes fonctionnent (mais assurez-vous que vous avez __init__.py
dans votre dossier tests):
nosetests [options] tests.ui_tests
nosetests [options] tests/ui_tests.py
nosetests [options] tests.ui_tests:TestUI.test_admin_page
Notez que deux points entre le nom du module et le nom de la classe.
Je dois ajouter l'extension de fichier ".py", c'est-à-dire
r'/path_to/my_file.py:' + r'test_func_xy'
C'est peut-être parce que je n'ai aucune classe dans le fichier. Sans le .py
, le nez se plaignait:
Impossible de trouver callable test_func_xy dans le fichier/path_to/my_file: le fichier n'est pas un module python
Et ceci bien que j'ai un __init__.py
dans le dossier /path_to/
.
Ce qui suit a bien fonctionné pour moi:
nosetests test_file.py:method_name
Notez que mes tests n'étaient pas dans une classe. Les méthodes de test étaient dans un seul fichier.
J'ai écrit ce petit script, basé sur les réponses précédentes:
#!/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"