Visual Studio Code에서 Python 테스트
The Python extension builds on the built-in testing features in VS Code and provides test discovery, test coverage, and running and debugging tests for Python's built-in unittest framework and pytest.
테스트 구성
Python 확장이 설치되어 있고 편집기 내에서 Python 파일을 열면 VS Code 활동 막대에 테스트 비커 아이콘이 표시되어 **테스트 탐색기** 보기를 나타냅니다. 테스트 탐색기를 열면 테스트 프레임워크가 활성화되지 않은 경우 **Python 테스트 구성** 버튼이 표시됩니다. **Python 테스트 구성**을 선택하면 테스트 프레임워크와 테스트가 포함된 폴더를 선택하라는 메시지가 표시됩니다. unittest를 사용하는 경우 테스트 파일을 식별하는 데 사용되는 파일 glob 패턴도 선택합니다.
파일 glob 패턴은 와일드카드를 기반으로 파일 또는 폴더 이름을 일치시켜 파일을 포함하거나 제외하는 정의된 문자열 패턴입니다.

테스트는 명령 팔레트에서 **Python: 테스트 구성** 명령을 사용하거나 VS Code 설정 설명서에 설명된 대로 설정 편집기 또는 settings.json 파일에서 python.testing.unittestEnabled 또는 python.testing.pytestEnabled를 설정하여 언제든지 구성할 수 있습니다. 각 프레임워크에는 테스트 구성 설정 아래에 설명된 대로 폴더 및 패턴에 대한 특정 구성 설정도 있습니다.
pytest를 활성화했는데 활성화된 환경에 현재 설치되어 있지 않으면 Python 확장이 백그라운드에서 설치를 시도합니다. 또한 두 프레임워크가 모두 활성화된 경우 Python 확장은 pytest만 실행합니다.
python 확장에서 지원하는 pytest의 최소 버전은 7.0.0입니다.
테스트 검색
기본적으로 Python 확장은 프레임워크를 활성화하면 테스트를 검색하려고 시도합니다. 명령 팔레트에서 **테스트: 테스트 새로 고침** 명령을 사용하여 언제든지 테스트 검색을 트리거할 수 있습니다.
python.testing.autoTestDiscoverOnSaveEnabled는 기본적으로 true로 설정되어 있어 작업 영역에서 Python 파일을 추가, 삭제 또는 업데이트할 때마다 테스트 검색이 자동으로 수행됩니다. 이 기능을 비활성화하려면 값을 false로 설정하면 되며, 이는 VS Code 설정 설명서에 설명된 대로 설정 편집기 또는 settings.json 파일에서 수행할 수 있습니다. 이 설정이 적용되려면 창을 다시 로드해야 합니다. 자동 테스트 검색에 포함되는 파일을 더 세밀하게 제어하려면 기본적으로 **/*.py인 python.testing.autoTestDiscoverOnSavePattern 설정을 조정합니다.
테스트 검색은 현재 프레임워크의 검색 패턴을 적용합니다(이는 테스트 구성 설정을 사용하여 사용자 지정할 수 있습니다). 기본 동작은 다음과 같습니다.
-
python.testing.unittestArgs: 최상위 프로젝트 폴더에서 이름에 "test"가 포함된 모든 Python(.py) 파일을 찾습니다. 모든 테스트 파일은 가져올 수 있는 모듈 또는 패키지여야 합니다.-p구성 설정을 사용하여 파일 일치 패턴을 사용자 지정하고-t설정을 사용하여 폴더를 사용자 지정할 수 있습니다. -
python.testing.pytestArgs: 현재 폴더 및 모든 하위 폴더의 어느 곳에나 있는 "test_"로 시작하거나 "_test"로 끝나는 Python(.py) 파일의 이름을 찾습니다.
하위 폴더에 배치된 테스트는 해당 테스트 파일을 가져올 수 없기 때문에 검색되지 않는 경우가 있습니다. 가져올 수 있도록 하려면 해당 폴더에 __init__.py라는 빈 파일을 만듭니다.
테스트 검색이 성공하면 테스트 탐색기에 테스트가 나열됩니다.

테스트 탐색기에서 직접 테스트 검색을 트리거할 때 진행 중인 테스트 검색 호출을 취소할 수도 있습니다. 검색 중에 **새로 고침** 버튼을 대체하는 **취소** 버튼을 사용합니다.

검색에 실패하면(예: 테스트 프레임워크가 설치되지 않았거나 테스트 파일에 구문 오류가 있는 경우) 테스트 탐색기에 로그 링크를 포함한 오류 메시지가 표시됩니다. **Python** 출력 창을 확인하여 전체 오류 메시지를 볼 수 있습니다( **보기** > **출력** 메뉴 명령을 사용하여 **출력** 패널을 표시한 다음 오른쪽 드롭다운에서 **Python**을 선택).

테스트 실행
다음 작업 중 하나를 사용하여 테스트를 실행할 수 있습니다.
-
테스트 파일이 열려 있으면 이전 섹션에 표시된 대로 테스트 정의 줄 옆에 있는 여백에 표시되는 녹색 실행 아이콘을 선택합니다. 이 명령은 해당 메서드 하나만 실행합니다.

-
명령 팔레트에서 다음 명령 중 하나를 실행하여
- **테스트: 모든 테스트 실행** - 검색된 모든 테스트를 실행합니다.
- **테스트: 현재 파일에서 테스트 실행** - 편집기에서 열려 있는 파일의 모든 테스트를 실행합니다.
- **테스트: 커서에서 테스트 실행** - 편집기에서 커서 아래의 테스트 메서드만 실행합니다.
-
**테스트 탐색기**에서
-
**테스트 탐색기** 상단의 재생 버튼을 선택하여 검색된 모든 테스트를 실행합니다.

-
특정 테스트 그룹 또는 단일 테스트를 실행하려면 파일, 클래스 또는 테스트를 선택한 다음 해당 항목 오른쪽에 있는 재생 버튼을 선택합니다.

-
테스트 탐색기를 통해 테스트 선택을 실행할 수도 있습니다. 그렇게 하려면 실행하려는 테스트를 Ctrl+클릭 (macOS에서는 Cmd+클릭)하고 그중 하나를 마우스 오른쪽 버튼으로 클릭한 다음 **테스트 실행**을 선택합니다.
-
테스트 실행 후 VS Code는 편집기에서 여백 장식으로 결과를 직접 표시합니다. 실패한 테스트는 편집기에서 강조 표시되며 테스트 실행 오류 메시지와 모든 테스트 실행 기록을 표시하는 미리 보기 보기가 제공됩니다. Escape를 눌러 보기를 닫을 수 있으며, 사용자 설정( **명령 팔레트**에서 **기본 설정: 설정 열기(UI)** 명령)을 열고 **테스트: 미리 보기 보기 자동 열기** 설정 값을 never로 변경하여 비활성화할 수 있습니다.
**테스트 탐색기**에서 개별 테스트 및 해당 테스트를 포함하는 클래스와 파일에 대한 결과가 표시됩니다. 폴더 내의 테스트 중 하나라도 통과하지 못하면 해당 폴더에 실패 아이콘이 표시됩니다.

VS Code는 **테스트 결과** 패널에도 테스트 결과를 표시합니다.

커버리지 포함하여 테스트 실행
커버리지가 활성화된 상태로 테스트를 실행하려면 테스트 탐색기에서 커버리지 실행 아이콘을 선택하거나 평소 테스트 실행을 트리거하는 메뉴에서 **커버리지로 실행** 옵션을 선택합니다. Python 확장은 pytest를 사용하는 경우 pytest-cov 플러그인을 사용하거나 unittest의 경우 coverage.py를 사용하여 커버리지를 실행합니다.
커버리지가 포함된 테스트를 실행하기 전에 프로젝트에 맞는 테스트 커버리지 패키지를 설치했는지 확인하십시오. 분기 커버리지는 coverage 버전 >= 7.7에서만 지원됩니다.
커버리지 실행이 완료되면 편집기에서 줄 단위 커버리지에 대한 줄이 강조 표시됩니다. 테스트 커버리지 결과는 테스트 탐색기에서 "테스트 커버리지" 하위 탭으로 표시되며, 명령 팔레트에서 **테스트: 테스트 커버리지 보기로 이동**(⇧⌘P (Windows, Linux Ctrl+Shift+P))으로도 이동할 수 있습니다. 이 패널에서 작업 영역의 각 파일 및 폴더에 대한 줄 커버리지 메트릭과 해당되는 경우 분기 커버리지를 볼 수 있습니다.

pytest를 사용할 때 커버리지 실행을 더 세밀하게 제어하려면 python.testing.pytestArgs 설정을 편집하여 사양을 포함할 수 있습니다. python.testing.pytestArgs에 --cov pytest 인수가 있으면 Python 확장은 커버리지 인수를 추가로 편집하지 않아 사용자 지정이 적용되도록 합니다. --cov 인수가 없으면 확장 프로그램은 실행 전에 --cov=.을 pytest 인수에 추가하여 작업 영역 루트에서 커버리지를 활성화합니다.
테스트 커버리지에 대한 자세한 내용은 VS Code의 테스트 커버리지 문서를 참조하십시오.
테스트 디버그
테스트를 디버그하려면 함수 정의 옆의 여백 장식을 마우스 오른쪽 버튼으로 클릭하고 **테스트 디버그**를 선택하거나 **테스트 탐색기**에서 해당 테스트 옆의 **테스트 디버그** 아이콘을 선택합니다.

테스트를 실행하거나 디버그한다고 해서 테스트 파일이 자동으로 저장되지는 않습니다. 항상 실행하기 전에 테스트 변경 사항을 저장해야 합니다. 그렇지 않으면 파일의 이전 버전을 반영하는 결과로 인해 혼란스러울 수 있습니다!
명령 팔레트에서 다음 명령을 사용하여 테스트를 디버그할 수 있습니다.
- **테스트: 모든 테스트 디버그** - 작업 영역의 모든 테스트에 대한 디버거를 시작합니다.
- **테스트: 현재 파일에서 테스트 디버그** - 편집기에서 열려 있는 파일에 정의된 테스트에 대한 디버거를 시작합니다.
- **테스트: 커서에서 테스트 디버그** - 편집기에서 커서가 있는 메서드에 대한 디버거만 시작합니다. 또한 테스트 탐색기에서 **테스트 디버그** 아이콘을 사용하여 선택한 범위의 모든 테스트 및 검색된 모든 테스트에 대한 디버거를 시작할 수 있습니다.
settings.json 파일에서 testing.defaultGutterClickAction 설정 값을 debug로 변경하여 여백 장식을 클릭하는 기본 동작을 실행 대신 테스트를 디버그하도록 변경할 수도 있습니다.
디버거는 중단점, 변수 검사 등을 포함하여 다른 Python 코드와 마찬가지로 테스트에서도 동일하게 작동합니다. 테스트 디버깅 설정을 사용자 지정하려면 작업 영역의 .vscode 폴더에 있는 launch.json 또는 settings.json 파일에 "purpose": ["debug-test"]를 구성에 추가하여 테스트 디버그 구성을 지정할 수 있습니다. 이 구성은 **테스트: 모든 테스트 디버그**, **테스트: 현재 파일에서 테스트 디버그**, **테스트: 커서에서 테스트 디버그** 명령을 실행할 때 사용됩니다.
예를 들어 launch.json 파일의 다음 구성은 테스트 디버깅에 대해 justMyCode 설정을 비활성화합니다.
{
"name": "Python: Debug Tests",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"purpose": ["debug-test"],
"console": "integratedTerminal",
"justMyCode": false
}
"purpose": ["debug-test"]를 포함하는 구성 항목이 두 개 이상 있는 경우 현재 이 요청 유형에 대한 여러 정의를 지원하지 않으므로 첫 번째 정의가 사용됩니다.
디버깅에 대한 자세한 내용이나 VS Code에서 작동하는 방식을 이해하려면 Python 디버깅 구성 및 일반 VS Code 디버깅 문서를 읽으십시오.
병렬로 테스트 실행
pytest를 사용한 병렬 테스트 실행 지원은 pytest-xdist 패키지를 통해 사용할 수 있습니다. pytest-xdist 사용 방법에 대한 자세한 내용은 해당 문서를 참조하십시오.
xdist가 활성화되어 있고 인수에 작업자 수가 지정되지 않은 경우 Python 확장은 테스트 탐색기에서 선택된 테스트 수를 기반으로 작업자 수를 자동으로 최적화합니다.
Django 단위 테스트
Python 확장은 Django 단위 테스트 검색 및 실행도 지원합니다! 몇 가지 추가 설정 단계만으로 Django 테스트를 검색할 수 있습니다.
settings.json파일에"python.testing.unittestEnabled": true,를 설정합니다.MANAGE_PY_PATH를 환경 변수로 추가합니다.- 프로젝트 루트에
.env파일을 만듭니다. .env파일에MANAGE_PY_PATH='<path-to-manage.py>'를 추가하고<path-to-manage.py>를 애플리케이션의manage.py파일 경로로 바꿉니다.**팁**: 탐색기 보기에서 파일을 마우스 오른쪽 버튼으로 클릭하고 **경로 복사**를 선택하여 경로를 복사할 수 있습니다.
- 프로젝트 루트에
- 필요한 경우
settings.json파일의"python.testing.unittestArgs": []에 Django 테스트 인수를 추가하고 Django와 호환되지 않는 인수는 제거합니다.
기본적으로 Python 확장은 프로젝트 루트에서 .env 파일을 검색하고 로드합니다. .env 파일이 프로젝트 루트에 없거나 VS Code 변수 대체를 사용하는 경우 settings.json 파일에 "python.envFile": "${workspaceFolder}/<path-to-.env>"를 추가합니다. 이렇게 하면 Python 확장에서 테스트를 실행하고 검색할 때 이 파일의 환경 변수를 로드할 수 있습니다. Python 환경 변수 에 대한 자세한 정보를 얻으십시오.
테스팅 보기로 이동하여 **테스트 새로 고침** 버튼을 선택하여 Django 테스트를 표시합니다!
문제 해결
Django 단위 테스트가 테스팅 보기에 표시되지 않는 경우 다음 문제 해결 단계를 시도하십시오.
- **Python** 출력 패널에서 오류 메시지를 검색합니다. 테스트가 검색되지 않는 이유에 대한 힌트를 제공할 수 있습니다.
- 터미널에서 Django 테스트를 실행해 봅니다. 그런 다음 VS Code 설정에 동일한 명령을 "번역"합니다. 예를 들어 터미널에서
python manage.py test --arg를 실행하는 경우.env파일에MANAGE_PY_PATH='./manage.py'를 추가하고 VS Code 설정에서"python.testing.unittestArgs": [--arg]를 설정합니다. 또는 **Python** 출력 패널에서 Python 확장 프로그램이 실행하는 명령을 찾을 수도 있습니다. MANAGE_PY_PATH환경 변수를 설정할 때manage.py파일의 절대 경로를 사용하십시오. 처음에 상대 경로를 사용한 경우.
테스트 명령
VS Code의 Python 확장을 사용한 테스트를 위한 모든 지원 명령은 다음과 같습니다. 이들은 모두 명령 팔레트를 통해 찾을 수 있습니다.
| 명령 이름 | 설명 |
|---|---|
| Python: 테스트 구성 | Python 확장에서 사용할 테스트 프레임워크를 구성합니다. |
| 테스트: 모든 결과 지우기 | UI가 세션 간 테스트 결과를 유지하므로 모든 테스트 상태를 지웁니다. |
| 테스트: 모든 테스트 디버그 | 검색된 모든 테스트를 디버그합니다. 2021.9 이전 버전의 **Python: 모든 테스트 디버그**와 동일합니다. |
| 테스트: 실패한 테스트 디버그 | 가장 최근 테스트 실행에서 실패한 테스트를 디버그합니다. |
| 테스트: 마지막 실행 디버그 | 가장 최근 테스트 실행에서 실행된 테스트를 디버그합니다. |
| 테스트: 커서에서 테스트 디버그 | 편집기에서 커서가 있는 테스트 메서드를 디버그합니다. 2021.9 이전 버전의 **Python: 테스트 메서드 디버그...**와 유사합니다. |
| 테스트: 현재 파일에서 테스트 디버그 | 편집기에서 현재 초점된 파일의 테스트를 디버그합니다. |
| 테스트: 다음 실패 테스트로 이동 | 오류 미리보기 보기가 열려 있으면 실패한 테스트의 탐색기에서 다음 테스트 미리보기 보기를 열고 이동합니다. |
| 테스트: 이전 실패 테스트로 이동 | 오류 미리보기 보기가 열려 있으면 실패한 테스트의 탐색기에서 이전 테스트 미리보기 보기를 열고 이동합니다. |
| 테스트: 출력 보기 | 실패한 테스트 메서드에 대한 오류 미리보기 보기를 엽니다. |
| 테스트: 테스트 새로 고침 | 테스트 검색을 수행하고 테스트 변경, 추가 또는 삭제를 반영하도록 테스트 탐색기를 업데이트합니다. 2021.9 이전 버전의 **Python: 테스트 검색**과 유사합니다. |
| 테스트: 실패한 테스트 다시 실행 | 가장 최근 테스트 실행에서 실패한 테스트를 실행합니다. 2021.9 이전 버전의 **Python: 실패한 테스트 실행**과 유사합니다. |
| 테스트: 마지막 실행 다시 실행 | 가장 최근 테스트 실행에서 실행된 테스트를 디버그합니다. |
| 테스트: 모든 테스트 실행 | 검색된 모든 테스트를 실행합니다. 2021.9 이전 버전의 **Python: 모든 테스트 실행**과 동일합니다. |
| 테스트: 커버리지가 포함된 모든 테스트 실행 | 검색된 모든 테스트를 실행하고 테스트에서 얼마나 많은 코드가 커버되었는지 계산합니다. |
| 테스트: 커서에서 테스트 실행 | 편집기에서 커서가 있는 테스트 메서드를 실행합니다. 2021.9 이전 버전의 **Python: 테스트 메서드 실행...**과 유사합니다. |
| 테스트: 현재 파일에서 테스트 실행 | 편집기에서 현재 초점된 파일의 테스트를 실행합니다. 2021.9 이전 버전의 **Python: 현재 테스트 파일 실행**과 동일합니다. |
| 테스트: 출력 보기 | 모든 테스트 실행의 세부 정보가 포함된 출력을 엽니다. 2021.9 이전 버전의 **Python: 테스트 출력 보기**와 유사합니다. |
| 테스트: 테스트 탐색기 보기로 이동 | 테스트 탐색기 보기를 엽니다. 2021.9 이전 버전의 **테스트: Python 보기로 이동**과 유사합니다. |
| 테스트: 테스트 새로 고침 중지 | 테스트 검색을 취소합니다. |
테스트 구성 설정
Python으로 테스트하는 동작은 VS Code에서 제공하는 일반 UI 설정과 Python 및 활성화된 프레임워크에 특정한 설정에 의해 구동됩니다.
일반 UI 설정
테스트 기능의 UI에 영향을 미치는 설정은 VS Code 자체에서 제공하며 "테스트"를 검색할 때 VS Code 설정 편집기에서 찾을 수 있습니다.
일반 Python 설정
| 설정 (python.testing.) |
기본값 | 설명 |
|---|---|---|
| autoTestDiscoverOnSaveEnabled | true |
테스트 파일을 저장할 때 자동 테스트 검색 실행을 활성화 또는 비활성화할지 지정합니다. 이 설정을 변경한 후에는 창을 다시 로드해야 적용될 수 있습니다. |
| cwd | null | 테스트에 대한 선택적 작업 디렉토리를 지정합니다. 이 설정의 존재는 pytest의 --rootdir 인수를 동적으로 조정합니다. |
| autoTestDiscoverOnSavePattern | **/*.py |
autoTestDiscoverOnSaveEnabled가 true일 때 어떤 파일 변경이 자동 테스트 검색을 트리거하는지 결정하는 glob 패턴을 지정합니다. |
| debugPort | 3000 |
unittest 테스트 디버깅에 사용되는 포트 번호입니다. |
| promptToConfigure | true |
잠재적 테스트가 검색된 경우 VS Code에서 테스트 프레임워크를 구성할지 여부를 묻는 메시지를 표시할지 지정합니다. |
unittest 구성 설정
| Unittest 설정 (python.testing.) |
기본값 | 설명 |
|---|---|---|
| unittestEnabled | false |
unittest를 테스트 프레임워크로 사용할지 여부를 지정합니다. pytest에 대한 해당 설정은 비활성화해야 합니다. |
| unittestArgs | ["-v", "-s", ".", "-p", "*test*.py"] |
unittest에 전달할 인수이며, 공백으로 구분된 각 요소는 목록의 별도 항목입니다. 기본값은 아래를 참조하십시오. |
unittest의 기본 인수는 다음과 같습니다.
-v는 기본 상세 수준을 설정합니다. 더 간단한 출력을 원하면 이 인수를 제거하십시오.-s .는 테스트 검색을 시작할 디렉토리를 지정합니다. "test" 폴더에 테스트가 있는 경우 인수를-s test(즉, 인수 배열에서"-s", "test")로 변경하십시오.-p *test*.py는 테스트를 검색하는 데 사용되는 검색 패턴입니다. 이 경우 "test"라는 단어가 포함된 모든.py파일입니다. 예를 들어 파일 이름 끝에 "_test"를 추가하는 등 테스트 파일 이름을 다르게 지정하는 경우 배열의 해당 인수에서*_test.py와 같은 패턴을 사용하십시오.
첫 번째 실패 시 테스트 실행을 중지하려면 인수 배열에 빠른 실패 옵션 "-f"를 추가하십시오.
사용 가능한 전체 옵션은 unittest 명령줄 인터페이스를 참조하십시오.
pytest 구성 설정
| pytest 설정 (python.testing.) |
기본값 | 설명 |
|---|---|---|
| pytestEnabled | false |
pytest를 테스트 프레임워크로 사용할지 여부를 지정합니다. unittest에 대한 해당 설정은 비활성화해야 합니다. |
| pytestPath | "pytest" |
pytest 경로입니다. pytest가 현재 환경 외부에 있는 경우 전체 경로를 사용하십시오. |
| pytestArgs | [] |
pytest에 전달할 인수이며, 공백으로 구분된 각 요소는 목록의 별도 항목입니다. pytest 명령줄 옵션을 참조하십시오. |
pytest의 기본 인수는 다음과 같습니다.
rootdir은 작업 영역에python.testing.cwd설정이 있는지 여부에 따라 동적으로 조정됩니다.
pytest.ini 파일을 사용하여 pytest를 구성할 수도 있습니다. 이는 pytest 구성에 설명되어 있습니다.
pytest-cov 커버리지 모듈이 설치된 경우 pytest-cov가 실행되는 소스 코드에 액세스하는 데 동일한 기술을 사용하므로 VS Code는 디버깅 중에 중단점에서 멈추지 않습니다. 이 동작을 방지하려면 디버그할 때 pytestArgs에 --no-cov를 포함하십시오. 예를 들어 디버그 구성에 "env": {"PYTEST_ADDOPTS": "--no-cov"}를 추가하여 수행할 수 있습니다. (구성 방법에 대한 내용은 위 테스트 디버그를 참조하십시오.) (자세한 내용은 pytest-cov 문서의 디버거 및 PyCharm을 참조하십시오.)
IntelliSense 설정
| IntelliSense 설정 (python.analysis.) |
기본값 | 설명 |
|---|---|---|
| inlayHints.pytestParameters | false | pytest fixture 인수 유형에 대한 inlay 힌트를 표시할지 여부입니다. 허용되는 값은 true 또는 false입니다. |