Apidog에서 API 테스트 시나리오에 If/Else 조건 분기 및 흐름 제어 추가하기

Apidog의 API 테스트 시나리오에 if/else 조건부 분기 및 흐름 제어를 추가하여 이전 응답에 따라 실행 흐름이 분기되도록 하고, CLI 자동화도 지원합니다.

Ashley Innocent

Ashley Innocent

15 July 2026

Apidog에서 API 테스트 시나리오에 If/Else 조건 분기 및 흐름 제어 추가하기

Apidog 엔터프라이즈

온프레미스 배포

SSO & RBAC

SOC 2 준수

Apidog Enterprise 살펴보기

대부분의 API 테스트는 일직선으로 실행됩니다. 로그인 호출, 결제 호출, 영수증 엔드포인트 호출, 그리고 각 단계에서 검증하는 식입니다. 다음 단계가 의존하는 방식으로 이전 단계가 실패할 수 있을 때까지는 잘 작동합니다. 만약 로그인이 401을 반환하면, 결제 요청을 실행하는 것은 무의미합니다. 더 나쁜 것은, 실제 실패를 두 번째의 오해의 소지가 있는 실패 뒤에 숨기는 것입니다. 여러분이 원하는 것은 로그인 응답을 읽고 계속 진행할지 여부를 결정하며, 어디서 문제가 발생했는지에 대한 진실을 보고하는 테스트입니다.

그러한 결정은 조건부 논리이며, 흐름 제어를 통해 구축합니다. 이 가이드는 Apidog에서 API 테스트 시나리오에 if/else 분기를 추가하여 이전 응답에 따라 실행이 분기될 수 있도록 하는 방법을 보여줍니다. 실제 시나리오를 구축할 것입니다: 로그인하고, 상태 코드를 확인하며, 로그인이 실제로 성공했을 때만 결제로 진행합니다. Apidog 시나리오가 처음이라면, Apidog로 테스트 시나리오를 작성하는 방법에 대한 설명은 이 글의 기반이 되는 선형적인 기본 사항을 다룹니다. 분기 패턴 자체에 대한 정의는 조건문(conditional statements)에 대한 MDN 가이드가 좋은 입문서입니다. Apidog를 무료로 다운로드하여 따라 할 수 있습니다.

버튼

흐름 제어란 무엇이며, 무엇이 아닌가

Apidog에서 자동화된 테스트는 테스트 모듈에 있습니다. 작업하는 단위는 테스트 시나리오이며, 문서에서는 Postman의 컬렉션과 유사하다고 설명합니다. 시나리오 내에서 테스트 단계를 구성합니다: 각 단계는 개별 요청이거나 분기, 루프 또는 지연과 같은 흐름 제어 요소입니다.

흐름 제어는 흐름 제어 요소들의 집합입니다. 이를 통해 시나리오가 단순히 요청을 순서대로 진행하는 것 이상의 작업을 수행할 수 있습니다. 흐름 제어 및 조건부 분기에 대한 Apidog 문서는 여기에 사용된 모든 레이블의 참고 자료입니다. 이 글에서 초점을 맞추는 것은 조건부 분기(Conditional Branching)인데, 이는 Apidog에서 if/else를 지칭하는 이름입니다. 분기는 주어진 값을 읽고, 해당 값을 조건과 비교한 다음, 조건이 참일 때 한 세트의 단계를 실행하고 조건이 거짓일 때 다른 세트의 단계를 실행합니다.

혼동될 수 있으므로 미리 한 가지 명확히 하자면, 분기(branching)는 반복(looping)이 아닙니다. 분기는 단계 블록이 실행될지 여부를 한 번 결정합니다. 루프는 블록을 여러 번 실행합니다. Apidog에는 반복을 위한 별도의 기능인 For Loops 및 ForEach Loops가 있으며, 이는 범위 또는 배열의 항목에 걸쳐 동일한 요청을 반복하는 다른 문제에 해당합니다. 주문 ID 배열을 탐색해야 하는 경우, 이는 ForEach 루프 튜토리얼에서 다루는 ForEach 루프이며, 분기가 아닙니다. 이 가이드는 if/else에 초점을 맞춥니다.

