Postman을 활용한 API 테스트 방법

INSANEZINDOL·2024년 2월 14일

seminar

목록 보기
7/9

Workspaces 생성

  • 새로 워크스페이스를 생성하거나 기본적으로 만들어져있는 My Workspace에 진입한다.
Workspaces는 포스트맨의 모든 기능을 담고 있는 뷰라고 보면 된다.
프로젝트 용도에 따라 Personal workspace와 Team workspace로 구분된다.
workspace의 단위는 목적에 따라 자유롭게 지정할 수 있다.
예를들어 QA는 테스트 작성을 위한 workspace를 가지고, 기술자는 API를 문서화하기 위한 workspace를 가지는 식으로 분업이 가능하다.
제품이나 프로젝트별로 구성하게 되면 해당 서비스와 관련된 모든 것들이 해당 workspace 내에 있으므로, 해당 제품에 대한 작업을 시작했을 때 맞춤 view를 볼 수 있다.
외부 파트너나 고객과 통합하여 구축하는 경우 권한을 제어하여 workspace에 참여할 수 있도록 할수 있다.
  • [My Workspace] - [New] 클릭

  • [Workspace] 클릭 후

  • 생성하고 싶은 workspace 정보 입력후 생성

Colleciton 생성

Collection은 request를 그룹화한 단위이다. 모든 HTTP 요청은 Collection에 포함되어 있다.
Collection에 속한 모든 요청에 대해 통합 테스트를 실행할 수 있다.
여러 request를 모아서 관리하고 공유함으로써 API 사용 설명서 역할을 하는 것이라 이해하면 된다.
  • [My Workspace] - [New] 클릭

  • [Collection] 클릭

Folder 생성

  • 위에서 Collection 이름을 생성했다.
  • 그러면 이 Collection의 API 샘플들은 로그인, 기획전, 이벤트 등등으로 구분 되니 체계적으로 관리하기 위해 폴더 별로 나누어 보자.
  • 생성할 Collection 에서 우클릭 후 [Add folder] 클릭

Environment 생성

일반적으로 사용되는 변수와 같은 방식으로 동작한다.
여러 위치에서 변수의 값을 재사용할 수 있으며, 값을 변경하면 해당 변수의 인스턴스 각각이 변경된 값으로 적용된다.
예를 들어 동일한 도메인을 사용하는 여러 API 엔드포인트가 있다고 가정했을 때, 도메인을 변수로 저장해놓으면, 값을 반복하는 대신 요청에서 {{domain}}/endpoint1과 {{domain}}/endpoint2와 같이 사용할 수 있다.
이 경우 도메인이 변경되면 변수의 값을 한 번 변경하는 것으로 모든 사용처에서 변경이 적용된다.
또한 변수를 사용하게 되면 Script단에서 Chained Request 처리를 수행할 수 있다.
  • [My Workspace] - [New] 클릭

  • [Environment] 클릭

  • “어드민 DEV” 라는 Environment 그룹 생성

    • 하위에는 login-endpoint, api-endpoint, uid, password 변수명을 선언하고 값에는 각각 개발서버의 url, 로그인 아이디/비밀번호를 설정
  • “어드민 PRD” 라는 Environment 그룹 생성

    • 하위에는 login-endpoint, api-endpoint, uid, password 변수명을 선언하고 값에는 각각 운영서버의 url, 로그인 아이디/비밀번호를 설정
  • Type은 default와 secret으로 설정할수 있으며 각각 평문과 비공개로 보이나, 눈모양 아이콘을 클릭하면 비공개로 된 문자열을 확인할 수 있음

HTTP Request 생성

  • [My Workspace] - [New] 클릭

  • [HTTP Request] 클릭

  • 로그인 API 생성

    • 1) 우측상단에 Environment 선택 셀룩어드민 DEV
    • Method, URL, Body 부분을 API에 맞게 입력 후 [Send] 클릭
  • Tests 코드 작성 및 Test Results 확인

  • 샘플 테스트 코드

