* 설치
pip install pytest
* 실행
pytest 경로/파일
- Pytest framework는 이름의 prefix가 “test”인 함수만 인식하여 테스트 한다.
* AssertError 발생 시 출력되는 메시지
- AssertError시 출력되는 메세지 추가하기
- Pytest framework로 테스트 실패 시 출력되는 메세지를 추가할 수가 있다.
- 다음과 같이 짝수이면 테스트 통과하는 테스트 코드를 작성한다.
def test_even():
a = 11
assert a % 2 == 0, "값이 홀수 입니다. 값은 짝수여야 합니다."
* AssertError시 출력되는 메세지 변경하기
- PyTest는 테스트 통과 실패시 아래 예시와 같은 형태로 테스트 통과 실패 이유를 알려준다.
- 간단한 테스트는 테스트 통과 실패 이유를 쉽게 찾을 수 있지만, 테스트 코드가 복잡해지거나 테스트 수가 많아진다면 테스트 통과 실패 이유를 확인하는 데에 많은 시간이 소모된다. 따라서 테스트 통과 실패 이유를 직관적으로 출력할 수 있다면 테스트 통과 실패 이유를 확인하는 데에 적은 시간을 소모할 수 있을 것이라 판단된다.
- pytest_assertrepr_compare 함수에 AssertixxonError 출력 메세지를 변경한다.
from test_foocompare import Foo
def pytest_assertrepr_compare(op, left, right):
if isinstance(left, Foo) and isinstance(right, Foo) and op == "==":
return [
"Comparing Foo instances:",
" vals: {} != {}".format(left.val, right.val),
]
class Foo:
def __init__(self, val):
self.val = val
def __eq__(self, other):
return self.val == other.val
def test_compare():
f1 = Foo(1)
f2 = Foo(2)
assert f1 == f2
* ExceptixxonError 발생 테스트하기
- 테스트할 대상중에는 ExceptixxonError를 발생시키는 케이스에서 정상적으로 ExceptixxonError가 발생하는지 테스트 해야 하는 경우가 있다.
- 대표적으로 특정 함수가 특정한 경우에 Exception을 raise시키는 로직이 포함되어 있는 경우가 있다.
-만약 ExceptixxonError를 발생시키는 인자를 입력하여 ExceptixxonError가 발생하면 ExceptixxonError가 발생한 테스트 코드 아래의 코드들은 실행되지 않는다.
- ExceptioError 발생하는 코드를 try…catch…except로 감싸고 테스트하면 테스트 할 수 있다.
- PyTest framework의 pytest.raises 함수를 이용하면 편리하게 ExceptixxonError를 발생하는 상황을 테스트 할 수 있다.
- with 문과 pytest.raise 함수를 사용하여 ExceptixxonError가 발생하는 케이스를 테스트한다.
import pytest
def test_zero_division_1():
with pytest.raises(ZeroDivisixxonError): # 예외가 발생하여 테스트 통과
1 / 0
def test_zero_division_2():
with pytest.raises(ZeroDivisixxonError): # 예외가 발생하여 테스트 실패
1 / 2