pytest 7

pytest _ 테스트 코드에서 현재 시간 바꾸는 방법

현재 시간을 바꾸는 이유 테스트 코드를 작성하다 보면 현재 시간이 특정 시간을 넘겼을 때 정상적으로 코드가 수행되는지 테스트하고 싶을 때가 있다. 예를 들어 만료일자가 있고 오늘 날짜가 만료일자를 지나면 서비스를 중단하는 로직이 있다고 하자. 이를 어떻게 테스트할 수 있을까? 오늘 날짜가 아직 만료일자를 지나지 않았기 때문에 이를 테스트하기 위해서는 오늘 날짜 혹은 만료일자를 mock으로 대체하여 구현해야 한다. 하지만 mock을 직접 구현하는 데에는 코스트가 들기 때문에 아무래도 꺼려지는 방법이다. 만약 당신이 pytest를 사용한다면 pytest-freezegun 라이브러리를 이용해 이 문제를 쉽게 해결할 수 있다. pytest에서 시간 freeze 하는 방법 먼저 pytest-freezegun 라이..

pytest _ 비동기 테스트 실행하기 (feat. auto 모드)

pytest 에서 async 테스트 함수를 실행하는 방법에는 'strict 모드' 와 'auto 모드' 가 있다. 오늘은 손쉽게 비동기 테스트를 할 수 있는 'auto 모드' 에 대해 알아보자. 먼저 pytest-asyncio 를 설치한다. pip install pytest-asyncio 아래 1번과 2번 중에 하나를 선택하여 파일과 코드를 추가한다. 1번 # pytest.ini [pytest] asyncio_mode = auto 2번 # pyproject.toml [tool.pytest.ini_options] asyncio_mode = "auto" 이것으로 'auto 모드' 설정이 끝났다. auto 모드는 pytest.ini 혹은 pyproject.toml 파일에 옵션 코드를 추가하여 async 테스트..

pytest _ pytest-cov로 coverage 확인하기(실습)

GitHub - Daco2020/pytest-cov-practice: Repository for practicing pytest-cov Repository for practicing pytest-cov. Contribute to Daco2020/pytest-cov-practice development by creating an account on GitHub. github.com (실습에 사용하는 소스코드는 위 링크에서 확인할 수 있습니다.) pytest-cov 란? pytest-cov는 --cov 옵션 추가하여 테스트 대상의 coverage를 확인할 수 있습니다. 사용자는 coverage 수치를 통해 테스트의 적용범위를 파악할 수 있습니다. 실습 방법 레포지토리 복사 git clone https://g..

Pytest _ client 에서 parmas 값 넣는 방법

테스트 코드를 작성하다보면 client를 사용해 uri요청을 보낼 때가 있습니다. 그리고 쿼리 파라미터(query string)는 패스 파라미터와 마찬가지로 uri를 텍스트로 작성해 보낼 수 있습니다. uri를 만드는 방법 세 가지를 함께 보겠습니다. 방법1. 일반 텍스트 response = client.get( "http://0.0.0.0:8000/users?limit=10&offset=0" ) 하지만 텍스트로만 작성할 경우, 하나의 케이스만 테스트 할 수 있는 정적 값이 되고 맙니다. 방법2. f-string 다음처럼 f-string을 통해 동적 값을 넣어줄 수 있습니다. limit = 10 offset = 0 response = client.get( f"http://0.0.0.0:8000/users..

pytest _ 하나의 함수에서 복수 케이스 테스트 하는 방법

단일 케이스 테스트 보통 테스트는 단일 케이스로 이루어집니다. 단일 케이스로 테스트를 하면 최소의 단위로 테스트를 진행하기 때문에 코드의 정확도를 높일 수 있고, 보는 이에게도 명확한 케이스 사례를 보여줄 수 있다는 장점이 있습니다. 예를 들어 회원가입 API를 테스트한다고 할 때 케이스를 다음처럼 나눌 수 있습니다. 성공 : 회원가입이 성공했는가? 실패1 : 회원가입 시 이메일이 중복되는가? 실패2 : 회원가입 시 닉네임이 중복되는가? 실패3 : 회원가입 시 패스워드가 유효한가? 하지만 유사한 케이스를 모두 단일 케이스로 테스트할 경우 비슷한 코드가 반복되면서 가독성과 효율이 떨어질 수 있습니다. 위의 케이스 중에서 실패1, 실패2를 살펴보겠습니다. 이 둘은 중복여부에 의한 실패를 확인하는 테스트로 엄..

@pytest.fixture 로 test 데이터 세팅하기

pytest.fixture 는 왜 사용할까? 테스트 코드를 작성하다보면 ‘클라이언트’나 ‘토큰’, ‘객체’ 등이 필요할 수 있습니다. 보통은 setup 이나 teardown 등으로 데이터를 세팅할 수 있지만 pytest에는 fixture 데코레이터를 통해 필요한 데이터를 세팅하고 어떤 테스트 함수든지 재활용할 수 있습니다. 테스트 코드 예시 아래는 로그인 api를 테스트 하는 함수입니다. # test_login.py def test_login_api(client, create_user): data = { "email": "test@test.com", "password": "password", } r = client.post("/api/v1/login", json=data) r_message = r.jso..

내가 쓴 Python 테스트 코드 coverage 알아보기

커버리지란? 테스트 케이스가 얼마나 충족되었는지를 나타내는 지표 중 하나입니다. 테스트를 진행하였을 때 ‘코드 자체가 얼마나 실행되었느냐’는 것이고, 수치를 통해 확인할 수 있습니다. 커버리지를 확인하려면? 테스트 코드를 작성하다보면 내 코드의 커버리지가 얼마나 되는지 궁금해지는데요. 제가 10초만에 커버리지를 확인할 수 있는 방법을 알려드리겠습니다. (테스트 코드가 이미 작성되어있고 테스트를 실행할 수 있는 상황을 가정합니다.) 1. 먼저 coverage 라이브러리를 설치합니다. pip install coverage 2-1. 만약 pytest 를 사용한다면 다음 명령어를 입력해주세요. coverage run -m pytest 2-2. 만약 unittest 를 사용한다면 다음 명령어를 입력해주세요. co..