Apidog 문서는 흐름 제어, 조건부 분기, 루프 또는 단계 간 데이터 전달에 대한 무료/유료 제한을 명시하지 않습니다. 또한 이러한 기능에 대해 클라우드와 자체 호스팅 간의 구분이 언급되어 있지 않습니다. 시나리오를 구축할 수 있다면, 여기에 분기를 추가할 수 있습니다.

로그인 응답에 따라 분기하는 시나리오 구축하기

목표는 다음과 같습니다. 사용자가 로그인합니다. 로그인 엔드포인트가 200을 반환하면 시나리오는 결제 생성을 진행합니다. 그 외의 값을 반환하면, 시나리오는 결제가 실행된 척하는 대신 중지하고 실패를 보고합니다.

1단계: 테스트 시나리오 생성

Apidog를 열고 테스트 모듈로 이동합니다. 검색창 옆의 `+`를 클릭하여 새 테스트 시나리오를 만들고, 시나리오가 저장될 디렉토리를 선택한 다음, 생성을 완료하기 위해 우선순위를 설정합니다. 이제 단계를 위한 빈 시나리오가 준비되었습니다.

2단계: 로그인 요청을 첫 번째 단계로 추가

첫 번째 테스트 단계를 추가합니다. Apidog는 요청을 가져오는 몇 가지 방법을 제공합니다: 기존 엔드포인트 사양에서 가져오거나, 저장된 엔드포인트 케이스에서 가져오거나, 사용자 정의 요청을 직접 추가하거나, cURL 문자열에서 추가할 수 있습니다. 빠르게 시작하려면 사용자 정의 요청을 추가하세요. POST로 설정하고 JSON 본문과 함께 인증 엔드포인트를 가리키도록 합니다:

POST https://api.your-store.com/v1/login
Content-Type: application/json

{
  "email": "dana@example.com",
  "password": "correct-horse-battery-staple"
}

이 단계를 단독으로 한 번 실행하여 예상하는 결과가 반환되는지 확인합니다. 성공적인 로그인은 200과 본문에 토큰을 반환합니다. 예를 들어 다음과 같습니다:

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "userId": "usr_10482"
}

3단계: 오케스트레이션 모드 진입

아무 단계를 클릭하여 오케스트레이션 모드로 진입합니다. 왼쪽 패널은 시나리오의 전체 흐름을 보여주며, 오른쪽 패널은 선택한 단계의 세부 정보를 보여줍니다. 이 분할 보기에서 분기를 구성할 수 있습니다. 단계를 재정렬해야 할 경우, 단계의 `≡` 아이콘을 드래그하여 이동시킬 수 있습니다.

4단계: 조건부 분기 추가

`단계 추가` 버튼을 클릭합니다. 이것이 모든 흐름 제어 요소를 삽입하는 주요 방법입니다. 메뉴에서 `조건부 분기`를 선택합니다. 그러면 If 문이 생성되며, 조건과 실행할 일부 단계를 기다리는 빈 분기가 만들어집니다.

이제 조건을 만듭니다. 로그인 응답의 상태 코드를 분기에 입력해야 합니다. Apidog는 고정된 판단 연산자 집합으로 조건을 구성합니다. 전체 목록은 다음과 같습니다: 같음, 같지 않음, 존재함, 존재하지 않음, 작음, 작거나 같음, 큼, 크거나 같음, 정규식과 일치함, 포함함, 포함하지 않음, 비어 있음, 비어 있지 않음, 목록에 있음, 목록에 없음.

이 분기에서는 로그인 상태 코드가 200과 같기를 원합니다. 따라서 조건은 다음과 같습니다: 로그인 응답 상태가 `200`과 `같음`.

5단계: 조건에서 이전 응답 참조

로그인 결과를 조건 필드에 넣는 방법은 두 가지가 있습니다.

