easy_install을 사용하여 Mac에 pytest를 설치하고 파일 구조가 다음과 같은 프로젝트에 대한 테스트 작성을 시작했습니다.
repo/
repo/app.py
repo/settings.py
repo/models.py
repo/tests/
repo/tests/test_app.py
py.test
repo 디렉토리에서 실행 하면 모든 것이 예상대로 작동합니다.
그러나 Linux 또는 Windows에서 동일한 것을 시도하면 (둘 다 pytest 2.2.3이 있음) 내 응용 프로그램 경로에서 처음으로 가져 오기 할 때마다 짖습니다. 예를 들어from app import some_def_in_app
이 시스템에서 py.test를 실행하려면 PATH를 편집해야합니까? 누구든지 이것을 경험 했습니까?
답변
예, cd
tests 디렉토리 로 가면 소스 폴더가 Python의 경로에 없습니다 .
두 가지 선택이 있습니다 :
-
테스트 파일에 다음과 같은 경로를 수동으로 추가하십시오.
import sys, os myPath = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, myPath + '/../')
-
env var로 테스트를 실행하십시오
PYTHONPATH=../
.
답변
py.test가 PYTHONPATH 자체에 현재 디렉토리를 추가하지 않는 이유는 확실하지 않지만 다음은 해결 방법입니다 (저장소 루트에서 실행).
python -m pytest tests/
파이썬이 PYTHONPATH에 현재 디렉토리를 추가하기 때문에 작동합니다.
답변
conftest
해결책
최소 침습적 솔루션라는 빈 파일을 추가하고 conftest.py
에서 repo/
디렉토리를 :
$ touch repo/conftest.py
그게 다야. 맹 글링하기 위해 커스텀 코드를 작성할 필요가 없으며 , sys.path
드래그 PYTHONPATH
하거나 __init__.py
자신이 속해 있지 않은 디렉토리에 배치 해야합니다.
이후 프로젝트 디렉토리 :
repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
└── test_app.py
설명
pytest
에 대한 외모 conftest
테스트 컬렉션 모듈은 사용자 정의 후크 및 비품을 수집하고, 그들로부터 사용자 정의 개체를 가져하기 위해하기 pytest
의 상위 디렉토리에 추가 conftest.py
받는 사람sys.path
(이 경우 repo
디렉토리).
다른 프로젝트 구조
다른 프로젝트 구조가 conftest.py
있는 경우 패키지 루트 디렉토리 (패키지를 포함하지만 패키지 자체는 아니므로)를 포함 하지 않는 루트 디렉토리에 배치하십시오 __init__.py
.
repo
├── conftest.py
├── spam
│ ├── __init__.py
│ ├── bacon.py
│ └── egg.py
├── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
src
나열한 것
이 방법은 함께 사용할 수 있지만 src
레이아웃 (장소 conftest.py
에서 src
DIR) :
repo
├── src
│ ├── conftest.py
│ ├── spam
│ │ ├── __init__.py
│ │ ├── bacon.py
│ │ └── egg.py
│ └── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
추가 것을주의 src
로 PYTHONPATH
완화시킨다 의미와 혜택 src
레이아웃을! 설치된 패키지가 아닌 리포지토리에서 코드를 테스트하게됩니다. 당신이 그것을해야한다면, 아마도 src
dir 이 전혀 필요하지 않을 수도 있습니다 .
여기서 갈 곳
물론, conftest
모듈은 소스 코드 발견을 돕는 일부 파일이 아닙니다. 여기에서 pytest
프레임 워크 의 모든 프로젝트 별 개선 사항 과 테스트 스위트의 사용자 정의가 발생합니다. 문서 전체 pytest
에 conftest
흩어져있는 모듈 에 대한 많은 정보가 있습니다 . 로 시작 : 로컬 디렉토리 별 플러그인conftest.py
또한 SO는 conftest
모듈 에 대한 훌륭한 질문 이 있습니다 .py.test에서 conftest.py 파일의 사용법은 무엇입니까?
답변
나는 같은 문제가 있었다. 빈 __init__.py
파일을 tests
디렉토리 에 추가하여 수정했습니다 .
답변
다음 pytest
을 사용하여 모듈로 실행하십시오 .
python -m pytest tests
답변
프로젝트 루트에서 PYTHONPATH로 실행할 수 있습니다.
PYTHONPATH=. py.test
또는 편집 가능한 가져 오기로 pip install을 사용하십시오.
pip install -e . # install package using setup.py in editable mode
답변
나는 이것을 당신의 질문과 내 자신의 혼란에 대한 답변으로 만들었습니다. 도움이 되길 바랍니다. py.test 명령 행과 tox.ini에서 PYTHONPATH에주의하십시오.
https://github.com/jeffmacdonald/pytest_test
구체적으로, py.test와 tox에 포함하고있는 모듈을 찾을 위치를 알려줘야합니다.
py.test를 사용하면 다음을 수행 할 수 있습니다.
PYTHONPATH=. py.test
tox와 함께 tox.ini에 추가하십시오 :
[testenv]
deps= -r{toxinidir}/requirements.txt
commands=py.test
setenv =
PYTHONPATH = {toxinidir}