[python] 앱에 tests 디렉토리가있을 때 Django에서 특정 테스트 케이스 실행
Django 설명서 ( http://docs.djangoproject.com/en/1.3/topics/testing/#running-tests )에 따르면 다음과 같이 지정하여 개별 테스트 사례를 실행할 수 있다고합니다.
$ ./manage.py test animals.AnimalTestCase
이것은 Django 응용 프로그램의 tests.py 파일에 테스트가 있다고 가정합니다. 이것이 사실이면이 명령은 예상대로 작동합니다.
tests 디렉토리에 Django 애플리케이션에 대한 테스트가 있습니다.
my_project/apps/my_app/
├── __init__.py
├── tests
│ ├── __init__.py
│ ├── field_tests.py
│ ├── storage_tests.py
├── urls.py
├── utils.py
└── views.py
tests/__init__.py
파일은 스위트 () 함수가 있습니다 :
import unittest
from my_project.apps.my_app.tests import field_tests, storage_tests
def suite():
tests_loader = unittest.TestLoader().loadTestsFromModule
test_suites = []
test_suites.append(tests_loader(field_tests))
test_suites.append(tests_loader(storage_tests))
return unittest.TestSuite(test_suites)
내가하는 테스트를 실행하려면 :
$ ./manage.py test my_app
개별 테스트 사례를 지정하려고하면 예외가 발생합니다.
$ ./manage.py test my_app.tests.storage_tests.StorageTestCase
...
ValueError: Test label 'my_app.tests.storage_tests.StorageTestCase' should be of the form app.TestCase or app.TestCase.test_method
예외 메시지가 말한 것을하려고했습니다.
$ ./manage.py test my_app.StorageTestCase
...
ValueError: Test label 'my_app.StorageTestCase' does not refer to a test
테스트가 여러 파일에있을 때 개별 테스트 사례를 어떻게 지정합니까?
답변
체크 아웃은 장고 – 코를 . 다음과 같이 실행할 테스트를 지정할 수 있습니다.
python manage.py test another.test:TestCase.test_method
또는 주석에서 언급했듯이 다음 구문을 사용하십시오.
python manage.py test another.test.TestCase.test_method
답변
Django 1.6부터 실행하려는 요소에 대한 완전한 점 표기법을 사용하여 완전한 테스트 사례 또는 단일 테스트를 실행할 수 있습니다.
자동 테스트 검색은 작업 디렉토리 아래에서 test로 시작하는 모든 파일에서 테스트를 찾으 므로 파일 이름을 바꿔야하는 질문을 해결하지만 원하는 디렉토리 안에 유지할 수 있습니다. 커스텀 파일 이름을 사용하려면 옵션 플래그를 사용하여 패턴 (기본 장고 테스트 러너)을 지정할 수 있습니다 --pattern="my_pattern_*.py"
.
당신이 당신에 따라서 경우 manage.py
디렉토리와 테스트를 실행하려면 test_a
내부 TestCase
서브 클래스를 A
파일 내부 tests.py
응용 프로그램에서 / 모듈 example
당신이 할 것입니다 :
python manage.py test example.tests.A.test_a
의존성을 포함하고 싶지 않고 Django 1.6 이상에 있다면 그렇게하는 방법입니다.
답변
나는이 문제를 직접 겪고 있었고 다른 사람이 올 경우를 대비 하여이 질문을 찾았습니다. DjangoTestSuiteRuner는 build_test (label)라는 메소드를 사용하여 레이블을 기반으로 실행할 테스트 케이스를 파악합니다. 이 방법을 살펴보면 “models”또는 “test”모듈에서 getattr ()을 수행하는 것으로 나타났습니다. 즉, 스위트를 반환하면 테스트 러너가 해당 스위트에서 테스트 케이스를 찾지 않고 해당 모듈 중 하나만 찾습니다.
빠른 해결 방법 __init__.py
은 제품군을 정의하는 대신 테스트를 직접 가져 오는 것입니다. 이렇게하면 “test”모듈의 일부가되므로 build_test (label)에서 찾을 수 있습니다.
위의 예에서 tests/__init__.py
간단히 다음을 포함해야합니다.
from field_tests import *
from storage_tests import *
이것은 매우 우아하지 않으며 물론 스위트로 더 복잡한 것을하려고하면 작동하지 않지만이 경우에는 효과가 있습니다.
답변
이 작동합니다
python manage.py test my_app.tests.storage_tests
답변
나는 또한이 문제에 부딪 쳤고 django-nose 대신 http://www.pioverpi.net/2010/03/10/organizing-django-tests-into-folders/ 링크를 따라갔습니다 . init 을 열어야합니다 .py 테스트를 가져와야합니다.
init .py의 예 :from unique_test_file import *
답변
이 코드를 __init__.py에 넣으면 패키지 및 하위 패키지의 모든 테스트 클래스를 가져옵니다. 이렇게하면 모든 파일을 수동으로 가져 오지 않고도 특정 테스트를 실행할 수 있습니다.
import pkgutil
import unittest
for loader, module_name, is_pkg in pkgutil.walk_packages(__path__):
module = loader.find_module(module_name).load_module(module_name)
for name in dir(module):
obj = getattr(module, name)
if isinstance(obj, type) and issubclass(obj, unittest.case.TestCase):
exec ('%s = obj' % obj.__name__)
마찬가지로 테스트 스위트의 경우 다음을 간단히 사용할 수 있습니다.
def suite():
return unittest.TestLoader().discover("appname.tests", pattern="*.py")
이제 새로운 테스트를 위해해야 할 일은 테스트를 작성하고 테스트 폴더에 있는지 확인하는 것입니다. 수입품을 더 이상 지루하게 유지하지 않아도됩니다!