Postman 요청 실행 순서 제어와 Workflow 활용법

Postman은 API 개발 도구로서 지속적으로 업데이트되며, API 설계, 테스트, 모니터링, Mock 서버, 팀 협업 등 다양한 기능을 제공합니다. 이 글에서는 Postman에서 요청 실행 순서를 제어하는 방법과 Workflow 기능을 자세히 살펴보겠습니다.

실행 순서 수정하기

API 요청 간 의존성이 있는 경우, 요청을 순차적으로 실행해야 할 필요가 있습니다. 이전에는 Pre-request Script에서 pm.sendRequest를 사용하여 선행 요청을 강제로 실행하는 방법을 사용했지만, 최신 Postman에서는 Run Collection 화면에서 직접 순서를 변경할 수 있습니다.

예를 들어, Collection에 모든 API를 모아두고 "토큰 발급" 요청의 Tests 스크립트에서 발급받은 access_token을 전역 변수로 저장하면, 이후 "OCR 분석" 요청에서 해당 변수를 활용할 수 있습니다. Run Collection 화면에서 요청을 드래그하여 기본 실행 순서를 변경하거나, 특정 요청을 실행에서 제외할 수도 있습니다.

Workflow (워크플로우)

Run Collection에서 순서를 조정하는 방법 외에도, postman.setNextRequest("같은 Collection 내 요청 이름");을 사용하여 요청 간의 흐름을 프로그래밍 방식으로 제어할 수 있습니다.

순차 구조

Collection을 만들고 A, B, C, D, E, F 요청을 추가합니다. A 요청의 Tests 스크립트에 아래 코드를 작성하면 A 실행 후 D가 실행됩니다.

postman.setNextRequest("D");

이 경우 A 이후 B와 C는 건너뛰고 D로 바로 이동합니다. 단, D 요청이 실행 목록에서 체크 해제되어 있으면 A만 실행됩니다.

분기 구조

if 조건문을 사용하여 실행 흐름을 제어할 수 있습니다. 예를 들어 A 요청의 성공 여부에 따라 D 또는 B로 분기할 수 있습니다.

var jsonData = pm.response.json();

if(jsonData.args.a === 'a'){
    postman.setNextRequest("D");
} else {
    postman.setNextRequest("B");
}

반복 구조

마지막 요청에서 postman.setNextRequest()를 사용하여 이전 요청을 다시 호출하면 무한 루프를 만들 수 있습니다. 예를 들어 F 요청에서 postman.setNextRequest("A")를 실행하면 A→B→C→...→F→A→...가 반복됩니다.

반드시 중단 조건을 설정해야 합니다. 일반적으로 if 문으로 postman.setNextRequest() 실행 여부를 결정하여 루프를 제어합니다.

예제: 비동기 API 폴링

자기 자신을 가리키는 postman.setNextRequest를 사용하여 비동기 API의 결과를 주기적으로 확인하는 폴링을 구현할 수 있습니다.

1. "주문 생성" 요청을 만듭니다.

http://115.28.108.130:5000/api/order/create/?user_id=123&goods_id=123&num=2&amount=20.0

이 API는 비동기로 처리되며, 응답으로 order_id를 반환합니다. Tests 스크립트에서 order_id를 전역 변수로 저장합니다.

var jsonData = pm.response.json();
pm.globals.set("order_id", jsonData.order_id);

2. "주문 결과 확인" 요청을 만듭니다.

http://115.28.108.130:5000/api/order/get_result/?order_id={{order_id}}

주문이 아직 처리 중이면 응답으로 {}를 반환하고, 완료되면 상세 정보를 반환합니다.

{
    "amount": "20.0",
    "goods_id": "123",
    "num": "2",
    "user_id": "123"
}

Tests 스크립트에서 폴링 조건을 설정합니다. 응답이 빈 객체이면 자기 자신을 다시 호출합니다.

if(pm.response.text() === "{}\n"){
    postman.setNextRequest("주문 결과 확인");
}

Run Collection을 실행하면 "주문 결과 확인" 요청이 빠르게 반복됩니다. 실제로는 폴링 간격을 추가하는 것이 좋습니다. setTimeout을 사용하여 지연 시간을 적용할 수 있습니다.

function loop(){
    postman.setNextRequest("주문 결과 확인");
}

if(pm.response.text() === "{}\n"){
    setTimeout(loop, 5000); // 5초 간격
}

이제 5초마다 한 번씩 요청이 전송되며, 주문이 완료되면 반복이 중단됩니다.

주의사항

  • 무한 폴링을 방지하기 위해 최대 폴링 횟수나 최대 시간을 설정하는 것이 좋습니다. (정수 변수를 증가시키는 방식 사용)
  • 폴링이 끝난 후 결과를 검증하는 assertion을 추가할 수 있습니다. (else 블록에 작성)

태그: Postman API테스트 Workflow 폴링 setNextRequest

6월 13일 00:30에 게시됨