첫 번째 방법은 설정이 필요 없습니다. 조건의 값 필드를 클릭하고 마법봉 아이콘을 클릭한 다음 `이전 단계 데이터 검색`을 선택합니다. Apidog를 사용하면 이전 로그인 단계를 직접 가리키고 해당 응답에서 값을 가져올 수 있습니다. 내부적으로는 `{{$.<단계 ID>.response.body.<필드 경로>}}` 구문을 사용하는 이전 단계 참조를 사용합니다. 예를 들어 상태 대신 로그인 본문에서 토큰을 원한다면, `{{$.1.response.body.token}}`을 참조할 수 있으며, 여기서 `1`은 로그인 단계의 ID입니다.

`이전 단계 데이터 검색`에 대해 알아야 할 두 가지 사항이 있습니다. 이는 API 모듈이 아닌 테스트 모듈에서만 작동합니다. 그리고 단일 단계를 개별적으로 실행할 때가 아니라 전체 시나리오를 실행할 때만 해결됩니다. 단독 실행 중에 이전 단계 참조가 비어 보이는 경우, 이는 예상된 동작입니다. 전체 시나리오를 실행하면 값이 채워집니다.

두 번째 방법은 명명된 변수를 사용하며, 테스트 및 API 모듈 모두에서 작동합니다. 로그인 요청에서 후처리기를 열고 `변수 추출` 액션을 추가합니다. JSONPath 표현식(예: `$.token`)으로 원하는 필드를 추출하면 Apidog가 이를 이름 아래에 저장합니다. 그런 다음 나중에 `{{token}}`으로 어디서든 참조할 수 있습니다. 이는 여러 모듈 또는 여러 분기에서 동일한 값을 사용할 수 있게 할 때 더 유연한 접근 방식입니다. 단계 간 값 이동에 대한 더 깊은 메커니즘은 테스트 단계 간 데이터 전달 방법 가이드에서 다룹니다.

상태 코드 분기에서는 로그인 단계의 상태에 대한 `이전 단계 데이터 검색`이 가장 짧은 경로입니다.

6단계: else 분기 추가

If 블록 위에 마우스를 올리고 `+ Else`를 클릭합니다. 그러면 조건이 거짓일 때 실행되는 대체 경로가 생성됩니다. 즉, 로그인이 200을 반환하지 않았을 때입니다.

이제 양쪽을 채웁니다:

이제 시나리오는 다음과 같은 일반 논리처럼 읽힙니다: 로그인이 200과 같으면 결제를 실행하고, 그렇지 않으면 보고하고 중지합니다.

7단계: 저장

`모두 저장`을 클릭하여 시나리오를 영구적으로 저장합니다. 저장되지 않은 변경 사항은 점 표시기로 나타나므로, 점이 보인다면 아직 작성할 작업이 남아있는 것입니다. 전체 시나리오를 실행하고 분기가 해결되는 것을 확인합니다. 유효한 자격 증명으로 로그인을 하면 If 블록이 실행됩니다. 잘못된 자격 증명으로 로그인을 하면 대신 Else 블록이 실행됩니다.

변형 및 고급 흐름 제어

기본 분기가 작동하면, 동일한 구성 요소들이 많은 부분을 커버합니다.

자체 참조에 대한 참고 사항: 시나리오는 원래 테스트 시나리오 자체를 참조할 수 없습니다. 이 보호 장치는 시나리오를 중첩할 때 의도하지 않은 무한 루프를 방지합니다.

Apidog CLI로 워크플로우 자동화

방금 구축한 시나리오는 앱 내부에서만 실행될 필요가 없습니다. Apidog는 저장된 시나리오를 헤드리스 방식으로 실행하는 명령줄 러너를 제공하며, 이는 CI에서 원하는 바입니다. 설치하고 로그인합니다:

npm install -g apidog-cli
apidog login --with-token <YOUR_ACCESS_TOKEN>

그런 다음 ID로 분기 시나리오를 실행하고, 환경을 지정하고, 리포터를 선택합니다:

apidog run --access-token $APIDOG_ACCESS_TOKEN -t <scenario_id> -e <env_id> -r cli