// 응답코드가 200인지 확인하는 테스트 코드
pm.test("Status code is 200", function () {
  pm.response.to.have.status(200);
});

// 응답코드가 200이면
if( pm.response.to.have.status(200) ){
    // 응답 json을 가져온다.
    const responseData = pm.response.json();
    // 응답 json에서 token_data하위 ACCESS_TOKEN 하위 token 값을 가져와서 collection variables에 저장한다.
    pm.collectionVariables.set("admin-token", responseData.token_data.ACCESS_TOKEN.token);
    // 아래는 collection variables에 저장하지 않고 global variable에 저장하는 코드
    // pm.globals.set("admin-token", responseData.token_data.ACCESS_TOKEN.token);
}
  • 테스트에서 실행된 코드로인해 collection variables 에 cellook-admin-token 이름으로 토큰이 저장된 모습

  • 추가된 변수를 사용하는 GET 호출 추가

    • 호출 URL은 Environment에 저장된 api-endpoint 변수를 사용
    • 토큰값은 collection variables 에 저장된 cellook-admin-token 변수를 사용

  • 테스트 코드 작성 및 결과 확인

  • 샘플 테스트 코드

// 응답코드가 200인지 확인하는 테스트 코드
pm.test("Status code is 200", function () {
  pm.expect(pm.response.code).to.eql(200);
});

// 응답 Body가 Array 인지 확인하는 테스트 코드
pm.test("Response data is array", function () {
  pm.expect(pm.response.json()).to.be.an('array').but.not.an('object');
});

성능 지표 보기

  • 응답 크기 및 응답 시간과 같은 응답 매개 변수에 대한 세부 정보를 얻으려면 각 값 위로 마우스를 가져 가기 만하면 Postman이 각 속성에 대한 세부 정보가 포함 된 세부보기를 표시해준다.
  • 예를 들면 아래와 같이 요청 시간에 대해-연결 시간, 소켓 시간, DNS 조회, 핸드 셰이크 등과 같은 개별 구성 요소로 추가 분석이 가능하다.

전체 테스트 실행

  • 위에서 Collection 에서 로그인, GET, PUT HTTP Request를 생성했다.

  • 만일 request 리스트들이 엄청 많을 경우, 이들을 하나하나씩 눌러 테스트 해야 될까?

  • 그럴 필요없이 다음과 같이 Collection에 등록된 모든 request를 폴더별로 실행이 가능하다.

    • [Collection] 우클릭 [Run collection] 클릭
  • Runner 화면

    • 왼쪽에는 실행할 Request의 여부(Y/N)와 순서를 설정할 수 있다.
    • 오른쪽에는 Runner의 세부 설정을 설정할 수 있다.
      - Iterations : 해당 컬렉션을 반복할 횟수를 설정할 수 있다.
      - Delay : HTTP Request 사이의 간격 시간을 설정할 수 있다.
  • 전체 실행 결과
    • 전체 실행 시간과 각각의 시간, 실행시 수행되는 테스트의 결과까지 확인할 수 있다.

코드 스니펫 (Code snippet)
포스트맨의 유용한 점은 바로 작성한 Request를 프로그래밍 코드로 추출할수 있다는 점이다.
Code snippet 에서 사용자에 고른 언어에 맞춰 샘플 코드가 생성된다.
자신이 사용하는 개발 언어에 맞춰 테스트 request에 사용된 코드를 재활용해 활용할 수 있다.

  • Request 생성 후 좌측에 [Code] 버튼을 클릭하고 Code snippet 에서 생성할 언어를 선택하면 하단에 샘플 코드가 생성된다.

  • Java로 선택한 모습

  • cURL을 선택하면 복사해서 linux 서버에서 CLI로 테스트하기 좋다.

  • 다른 언어들은 HTTP 통신 코드를 어떻게 작성하는지도 간단하게 확인할 수 있다.

profile
Backend Engineer

0개의 댓글