Wie führe ich einen einzelnen Test mit Nose in Pylons durch?


152

Ich habe eine Pylons 1.0-App mit einer Reihe von Tests im Verzeichnis test / function. Ich erhalte seltsame Testergebnisse und möchte nur einen einzigen Test ausführen. Die Nasen-Dokumentation besagt, dass ich in der Lage sein sollte, einen Testnamen über die Befehlszeile zu übergeben, aber ich erhalte ImportErrors, egal was ich tue

Beispielsweise:

nosetests -x -s sometestname

Gibt:

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

Ich bekomme den gleichen Fehler für

nosetests -x -s appname.tests.functional.testcontroller

Was ist die richtige Syntax?

Antworten:


233

nosetests appname.tests.functional.test_controllersollte funktionieren, wo die Datei benannt ist test_controller.py.

Verwenden Sie zum Ausführen einer bestimmten Testklasse und -methode einen Pfad des Formulars module.path:ClassNameInFile.method_name, dh einen Doppelpunkt, der den Modul- / Dateipfad und die Objekte in der Datei trennt. module.pathist der relative Pfad zur Datei (z tests/my_tests.py:ClassNameInFile.method_name. B. ).


1
Ahhh, die eine Kombination, die ich nicht ausprobiert habe. seufz . Vielen Dank!
Ben

2
Dadurch wird jeder Test in einem Testcontroller / -modul ausgeführt. Was ist mit einer einzelnen Testmethode? So etwas wie appname.tests.functional.test_controller.name_of_test_method.
Ryonlife

69
Verwenden Sie zum Ausführen einer bestimmten Testklasse und -methode einen Pfad des Formulars module.path:ClassNameInFile.method_name, dh einen Doppelpunkt, der den Modul- / Dateipfad und die Objekte in der Datei trennt.
James Murty

9
Für alle anderen verwirrt: module.pathist der relative Pfad zur Datei (z. B. my_tests.py:ClassNameInFile.method_name), nicht der Pfad, den Sie in einer importAnweisung verwenden würden
bcoughlan

1
@bcoughlan Ich habe dies zur Antwort hinzugefügt! Das war wirklich verwirrend.
Schlamar

47

Bei Verwendung von Nosetests 1.3.0 funktionieren diese Varianten (stellen Sie jedoch sicher, dass Sie sie __init__.pyin Ihrem Testordner haben ):

nosetests [options] tests.ui_tests
nosetests [options] tests/ui_tests.py
nosetests [options] tests.ui_tests:TestUI.test_admin_page

Beachten Sie den einzelnen Doppelpunkt zwischen Modulname und Klassenname.


1
Vielen Dank für die zweite Option, mit Hilfe von Bash Autocomplete definitiv die bequemste.
Peter Kilczuk

Es ist zu beachten, dass Sie zum Aufrufen parametrisierter Tests (diejenigen, die @ parameterized.expand verwenden) diese Syntax verwenden müssen: test_file.py:ClassNameInFile.MethodName_TestNumber, wobei TestNumber 1, 2, 3, ... eins pro sein kann parametrisierter Test
Luca

2

Ich muss die Dateierweiterung ".py" hinzufügen, d. H.

r'/path_to/my_file.py:' +  r'test_func_xy'

Vielleicht liegt das daran, dass ich keine Klassen in der Datei habe. Ohne die .pybeschwerte sich die Nase:

Callable test_func_xy kann in Datei / path_to / my_file nicht gefunden werden: Datei ist kein Python-Modul

Und das obwohl ich einen __init__.pyim Ordner habe /path_to/.


0

Ich habe dieses kleine Skript basierend auf den vorherigen Antworten geschrieben:

#!/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"

0

Folgendes hat bei mir einfach gut funktioniert:

nosetests test_file.py:method_name

Beachten Sie, dass meine Tests nicht in einer Klasse waren. Die Testmethoden befanden sich in einer einzigen Datei.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.