Як запустити єдиний тест з Носом в Пілонах


152

У мене є додаток 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

Який правильний синтаксис?

Відповіді:


233

nosetests appname.tests.functional.test_controllerповинен працювати, де файл названий test_controller.py.

Для запуску конкретного тестового класу та методу використовуйте шлях форми module.path:ClassNameInFile.method_name, тобто двокрапку, що розділяє шлях модуля / файлу та об'єкти у файлі. module.path- відносний шлях до файлу (наприклад tests/my_tests.py:ClassNameInFile.method_name).


1
А-а-а, єдину комбінацію я не намагався. зітхати . Дякую!
Бен

2
Це буде виконувати кожен тест у контрольному / модульному тесті. А як щодо використання єдиного методу тестування? Щось подібне appname.tests.functional.test_controller.name_of_test_method.
ryonlife

69
Для запуску конкретного тестового класу та методу використовуйте шлях форми module.path:ClassNameInFile.method_name, тобто двокрапку, що розділяє шлях модуля / файлу та об'єкти у файлі.
Джеймс Мерті

9
Для всіх, хто плутається: module.pathчи відносний шлях до файлу (наприклад my_tests.py:ClassNameInFile.method_name), а не шлях, який ви використовували б у importвиписці
bcoughlan

1
@bcoughlan Я додав це до відповіді! Це було справді заплутано.
schlamar

47

Для мене, що використовує 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

Зауважте, що одна назва двокрапки між назвою модуля та назвою класу.


1
Дякую за другий варіант, за допомогою автозаповнення bash, безумовно, найзручніший.
Петро Кільчук

Варто зауважити, що для виклику параметризованих тестів (тих, які використовують @ parameterized.expand) ви повинні використовувати цей синтаксис: test_file.py:ClassNameInFile.MethodName_TestNumber, де TestNumber може бути 1, 2, 3, ... один на параметризований тест
лука

2

Я повинен додати розширення файлу ".py", тобто

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

Можливо, це тому, що у мене немає ніяких класів у файлі. Без цього .pyніс скаржився:

Не вдається знайти тестовий_функція, що викликається, у файлі / path_to / my_file: файл не є модулем python

І це, хоча у мене є __init__.pyпапка /path_to/.


0

Я написав цей невеликий сценарій, грунтуючись на попередніх відповідях:

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

Наступне працювало для мене просто добре:

nosetests test_file.py:method_name

Зауважте, що мої тести там, де немає у класі. Методи тестування були в одному файлі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.