스페이스바AI
블로그문서강의가격
스페이스바AI

AI를 제대로 활용하는 실전 가이드

(주)스페이스바 | 대표: 김정우

서비스

  • 블로그
  • 문서
  • 강의
  • 가격

법적 고지

  • 이용약관
  • 개인정보처리방침

© 2025 (주)스페이스바. All rights reserved.

모든 글 보기
API Development

API 테스트 스텝 간 데이터 전달 완벽 가이드: 동적 값과 변수 추출

API 테스트에서 스텝 간 데이터를 전달하는 두 가지 핵심 방법인 동적 값(Dynamic Values)과 변수 추출(Variable Extraction)을 실제 예제와 함께 마스터합니다.

Spacebar AI
2025년 12월 7일
9분
#API 테스트
#Apidog
#변수
#자동화
#테스트 시나리오
API 테스트 스텝 간 데이터 전달 완벽 가이드: 동적 값과 변수 추출

API 테스트 스텝 간 데이터 전달 완벽 가이드

복잡한 API 테스트 시나리오에서는 한 스텝의 결과를 다음 스텝에서 사용해야 하는 경우가 많습니다. Apidog에서는 두 가지 핵심 메커니즘으로 이를 해결합니다.

두 가지 핵심 방법

1. 동적 값 (Dynamic Values)

이전 스텝의 출력을 실시간으로 직접 참조합니다.

장점: 간단하고 직관적
단점: 일회성 사용에 적합

2. 변수 추출 (Variable Extraction)

중요한 데이터를 변수로 저장하여 여러 스텝에서 재사용합니다.

장점: 재사용 가능, 스크립트에서 사용 가능
단점: 추가 설정 필요

스텝 유형별 데이터 전달

엔드포인트 응답 데이터

데이터 추출

JSONPath를 사용하여 응답에서 특정 값을 추출합니다:

// 응답 예시
{
  "products": [
    { "id": "prod_001", "name": "Widget A", "price": 29.99 },
    { "id": "prod_002", "name": "Widget B", "price": 39.99 }
  ],
  "total": 2
}

// JSONPath 추출
$.products[0].id → "prod_001"
$.products[0].name → "Widget A"
$.total → 2

추출한 데이터 사용

API 요청에서:

URL: /api/products/{{products_id}}
Header: Authorization: Bearer {{auth_token}}
Body: { "productId": "{{products_id}}" }

데이터베이스 쿼리에서:

SELECT * FROM products WHERE id = '{{products_id}}'

For 루프에서:

// 응답의 배열 길이만큼 반복
반복 횟수: {{$.1.response.body.products.length}}

ForEach 루프에서:

// 배열의 각 항목에 대해 반복
반복 대상: {{$.1.response.body.products}}

스크립트에서:

const productId = pm.variables.get("products_id");
console.log("Product ID:", productId);

데이터베이스 결과

데이터베이스 스텝의 데이터는 동적 변수로 직접 접근할 수 없습니다. 먼저 변수로 추출해야 합니다.

// DB 결과 예시
[
  { "id": 1, "name": "User A", "email": "a@test.com" },
  { "id": 2, "name": "User B", "email": "b@test.com" }
]

// JSONPath 추출
$[0].id → 1 (첫 번째 레코드의 id)
$ → 전체 결과 세트

For 루프

현재 반복 인덱스에 접근:

// 스텝 ID가 9인 For 루프의 현재 인덱스
{{$.9.index}}

// 스크립트에서
const currentIndex = pm.variables.get("$.7.index");

ForEach 루프

ForEach는 자동으로 두 가지 변수를 제공합니다:

// 스텝 ID가 4인 경우
{{$.4.element}}      // 현재 요소 전체
{{$.4.element.id}}   // 현재 요소의 id 속성
{{$.4.index}}        // 현재 인덱스

// 실제 활용
URL: /api/products/{{$.4.element.id}}/update
Body: { "index": {{$.4.index}} }

스크립트에서 변수 저장

스크립트에서 수동으로 데이터를 변수에 저장:

// Pre-request Script 또는 Post-response Script

// 환경 변수 (현재 환경에 저장)
pm.environment.set('userId', response.data.user.id);
pm.environment.set('products', JSON.stringify(response.data.products));

// 전역 변수 (모든 환경에서 사용)
pm.globals.set('apiVersion', 'v2');

// 로컬 변수 (현재 실행에서만 사용)
pm.variables.set('tempToken', response.data.token);

스크립트에서 변수 읽기

// getter 메서드 사용 (필수!)
const userId = pm.environment.get('userId');
const products = JSON.parse(pm.environment.get('products'));
const apiVersion = pm.globals.get('apiVersion');
const tempToken = pm.variables.get('tempToken');

// 주의: {{userId}} 구문은 스크립트에서 작동하지 않음!

실전 예제: 주문 생성 플로우

Step 1: 사용자 로그인
────────────────────
POST /api/auth/login
Body: { "email": "test@example.com", "password": "***" }
Extract: $.token → {{auth_token}}

Step 2: 상품 목록 조회
────────────────────
GET /api/products
Header: Authorization: Bearer {{auth_token}}
Extract: $.products → {{product_list}}

Step 3: ForEach - 재고 확인
────────────────────
ForEach: {{product_list}}
  GET /api/inventory/{{$.3.element.id}}
  Assert: $.quantity > 0

Step 4: 주문 생성
────────────────────
POST /api/orders
Body: {
  "productId": "{{$.2.response.body.products[0].id}}",
  "quantity": 1
}
Extract: $.orderId → {{order_id}}

Step 5: 주문 확인
────────────────────
GET /api/orders/{{order_id}}
Assert: $.status == "pending"

베스트 프랙티스

1. 일회성 데이터 → 동적 값

// 바로 다음 스텝에서만 사용하는 경우
{{$.1.response.body.id}}

2. 재사용 데이터 → 변수 추출

// 여러 스텝에서 사용하는 경우
Extract: $.token → {{auth_token}}

3. 복잡한 로직 → 스크립트

// 조건부 저장, 데이터 가공 등
if (response.data.status === 'success') {
  pm.environment.set('processedData', transformData(response.data));
}

4. 디버깅 팁

// 변수 값 확인
console.log("Current auth_token:", pm.environment.get("auth_token"));
console.log("All variables:", pm.variables.toObject());

결론

스텝 간 데이터 전달을 마스터하면 복잡한 API 테스트 시나리오도 깔끔하게 구현할 수 있습니다. 단순한 경우 동적 값을, 재사용이 필요한 경우 변수 추출을, 복잡한 로직이 필요한 경우 스크립트를 활용하세요.