Python http 요청 mocking하는 HTTPretty 라이브러리 알아보기

오늘은 Python에서 가상의 http 요청을 만들어서 테스트할 수 있는 HTTPretty 라이브러리를 알아보려 합니다.

HTTPretty 설치

우선 virtualenv로 파이썬 환경을 분리해줍니다.

pip3 install virtualenv
virtualenv -mvenv env

env라는 이름의 가상 환경을 생성합니다.

source env/bin/activate

가상환경을 폴더에서 활성화합니다.

pip3 install --upgrade pip

pip의 업그레이드가 존재하는지 확인하고 진행합니다.

pip install httpretty

pip로 HTTPretty를 설치합니다.

예제

import httpretty
import urllib.request
import json

http 를 mock으로 만들어서 테스트할 수 있는 httpretty 패키지와 페이지 내용을 가지오는 urllib, 그리고 json 형식으로 로드하기 위한 json 패키지를 가져옵니다.

@httpretty.activate
def test_http():
    httpretty.register_uri(
        httpretty.GET,
        "https://example.com",
        body='{"value": "hello,world"}'
    )

httpretty로 테스트할 함수를 만들 수 있습니다.

register_uri로 get 형식의 통합 자원 식별자를 등록합니다.

위 코드는 https://example.com 으로 접속했을 때에 hello,world라고 출력되도록 mock을 작성했습니다.

    with urllib.request.urlopen('https://example.com') as f:
        response = f.read()

urllib.request로 urlopen을 사용하여 https://example.com 의 내용을 가져올 수 있습니다.

    content = json.loads(response.decode())
    print(json.loads(response.decode()))

    print(content == {'value': 'hello,world'})

json.loads()로 문자열을 파이썬 dict 타입으로 변환합니다.

if __name__ == '__main__':
    test_http()

이제 메인 함수를 작성하여 httpretty로 감싼 함수를 수행합니다.

Written on July 2, 2019