Pytest를 아름답게 만들기: 테스트 출력 개선을 위한 완전 가이드 (플러그인 및 예시 포함)
Source: Dev.to
Pytest는 이미 파이썬에서 가장 좋은 테스트 프레임워크 중 하나이지만, 기본 출력은 평범하고 테스트 스위트가 커질수록 파악하기 어려울 때가 있습니다.
텍스트만 가득한 실패 로그를 눈여겨보던 적이 있거나, 테스트 결과에 색상·구조·인터랙티브함이 더 있었으면 하는 생각이 있다면… 바로 여기입니다.
이 가이드에서는 다음을 살펴봅니다:
- pytest 출력이 현재 이렇게 보이는 이유
- 커뮤니티 플러그인을 활용해 pytest 출력을 개선하는 방법
- 다양한 출력 스타일을 나란히 비교한 예시
- 초급, 중급, 고급 사용자를 위한 플러그인 소개
- 명령줄 사용법, 설정 방법, 구성 팁
Django, FastAPI, 데이터, 백엔드 개발자라면 이 가이드를 통해 테스트 경험이 크게 향상될 것입니다.
1. 왜 Pytest 출력이 기본적으로 지루한가
기본 pytest 출력:
collected 12 items
test_example.py .......F....
================================ FAILURES ================================
_______________________________ test_function ____________________________
AssertionError: assert 2 == 5
문제점
- 색상 변형이 없음
.와F사이에 실패가 묻혀 사라짐- 수십·수백 개의 테스트를 실행할 때 가독성이 떨어짐
- CI 로그를 살펴보기가 고통스러움
이제 해결해 봅시다.
2. Pytest를 아름답게 만들기 (핵심 플러그인)
| 플러그인 | 목적 |
|---|---|
| pytest-sugar | 더 예쁜 진행 표시줄, 컬러 출력 |
| pytest-rich | Rich 기반 콘솔 포맷팅 |
| pytest-clarity | 어설션 차이(diff) 개선 |
| pytest-cov | 색상·퍼센트가 포함된 커버리지 리포트 |
| pytest-instafail | 실패가 발생하는 즉시 보여줌 |
| pytest-md | CI용 마크다운 출력 |
| pytest-tldr | 매우 짧은 요약 모드 |
| rich | 색상·포맷팅 엔진 추가 |
한 단계씩 진행해 보겠습니다.
3. Pytest Sugar — 더 예쁜 테스트 진행
추천 대상: 초급자, 즉시 개선을 원하는 사람
설치
pip install pytest-sugar
샘플 출력
──────────────────────────────────────────────────────────────────────────── pytest session starts ────────────────────────────────────────────────────────────────────────────
platform linux -- Python 3.10, pytest-9.0.2
rootdir: /home/project
❱ megaproject/tests/crm/test_example.py ✓ ✓ ✓ ✓
4 passed in 0.14s
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
추가되는 기능:
- 진행 표시줄
- 유니코드 기호
- 통과/실패 색상 구분
- 깔끔한 실패 메시지
자동 활성화
pytest.ini
[pytest]
addopts = -s --disable-warnings
pytest-sugar는 설치만 하면 자동으로 로드됩니다.
4. Pytest Rich — 풍부한 콘솔 출력 (아름다운 색상 + 레이아웃)
추천 대상: 가독성을 최대로 끌어올리고 싶은 개발자
설치
pip install pytest-rich
실행
pytest --rich
Rich 적용 전
FAILED tests/test_api.py::test_get_user - AssertionError: 404 != 200
Rich 적용 후
────────────────────────────── FAILED tests/test_api.py::test_get_user ──────────────────────────────
❌ AssertionError: Expected HTTP 200, got 404
Path: /api/v1/user/
Payload: {"id": 1}
────────────────────────────────────────────────────────────────────────────────────────────────────
Rich가 제공하는 것:
- 컬러 패널
- 개선된 트레이스백
- 향상된 diff 표시
- CI(예: GitHub Actions)에서도 멋진 화면 제공
5. Pytest Clarity — 더 나은 어설션 차이
설치
pip install pytest-clarity
보통대로 실행:
pytest
기본 실패 예시
E AssertionError: assert {'a': 1, 'b': 2} == {'a': 1, 'b': 3}
Clarity 적용 시
Comparing dicts:
b:
- 2
+ 3
훨씬 읽기 쉬워집니다!
6. Pytest Coverage — 테스트되지 않은 코드 강조
설치
pip install pytest-cov
커버리지와 함께 실행
pytest --cov=myapp --cov-report=term-missing
출력
----------- coverage: platform linux, python 3.10 -----------
Name Stmts Miss Cover Missing
----------------------------------------------------------
myapp/models.py 120 10 92% 144-152
myapp/views.py 80 25 69% 35-60
----------------------------------------------------------
TOTAL 200 35 83%
특징:
- 색상으로 구분된 커버리지
- 누락된 라인 목록
- 요약 퍼센트
Django와도 아름답게 동작합니다.
7. Pytest Instafail — 실패를 즉시 표시
긴 테스트 스위트에 최적.
설치
pip install pytest-instafail
실행
pytest --instafail
이제 실패가 테스트가 끝날 때가 아니라 발생하는 즉시 표시됩니다.
8. Pytest 요약 플러그인
pytest‑tldr
테스트 결과를 초간단 요약으로 보여줍니다.
설치
pip install pytest-tldr
설정에 추가
pytest.ini
[pytest]
addopts = --tldr
출력
✨ 324 passed | 3 failed | 12 skipped
CI 대시보드에 딱 맞습니다.
9. 최고의 출력을 위한 플러그인 조합
추천 조합
pytest-sugar
pytest-rich
pytest-clarity
pytest-cov
pytest-instafail
pytest-tldr
pytest.ini에 추가
[pytest]
addopts = --rich --tldr --cov=myapp --cov-report=term-missing
샘플 최종 출력
🔥 Running tests with style…
───────────────────────── 12 passed, 1 failed, 2 skipped in 2.31s ─────────────────────────
----------- coverage: platform linux, python 3.10 -----------
Name Stmts Miss Cover Missing
-----------------------------------------------------------
myapp/models.py 120 10 92% 144-152
-----------------------------------------------------------
✨ Done! 92% coverage.
10. CI/CD 포맷팅을 위한 추가 도구
pytest‑md (CI용 마크다운 출력)
pip install pytest-md
pytest --md=report.md
생성된 Markdown 파일을 CI 리포트에 첨부할 수 있습니다.
pytest‑html
pip install pytest-html
pytest --html=report.html --self-contained-html
이렇게 하면 이해관계자와 공유하기 좋은 자체 포함형 HTML 보고서가 만들어집니다.