| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 하이브리드앱테스트
- 자동화테스트
- Python
- 카카오API
- Flutter
- 코멘토실무PT
- javascript
- testautomationuniversity
- DART
- 실무PT후기
- 코딩
- HTTP
- 테스트자동화
- LTE기초
- QA
- QA직무교육
- 코멘토
- 코딩테스트
- 무선통신
- 백준
- 감사일기
- ShareTechnote
- 앱개발
- Selenium
- QA자동화
- 웹ui자동화
- pytest
- QA자동화테스트
- 서평
- HTML
- Today
- Total
오예남
pytest 로 예외처리하는 방법 try/except 대신 pytest.raises 사용하기 본문

이전 글에서는 pytest를 설치하고 샘플 코드로 간단하게 실행하는 방법을 알아보았습니다.
QA 엔지니어를 위한 테스트 자동화 python pytest 독학
Pytest 소개 https://docs.pytest.org/en/stable/ Pytest는 Python의 강력한 테스트 프레임워크로, 코드의 품질을 유지하고 버그를 조기에 발견하는 데 도움을 줍니다. 단위 테스트(Unit Test), 기능 테스트(Functional
ohyenam.tistory.com
작성한 테스트 코드가 성공할 경우, 테스트 결과로 '.' 이 표시되고,
의도적으로 실패하는 코드를 실행시키면 에러 메세지와 함께 테스트 결과는 F로 표시되는 것을 확인하였습니다.
그렇다면 우리가 의도적으로 '예외를 발생시키는 코드'를 테스트 해야할 때는 어떻게 할까요?
Pytest 예외 처리
예를 들어보겠습니다.
아래는 숫자를 0으로 나누어 ZeroDivisionError 가 발생하는 코드입니다.
def test_divide_by_zero():
num = 1 / 0
위 코드를 그대로 사용한다면, 아래와 같이 ZeroDivisionError가 발생하며 실패한 테스트로 처리됩니다.
======================================== test session starts =========================================
platform win32 -- Python 3.10.2, pytest-8.3.4, pluggy-1.5.0
rootdir: C:\Python\pytest
collected 1 item
test_add.py F [100%]
============================================== FAILURES ==============================================
________________________________________ test_divide_by_zero _________________________________________
def test_divide_by_zero():
> num = 1 / 0
E ZeroDivisionError: division by zero
test_add.py:5: ZeroDivisionError
====================================== short test summary info =======================================
FAILED test_add.py::test_divide_by_zero - ZeroDivisionError: division by zero
========================================= 1 failed in 0.08s ==========================================
pytest.raises 로 예외처리하기
이런 예외를 테스트하기 위해 pytest에서는 pytest.raises 라는 기능을 제공합니다.
위에서 사용했던 코드에 pytest.raises 코드를 추가하였습니다.
import pytest
def test_divide_by_zero():
with pytest.raises(ZeroDivisionError) as e:
num = 1 / 0
assert 'division by zero' in str(e.value)
위에 추가된 코드에 대한 설명은 아래와 같습니다.
- with pytest.raises(ZeroDivisionError) as e:
-> "이 블록 안에서 ZeroDivisionError가 발생할 거야"라고 pytest에게 알려줍니다.
-> 만약 예상한 예외가 발생하면 테스트는 성공합니다.
-> 만약 예외가 발생하지 않거나 다른 종류의 예외가 발생하면 테스트는 실패합니다.
-> 발생한 예외 객체를 변수 e에 저장합니다. - assert 'division by zero' in str(e.value)
-> e.value 의 예외 메시지를 확인하고, 해당 메세지에 'division by zero' 문구가 포함되어있는지 확인합니다.
이렇게 pytest.raises 구문을 사용하면, try/except 구문을 작성할 필요가 없어 코드를 깔끔하게 작성할 수 있습니다.
그리고 예외 발생 여부와 예외 메시지에 특정 구문이 포함되어있는지도 한번에 테스트할 수 있습니다
'Pytest' 카테고리의 다른 글
| [Python] 테스트 자동화 - pytest 명령어 옵션 사용하기 (0) | 2025.02.07 |
|---|---|
| [Python] pytest 테스트 자동화 - 픽스처(Fixture) 함수 사용하기 (0) | 2025.02.05 |
| [Python] pytest 테스트 자동화 - 단위 테스트(class) 샘플 예제 (0) | 2025.02.04 |
| [Python] pytest 테스트 자동화 - parametrize 매개변수화 (0) | 2025.02.02 |
| QA 엔지니어를 위한 테스트 자동화 python pytest 독학 (2) | 2025.02.01 |