분류 Nodejs

HTTP 상호 작용 기록, 재생 및 스텁

컨텐츠 정보

  • 조회 393 (작성일 )

본문

Polly.JS는 HTTP 상호 작용을 기록, 재생 및 스터 빙 할 수 있는 독립형 프레임워크에 독립적 인 JavaScript 라이브러리입니다. Polly.JS는 노드와 브라우저 모두에서 여러 요청 API를 활용하여 구성이 거의 없거나 전혀 없는 요청과 응답을 조롱 할 수 있으며 단순하고 강력하며 직관적 인 API로 각 요청을 완벽하게 제어 할 수 있습니다.


https://github.com/Netflix/pollyjs 


왜 폴리인가? 


비품과 공장을 API와 동등하게 유지하는 데 시간이 오래 걸릴 수 있습니다. 폴리는 앞서의 유연성 없이 실제 서버 응답을 기록하고 유지함으로써 이를 완화합니다.

  • 신속하고 결정론적이며 정확한 테스트를 위해 테스트 스위트의 HTTP 상호 작용을 기록하고 향후 테스트 실행 중에 이를 재생하십시오.
  • Polly의 클라이언트 측 서버를 사용하여 요청 및 응답을 수정하거나 가로 채서 다른 애플리케이션 상태 (예 :로드, 오류 등)를 시뮬레이션 하십시오.

특성

  • ? 노드 및 브라우저 지원
  • ⚡️️ 단순하고 강력하며 직관적 인 API
  • ? 일류 모카 및 QUnit 테스트 도우미
  • ? 가로 채기, 패스 스루 및 첨부 이벤트
  • ? 디스크 또는 로컬 스토리지에 기록
  • ⏱ 속도 저하 또는 속도 향상


시작하기 


시작하려면 빠른 시작 설명서를 확인하십시오.


용법 


Polly를 사용하여 테스트 사례의 예를 살펴 보겠습니다.


import { Polly } from '@pollyjs/core';
import XHRAdapter from '@pollyjs/adapter-xhr';
import FetchAdapter from '@pollyjs/adapter-fetch';
import RESTPersister from '@pollyjs/persister-rest';

/*
  Register the adapters and persisters we want to use. This way all future
  polly instances can access them by name.
*/
Polly.register(XHRAdapter);
Polly.register(FetchAdapter);
Polly.register(RESTPersister);

describe('Netflix Homepage', function() {
  it('should be able to sign in', async function() {
    /*
      Create a new polly instance.

      Connect Polly to both fetch and XHR browser APIs. By default, it will
      record any requests that it hasn't yet seen while replaying ones it
      has already recorded.
    */
    const polly = new Polly('Sign In', {
      adapters: ['xhr', 'fetch'],
      persister: 'rest'
    });
    const { server } = polly;

    /* Intercept all Google Analytic requests and respond with a 200 */
    server
      .get('/google-analytics/*path')
      .intercept((req, res) => res.sendStatus(200));

    /* Pass-through all GET requests to /coverage */
    server.get('/coverage').passthrough();

    /* start: pseudo test code */
    await visit('/login');
    await fillIn('email', 'polly@netflix.com');
    await fillIn('password', '@pollyjs');
    await submit();
    /* end: pseudo test code */

    expect(location.pathname).to.equal('/browse');

    /*
      Calling `stop` will persist requests as well as disconnect from any
      connected browser APIs (e.g. fetch or XHR).
    */
    await polly.stop();
  });
});


위의 테스트 케이스는 테스트가 다시 실행될 때 Polly가 로그인 응답을 재생하는 데 사용할 다음 HAR 파일을 생성합니다.

{
  "log": {
    "_recordingName": "Sign In",
    "browser": {
      "name": "Chrome",
      "version": "67.0"
    },
    "creator": {
      "name": "Polly.JS",
      "version": "0.5.0",
      "comment": "persister:rest"
    },
    "entries": [
      {
        "_id": "06f06e6d125cbb80896c41786f9a696a",
        "_order": 0,
        "cache": {},
        "request": {
          "bodySize": 51,
          "cookies": [],
          "headers": [
            {
              "name": "content-type",
              "value": "application/json; charset=utf-8"
            }
          ],
          "headersSize": 97,
          "httpVersion": "HTTP/1.1",
          "method": "POST",
          "postData": {
            "mimeType": "application/json; charset=utf-8",
            "text": "{\"email\":\"polly@netflix.com\",\"password\":\"@pollyjs\"}"
          },
          "queryString": [],
          "url": "https://netflix.com/api/v1/login"
        },
        "response": {
          "bodySize": 0,
          "content": {
            "mimeType": "text/plain; charset=utf-8",
            "size": 0
          },
          "cookies": [],
          "headers": [],
          "headersSize": 0,
          "httpVersion": "HTTP/1.1",
          "redirectURL": "",
          "status": 200,
          "statusText": "OK"
        },
        "startedDateTime": "2018-06-29T17:31:55.348Z",
        "time": 11,
        "timings": {
          "blocked": -1,
          "connect": -1,
          "dns": -1,
          "receive": 0,
          "send": 0,
          "ssl": -1,
          "wait": 11
        }
      }
    ],
    "pages": [],
    "version": "1.2"
  }
}