VCR. py: HTTP 상호작용 을 자동 으로 모 의 하여 테스트 를 간소화 하고 가속 화 합 니 다.

3746 단어 ide
[안내]: Ruby 의 VCR 라 이브 러 리 의 Python 버 전 은 테스트 실행 속도 와 확정 성 을 가속 화 하 는 데 사 용 됩 니 다.
간단 한 소개
VCR. py 는 HTTP 요청 테스트 를 간소화 하고 가속 화 시 켰 습 니 다. Ruby 의 VCR 라 이브 러 리 Python 버 전 입 니 다. VCR. py 를 처음 실행 할 때 지원 하 는 HTTP 라 이브 러 리 에서 실 행 된 요청 은 모두 기록 되 고 직렬 화 되 어 평면 파일 에 기록 합 니 다. 파일 은 기본적으로 Yml 파일 입 니 다.
이 평면 파일 은 테이프 (cassette) 라 고 불 린 다.관련 코드 를 다시 실행 할 때 VCR. py 는 위 테이프 에 저 장 된 직렬 화 된 요청 과 응답 데 이 터 를 읽 고 HTTP 요청 을 차단 하여 이 요청 에 대응 하 는 응답 값 을 되 돌려 줍 니 다.
즉, 같은 HTTP 요청 에 대해 첫 번 째 는 서버 까지 완전한 HTTP 요청 으로 VCR. py 가 기록 되 고 두 번 째 부 터 는 VCR. py 가 같은 요청 을 차단 하고 테 이 프 를 읽 으 며 첫 번 째 요청 한 데 이 터 를 되 돌려 주 며 두 번 째 는 실제로 HTTP 통신 이 발생 하지 않 는 다 는 것 이다.
이렇게 하면 다음 과 같은 장점 이 있다.
  • 오프라인 으로 작업 할 수 있 고 네트워크 에 의존 하지 않 습 니 다
  • 확 정 된 서비스 응답 치 는 서비스 영향 을 받 지 않 습 니 다
  • 테스트 수행 속도 가속 화
  • 서버 가 API 를 수정 해 데이터 내용 이나 포맷 이 바 뀌 면 테이프 파일 을 삭제 하고 테스트 를 다시 실행 하면 된다.
    항목 주소:
    https://github.com/kevin1024/...
    설치 하 다.
    VCR. py 는 PyPI 의 패키지 로 Python 3.5 + 를 지원 하 며 pip 를 사용 하면 설치 할 수 있 습 니 다.
    pip install vcrpy  

    VCR. py 는 다음 HTTP 네트워크 라 이브 러 리 를 지원 합 니 다.
  • aiohttp
  • boto
  • boto3
  • http.client
  • httplib2
  • requests (1. x 와 2. x 모두 지원)
  • tornado.httpclient
  • urllib2
  • urllib3

  • 간단히 사용 하 다
    먼저 다음 코드 를 보십시오.
    import vcr  
    import urllib2  
      
    with vcr.use_cassette('fixtures/vcr_cassettes/synopsis.yaml'):  
        response = urllib2.urlopen('http://www.iana.org/domains/reserved').read()  
        assert 'Example domains' in response  

    이상 코드 를 실행 하면 VCR. py 는 요청 을 fixtures / vcr \ 에 기록 합 니 다.cassettes/synopsis.yaml。
    다시 실행 할 때 HTTP 요청 을 보 낼 때 VCR. py 는 파일 에 저 장 된 응답 값 을 직접 되 돌려 줍 니 다.
    이 테스트 는 현재 빠 른 (HTTP 요청 을 하지 않 고 네트워크 에 접근 하지 않 음), 확 정 된 (클 라 이언 트 오프라인 이나 서비스 지연 도 테스트 할 수 있 음), 정확 한 (응답 값 은 모두 실제 요청 에서 얻 은 것) 입 니 다.
    장식 기 를 통 해서 도 사용 할 수 있 습 니 다. 아래 코드 는 위의 코드 와 같 습 니 다.
    @vcr.use_cassette('fixtures/vcr_cassettes/synopsis.yaml')  
    def test_iana():  
        response = urllib2.urlopen('http://www.iana.org/domains/reserved').read()  
        assert 'Example domains' in response  

    장식 기 를 사용 할 때 테이프 경 로 를 생략 할 수 있 습 니 다. 이 경우 테이프 파일 은 테스트 파일 과 같은 디 렉 터 리 에 놓 여 있 고 파일 이름 은 테스트 함수 와 같 습 니 다.
    배치 하 다.
    VCR 의 기본 설정 이 마음 에 들 지 않 으 면 VCR 인 스 턴 스 를 자체 적 으로 예화 하고 인 자 를 정의 할 수 있 습 니 다.
    import vcr  
      
    my_vcr = vcr.VCR(  
        serializer='json',  
        cassette_library_dir='fixtures/cassettes',  
        record_mode='once',  
        match_on=['uri', 'method'],  
    )  
      
    with my_vcr.use_cassette('test.json'):  
        # your http code here  

    기본 설정 을 수정 할 수도 있 습 니 다:
    with vcr.use_cassette('test.yml', serializer='json', record_mode='once'):  
        # your http code here  

    요청 일치
    요청 일치 도 설정 할 수 있 습 니 다. 즉, 두 HTTP 요청 이 같은 요청 인지 여 부 를 판단 하 는 규칙 을 수정 할 수 있 습 니 다.기본 규칙 은 같은 URL 과 HTTP 방법 (POST, GET 등) 을 가 진 요청 이 같은 요청 입 니 다.match 를 통 해 \on 설정 을 진행 하고 다음 설정 가능 한 항목 을 제공 합 니 다:
  • 요청 방법 (예: POST 또는 GET)
  • uri (완전한 URI)
  • 호스트 (요청 을 받 은 서버 의 호스트 이름)
  • 포트 (요청 을 받 은 서버 의 포트)
  • 경로 (요청 한 경로)
  • query 인자 (요청 한 query 문자열)
  • raw\_body (전체 요청 테마)
  • body
  • 요청 헤더
  • 이상 이 요 구 를 만족 시 키 지 못 하면 매 칭 기 를 사용자 정의 할 수 있 으 니 홈 페이지 를 참고 하 시기 바 랍 니 다.
  • 인기 있 고 재 미 있 으 며 실 용적 인 오픈 소스 프로젝트 를 일상 적 으로 공유 합 니 다.Python, Java, C / C + +, Go, JS, CSS, Node. js, PHP,. NET 등 10 만 + Star 의 오픈 소스 기술 자원 라 이브 러 리 유지 에 참여 합 니 다.

    좋은 웹페이지 즐겨찾기