여기서 `-t`는 테스트 시나리오 ID이고, `-e`는 환경 ID이며, `-r`은 리포터입니다. 콘솔 출력에는 `cli`를 사용하고, 파이프라인이 게시할 수 있는 아티팩트에는 `html`과 `junit`를 사용합니다. `-r html,cli`와 같이 쉼표로 구분하여 여러 개를 동시에 출력할 수 있습니다. 분기는 앱에서와 동일하게 해결됩니다: 러너는 로그인 응답을 읽고, If 또는 Else 경로를 따르며, 종료 코드는 결과를 반영하므로 로그인 실패는 빌드 실패로 이어집니다. 전체 설정은 Apidog CLI 설치 가이드에 있으며, 파이프라인에 연결하는 방법은 Apidog CLI GitHub Actions 가이드에 설명되어 있습니다. 모든 커밋마다 실행하는 대신 타이머에 따라 동일한 시나리오를 실행하려면 Apidog에서 API 테스트를 예약하는 방법을 참조하십시오.

자주 묻는 질문

Apidog의 조건부 분기와 루프의 차이점은 무엇인가요?

조건부 분기는 조건에 따라 단계 블록이 실행될지 여부를 한 번 결정합니다. 루프는 블록을 반복적으로 실행합니다. 로그인이 성공했을 때만 결제로 진행하는 것과 같이 양자택일의 결정이 있을 때 분기를 사용합니다. 횟수 또는 배열에 걸쳐 요청을 반복해야 할 때 For 또는 ForEach 루프를 사용합니다. ForEach 루프 튜토리얼은 반복에 대해 자세히 다룹니다.

`이전 단계 데이터 검색` 참조가 비어있는 이유가 무엇인가요?

두 가지 일반적인 원인이 있습니다. 첫째, `이전 단계 데이터 검색`은 API 모듈이 아닌 테스트 모듈에서만 작동합니다. 둘째, 전체 테스트 시나리오를 실행할 때만 해결됩니다. 단일 단계를 개별적으로 실행하면 참조할 대상이 아직 없습니다. 전체 시나리오를 실행하면 값이 채워집니다.

상태 코드뿐만 아니라 응답 본문 내부의 필드에 따라 분기할 수 있나요?

네, 가능합니다. `{{$.1.response.body.status}}`와 같은 이전 단계 표현식으로 필드를 참조하거나 명명된 변수로 추출한 다음, `같음`, `포함`, `목록에 있음`과 같은 연산자를 선택합니다. 참조할 수 있는 모든 값이 조건을 구동할 수 있습니다. 이러한 값들을 이동하는 방법은 테스트 단계 간 데이터 전달 방법에서 다룹니다.

조건 빌더 대신 스크립트 내부에서 변수를 사용하는 방법은 무엇인가요?

스크립트는 `{{변수}}` 구문을 허용하지 않습니다. 전처리 또는 후처리 스크립트에서 원하는 단계 ID 및 필드 경로와 일치하는 `pm.variables.get(\"$.2.response.body.token\")`을 사용하십시오.

분기 기능은 추가 비용이 발생하거나 자체 호스팅 버전이 필요한가요?

Apidog 문서는 흐름 제어, 조건부 분기, 루프 또는 데이터 전달에 대한 요금제 제한을 명시하지 않으며, 이러한 기능에 대해 클라우드와 자체 호스팅 간의 구분을 언급하지 않습니다. 시나리오를 구축할 수 있다면, 여기에 분기를 추가할 수 있습니다.

마무리

선형 테스트는 무언가 고장 났다는 것을 알려줍니다. 분기 테스트는 어디에서 고장 났는지 알려주고, 더 이상 성공할 수 없는 경로에 단계를 낭비하는 것을 막습니다. 조건부 분기 단계를 추가하고, `이전 단계 데이터 검색` 또는 추출된 변수로 이전 응답을 전달하고, If와 `+ Else`를 연결하면 이제 시나리오는 실제 API와 같은 방식으로 결정을 내립니다. 앱에서 작동하면, 하나의 `apidog run` 명령이 동일한 로직을 CI로 가져갑니다. 신용 카드 없이 Apidog를 무료로 사용해보고, 선형 테스트를 생각하는 시나리오로 전환해 보세요.

Apidog에서 API 설계-첫 번째 연습

API를 더 쉽게 구축하고 사용하는 방법을 발견하세요