python - pytest를 하기위한 vscode src base path 설정

주재민·2022년 7월 10일
0

python

목록 보기
1/1

주의: 모든 상황에 부합하지 않을 수 있습니다! 그렇기에 이 방식이 최선이 아니라는 것과 스스로가 증명해봐야 한다는 점 잊지 말아주세요😁

상황부터 설명하려고 해요.


상황설명
저는 2가지 테스트를 진행하고 있었어요. unittestpytest를 서로 사용해보고 어떤 차이가 있나 확인하는 작업이었어요.

  1. vscode에서 unittest는 import package에 대한 예외가 발생하지 않았어요.
  2. 하지만, pytest를 사용할 때는, 다른 상위 패키지에 연결된 모듈을 읽어드리지 못했어요
    • 그래서, vscode의 (왼쪽탭인)testing{pytest}.py파일이 열리지 않았습니다
    • 정말 텅텅 비었죠...
  3. {pytest.py}을 run 시키면, 다음과 같은 예외를 던지더라구요
    No module named 'cleancode'
  File "/Users/ty/sources/python/python-practice/app/sample_test/test_merge_req_pytest.py", line 1, in <module>
    from cleancode.unittest import MergeRequestStatus, MergeRequestException, MergeRequest

그래서 원인을 찾아보고, 해결을 해봤습니다


원인 설명
사실, pytest의 문제라기 보다는, 해당 source파일에서 인터프리터를 통해 run시키면, 해당 source파일의 위치가 base path로 잡히기 때문에, 어떠한 설정도 없으면, 상대 경로로 패키지를 import하는 것이 가장 문제가 없습니다. 다만, 다들 그러하듯이 한가지 방식으로 정해서 가져오고 싶고 그것이 절대주소 방식이기를 원하실 거에요(제가 그러해서..🤣)

잠깐! 여기서 vscode > testing에 file이 안 떠있던 원인은 pytest 설정의 문제보다는 python의 base path 문제였다라는 것을 다시 말씀드립니다.

이 페이지에서 설명하는 해결 방법
2가지 설명을 하려고합니다. 첫 째는, pytest를 돌리기 위한 .vscode > settings.json 설정하는 법과 둘 째는, python base path를 .envsetting.json에 설정하는 방법을 설명하려고 합니다.

python base path를 .env file로 설정하는 방법

  • .env 파일에 PYTHONPATH를 설정해주세요, 위치는 root 폴더입니다.
	PYTHONPATH=./
  • .vscode > setting.json에 python.envFile 설정을 해주세요.
	{
    	"python.envFile": "${workspaceFolder}/.env",
	}
  • 끝입니다... 간단하죠?

pytest 간단하게 설정해보죠

  • pytest를 먼저 테스트해봅시다.

    다른 블로그들을 확인해보시면, 기본 pytest 설정 및 활용방법은 잘 나와있어요. 저는 vscode에서 pytest를 다른 상위 패키지의 모듈을 불러서 사용할 수 있도록 해드리고 싶은 거라는 점 다시 상기해드리고 싶습니다.

	pip install pytest
  • .vscode > setting.jsonpytest 설정
  {
    "python.defaultInterpreterPath": "../env/bin/python",
    "python.testing.pytestPath": "../env/bin/pytest",
    "python.testing.autoTestDiscoverOnSaveEnabled": true,
    "python.testing.pytestEnabled": true,
    "python.testing.unittestArgs": [
      "-v",
      "-s",
      "./sample_test",
      "-p",
      "*test*.py"
    ],
    "python.testing.unittestEnabled": false,
    "python.testing.nosetestsEnabled": false,
  }
  • 위 설정까지 잘 해주시면, 다음과 같이 vscodetesting탭에 테스트 소스파일이 자동으로 읽히는 것을 보실 수 있어요

  • 다른 package의 module를 불러온 것도 확인해보죠!

    
    from cleancode.unittest import MergeRequestStatus, MergeRequestException, MergeRequest
    import pytest
    
    def test_simple_rejected():
        merge_request = MergeRequest()
        merge_request.downvote('maintainer')
        assert merge_request.status == MergeRequestStatus.REJECTED
    • 저 위에 cleancode.unittest 부분이 base path문제를 해결 안하시면, module name을 찾을 수 없다는 에러가 발생합니다.
profile
세상이 원하는 서비스를 만드는 그날까지

0개의 댓글