pytest와 pytest-cov를 저는 같이 쓰는 편입니다. report를 할 때 굳이 coverage 측정이 필요 없는 것이 있을 텐데요. 이들을 제외하는 방법을 알아보겠습니다.
pytest는 7.2.2, coverage는 7.2.2, pytest-cov는 4.0.0 버전에서 실습하였습니다.
먼저, 프로젝트 request_ex의 구조입니다. pg1 패키지에 a.py가 있고, pg2 패키지에 b.py가 있습니다. 다음에 root에 main.py가 있고, .coveragerc가 있는데요. 이 .coveragerc는 coverage 관련 설정을 적어놓습니다.
main.py입니다. pg1.a로부터 feature_a를 import하고, pg2.b로부터 feature_b를 import 했네요. test_a에는, feature_a(1)과, feature_b(3)을 호출합니다. 다음에 pyest main.py --cov를 입력해 보겠습니다.
그랬더니, main.py, pg1/__init__.py, pg1/a.py, pg2/__init__.py, pg2/b.py의 커버리지가 출력됩니다. 토탈 coverage는 85%라고 출력되는군요. 어디서 cover를 깍아먹었는지 html 형식으로 report 해 보겠습니다.
프로젝트의 root 폴더에서 python main.py --cov --cov-report=html을 입력해 보겠습니다. 그러면, htmlcov라는 폴더가 하나 새로 생길 겁니다. index.html로 들어가 보겠습니다.
표 형식으로 Statements, missing, excluded가 나오는 것을 볼 수 있어요. Module에 있는 pg1/a.py를 클릭해서 들어가 봅시다.
그러면 missing이 보이는데요. feature_a(1)을 호출하였습니다. x > 1인 경우를 호출하지 않았기 때문에, 5번째 줄이 전혀 실행이 안 됩니다. 따라서, 1 missing이 뜨게 됩니다.
feature_b는 어떨까요? x가 3인 경우만 호출했기 때문에, x <= 1 조건에 걸리는 문장이 수행되지 않습니다. 1 missing입니다. 간단하게 요래 보시면 되겠습니다.
우리는 .coveragerc에서 [run]에 omit 옵션을 줄 수 있습니다. 잠깐. 여기서 omit은 제외하다라는 뜻이 있어요. 3번째 줄부터 5번째 줄까지 앞에 space 4개를 붙였습니다. 이 리스트들이 있는데요. pg1/**, main.py, *__init__.py가 있네요. 이 패턴들은 문서에 자세히 설명이 되어 있습니다만, 요약해서 설명드리겠습니다.
먼저 **는 몇 개의 directory도 상관이 없고, 심지어 아무 것도 없어도 됩니다. gitignore에서 **을 생각하시면 편하겠습니다. 다음에 *는 문자 0개 이상인 파일 이름인데요. /와 같은 디렉토리 구분자를 제외합니다. ?는 하나의 파일 문자를 의미합니다. 어떤 것이 제외되는지 보겠습니다.
먼저 pg1/**입니다. pg1 밑에 있는 .py 파일도 당연하게 제외됩니다. 다음에 *__init__.py가 있는데요. pg2 밑에 있는 __init__.py도 여기에 걸립니다. 따라서 pg2/__init__.py도 제외됩니다. 그리고 main.py는 root 디렉토리에 있는데요. main.py도 제외하라고 했으니, 이것도 제외됩니다.
다시 python main.py --cov --cov-report=html를 입력합니다. 다음에, htmlcov 밑에 있는 index.html에 들어가 보면, pg2/b.py만 report에 나옴을 볼 수 있습니다. 즉, .coveragerc에 [run] 옵션에 omit = 을 적어주고, 제외할 파일들의 패턴을 적어주면 됩니다.
'코딩 > 파이선' 카테고리의 다른 글
파이썬 f string에서 bracket을 escape 하는 방법을 알아봅시다. (0) | 2023.03.31 |
---|---|
파이썬 max min 사용법과 default key 인자를 알아봅시다. (0) | 2023.03.30 |
파이썬 pytest stdout print 콘솔에 출력되게 해 봅시다. (0) | 2023.03.25 |
python 긴 문자열을 여러 줄로 선언하는 방법을 알아봅시다. (0) | 2023.03.09 |
파이썬 datetime.datetime에 있는 astimezone 함수에 대해 알아봅시다. (0) | 2023.02.24 |
최근댓글