Pylons에서 Nose로 단일 테스트를 실행하는 방법


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
아, 내가 시도하지 않은 하나의 조합. 한숨 . 감사!
Ben

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 자동 완성 기능을 사용하여 두 번째 옵션을 사용하는 것이 가장 편리합니다.
Peter Kilczuk

매개 변수화 된 테스트 (@ parameterized.expand를 사용하는 테스트)를 호출하려면 test_file.py:ClassNameInFile.MethodName_TestNumber 구문을 사용해야합니다. 여기서 TestNumber는 1, 2, 3, ... 매개 변수화 된 테스트
luca

2

".py"파일 확장명을 추가해야합니다.

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

파일에 클래스가 없기 때문일 수 있습니다. 이 없으면 .py코가 불평했습니다.

/ path_to / my_file 파일에서 호출 가능한 test_func_xy를 찾을 수 없습니다 : 파일이 파이썬 모듈이 아닙니다

그리고 이것은 __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

수업 중이 아닌 곳에서 테스트합니다. 테스트 방법은 단일 파일에있었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.