2010-09-13 16 views
133

Mam aplikację Pylons 1.0 z pakietem testów w katalogu test/funkcjonalny. Otrzymuję dziwne wyniki testu i chcę przeprowadzić pojedynczy test. Dokumentacja nos mówi, że powinienem być w stanie przejść w nazwie testowym w linii poleceń, ale pojawia ImportErrors bez względu na to, co robięJak uruchomić pojedynczy test z nosem w słupach

Na przykład:

nosetests -x -s sometestname 

Daje:

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 

Otrzymuję ten sam błąd dla

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

Jaki jest prawidłowy synt topór?

Odpowiedz

206

nosetests appname.tests.functional.test_controller powinien działać, jeśli plik ma nazwę test_controller.py.

Aby uruchomić określoną klasę i metodę testu, należy użyć ścieżki o formacie module.path:ClassNameInFile.method_name, czyli dwukropka oddzielającego ścieżkę modułu/pliku od obiektów w pliku. module.path to względna ścieżka do pliku (np. tests/my_tests.py:ClassNameInFile.method_name).

+1

Ahhh, z jedną kombinację nie spróbować. *westchnienie*. Dzięki! – Ben

+2

To spowoduje uruchomienie każdego testu w kontrolerze/module testowym. A co z uruchomieniem pojedynczej metody testowej? Coś jak "appname.tests.functional.test_controller.name_of_test_method". –

+66

Aby uruchomić określoną klasę i metodę testu, należy użyć ścieżki o nazwie 'module.path: nazwa_klasy_właściwości.nazwa_metody', tj. Z dwukropkiem oddzielającym ścieżkę moduł/plik od obiektów w pliku. –

42

Dla mnie wykorzystujące Nosetests 1.3.0 te warianty pracy (ale upewnij się, że masz __init__.py w folderze testów):

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

Należy zauważyć, że pojedynczy dwukropek między nazwą modułu i nazwę klasy.

+1

Dzięki za drugą opcję, z pomocą autouzupełniania bash zdecydowanie najdogodniejszy. –

+0

Właśnie tego szukałem, dzięki! – radtek

+0

Warto zauważyć, że do wywoływania sparametryzowanych testów (tych, które używają @ parameterized.expand) należy użyć następującej składni: test_file.py:ClassNameInFile.MethodName_TestNumber, gdzie TestNumber może być 1, 2, 3, ... jeden na sparametryzowany test – luca

2

muszę dodać „.py” rozszerzenie pliku, czyli

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

Może to dlatego, że nie mam żadnych klas w pliku. Bez .py, nos narzekał:

Can't find callable test_func_xy in file /path_to/my_file: file is not a python module

I chociaż mam __init__.py w folderze /path_to/.

0

pisałem ten mały skrypt, na podstawie poprzednich odpowiedzi:

#!/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" 
Powiązane problemy