IT TIP

다른 디렉터리의 테스트가 동일하게 호출 될 때 테스트 검색 실패

itqueen 2020. 12. 1. 20:21
반응형

다른 디렉터리의 테스트가 동일하게 호출 될 때 테스트 검색 실패


py.test를 사용하면 서로 다른 디렉토리에서 동일한 두 개의 테스트가 py.test가 실패하게됩니다. 왜 그런 겁니까? 모든 테스트의 이름을 바꾸지 않고 어떻게 변경할 수 있습니까?

복제하려면 다음을 수행하십시오.

; cd /var/tmp/my_test_module
; mkdir -p ook/test           
; mkdir -p eek/test
; touch ook/test/test_proxy.py
; touch eek/test/test_proxy.py
; py.test
============================= test session starts ==============================
platform linux2 -- Python 2.7.3 -- pytest-2.2.4
collected 0 items / 1 errors 

==================================== ERRORS ====================================
___________________ ERROR collecting ook/test/test_proxy.py ____________________
import file mismatch:
imported module 'test_proxy' has this __file__ attribute:
  /home/ygolanski/code/junk/python/mymodule/eek/test/test_proxy.py
which is not the same as the test file we want to collect:
  /home/ygolanski/code/junk/python/mymodule/ook/test/test_proxy.py
HINT: remove __pycache__ / .pyc files and/or use a unique basename for your test file modules
=========================== 1 error in 0.01 seconds ============================

퍼팅 __init__.py은 갈등을 해결하는 한 가지 방법입니다. nose와 달리 현재 pytest는 가져 오기 이름이 같은 테스트 모듈을 가져 오기 위해 테스트 모듈을 언로드하지 않습니다. 나는이 자동 반입을 수행하는 것이 약간 마술이라고 생각하고 반입 메커니즘이하는 일에 대한 사람들의 기대를 엉망으로 만들 수 있습니다. 때때로 사람들은 테스트 모듈의 전역 상태에 의존하고 자동 언로드를 사용하면이를 잃게됩니다 (다른 테스트 모듈에서 가져 오는 테스트 모듈이 예상치 못한 작업을 수행 할 수 있음). 그러나 그것은 실용적인 문제가 아니기 때문에 pytest는 비슷한 해킹을 추가 할 수 있습니다.


이것은 py.test의 실제 기능입니다. pytest.org-Good Integration Practices-테스트 레이아웃 선택 / 가져 오기 규칙에 명시된이 동작에 대한 이유를 찾을 수 있습니다 .

  • __init__.py테스트 디렉토리의 파일을 하십시오. 이렇게 mypkg하면 설치된 패키지에 테스트가 포함되어 있는지 여부와 관계없이 설치된 버전에 대해 테스트를 쉽게 실행할 수 있습니다 .

이것이 py.test 작업의 권장 워크 플로이므로를 사용하여 개발중인 패키지를 설치 pip install -e한 다음 테스트합니다.

이 때문에 구성 방식보다 규칙에 따라 고유 한 테스트 이름을 선택합니다. 또한 다양한 테스트 실행 출력에서 ​​모호한 테스트 이름을 얻지 않도록합니다.

테스트 이름을 유지해야하고 위에서 언급 한 기능에 신경 쓰지 않는다면 __init__.py.


나는 같은 오류가 있었지만 솔루션은 초기화 파일이나 테스트 파일의 이름과 관련이 없습니다. 나는 한 다른 파이썬 버전 내에서 맥북 내에서 부두 노동자의 컨테이너를. 컨테이너의 bash 대신 프로젝트 루트의 macbook에서 bash에서 테스트를 한 번 시작했습니다.

해결책은 (컨테이너의 bash에서) 실행하여 잘못 생성 된 파일을 제거하는 것입니다.

find -name '*.pyc' -delete
find -name __pycache__ -delete

그런 다음 테스트를 다시 시작하면 (여전히 컨테이너의 bash에서) 모든 것이 정상적으로 작동합니다.

py.test

다음 환경 변수를 bash init 파일 또는 개발 스택의 다른 곳에 추가하여 이러한 폴더 / 파일이 처음에 생성되는 것을 방지 할 수 있습니다.

export PYTHONDONTWRITEBYTECODE=1

참고 URL : https://stackoverflow.com/questions/12582503/test-discovery-failure-when-tests-in-different-directories-are-called-the-same

반응형