Pytest를 아름답게 만들기: 테스트 출력 개선을 위한 완전 가이드 (플러그인 및 예시 포함)

발행: (2025년 12월 12일 오후 05:40 GMT+9)
6 min read
원문: Dev.to

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-richRich 기반 콘솔 포맷팅
pytest-clarity어설션 차이(diff) 개선
pytest-cov색상·퍼센트가 포함된 커버리지 리포트
pytest-instafail실패가 발생하는 즉시 보여줌
pytest-mdCI용 마크다운 출력
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 보고서가 만들어집니다.

Back to Blog

관련 글

더 보기 »