API 통합 테스트 완벽 가이드 (즉시 사용 가능한 코드 포함)

Oliver Kingsley

Oliver Kingsley

20 May 2025

API 통합 테스트 완벽 가이드 (즉시 사용 가능한 코드 포함)

API 통합 테스트는 서로 다른 API가 예상대로 함께 작동하는지 확인합니다. 이 테스트는 다음을 포함하여 다양한 구성 요소가 상호 작용하는 방식을 검증합니다.

프로 팁: 원활한 API 통합 테스트를 위해, Apidog 는 최고의 플랫폼입니다. 실제 워크플로우를 시뮬레이션하는 과정을 단순화하여 여러 API가 상호 작용하는 방식을 효율적으로 테스트할 수 있도록 합니다.

버튼

API 통합 테스트의 주요 이점

  1. 신뢰성 및 데이터 정확성: 시스템 간에 데이터가 올바르게 전송되고 API가 안정적으로 작동하는지 보장합니다.
  2. 오류 처리: 오류를 식별하고 해결하여 시스템이 문제성 있는 API 응답에 반응하는 방식을 개선하는 데 도움이 됩니다.
  3. 성능 최적화: 특히 대량의 데이터를 처리할 때 성능 병목 현상을 발견하는 데 도움이 됩니다.
  4. 호환성 유지: 새로운 API 업데이트가 시스템을 손상시키지 않도록 보장합니다.
  5. 보안: 취약점을 감지하고 데이터 교환을 보호하는 데 도움이 됩니다.

API 통합 테스트 vs 단위 테스트

API 통합 테스트의 주요 단계

  1. 테스트 계획 개발: 테스트할 목표와 시나리오를 개괄적으로 설명합니다.
  2. 테스트 케이스 생성: 다양한 사용 사례를 다루는 여러 케이스를 구축합니다.
  3. 테스트 실행: 통합 테스트를 실행합니다.
  4. 문제 추적, 보고 및 해결: 테스트에서 문제를 식별하고 해결하며 진행 상황을 추적합니다.
  5. 재테스트: 수정 사항이 새로운 문제를 발생시키지 않고 기존 문제를 해결하는지 확인합니다.
  6. 반복: 버그가 없을 때까지 통합을 지속적으로 개선합니다.

Apidog를 사용한 API 통합 테스트

Apidog는 QA 엔지니어가 여러 API를 포함하는 실제 워크플로우를 시뮬레이션하는 복잡한 테스트 시나리오를 설계하고 실행할 수 있도록 함으로써 API 통합 테스트를 크게 간소화합니다.

예를 들어, 반려동물 목록 탐색, 장바구니에 항목 추가, 주문하기, 결제하기, 주문 상세 정보 조회 등 다양한 API가 상호 작용하는 반려동물 구매 프로세스에서 Apidog는 이러한 상호 연결된 테스트를 쉽게 설정할 수 있도록 합니다.

API 통합 테스트에 Apidog 사용

QA 엔지니어는 API 엔드포인트를 연결하고 그 사이에서 데이터를 전송하여 시나리오를 생성할 수 있습니다. 예를 들어, "주문 생성" 엔드포인트와 이후의 결제 및 주문 조회 엔드포인트 사이에 주문 ID를 전달하는 방식입니다. Apidog의 강력한 데이터 처리는 주문 ID를 변수로 저장하거나 이전 단계의 반환 값을 직접 참조하여 이를 허용하며, 테스트 프로세스를 간소화합니다.

API 간 데이터 전송

장바구니에 여러 반려동물을 추가하는 것과 같은 대량 작업과 같이 더 복잡한 작업의 경우, Apidog의 ForEach 루프는 배열에서 반려동물 ID를 각 API 요청에 자동으로 삽입하여 작업을 단순화합니다.

API 통합 테스트를 위한 Apidog ForEach 루프

테스트 시나리오가 생성 및 실행되면 Apidog는 상세한 테스트 보고서를 생성하여 QA 엔지니어가 문제를 신속하게 식별하고 수정하도록 돕고, 모든 API가 통합된 워크플로우 내에서 올바르게 작동하도록 보장합니다.

Apidog가 생성한 API 통합 보고서

Apidog의 통합 테스트 기능을 통해 개발자는 실제 사용자 동작을 효율적으로 시뮬레이션하고, 여러 엔드포인트를 함께 테스트하며, API 간의 원활한 데이터 교환을 보장할 수 있어 API 개발, 테스트 및 통합을 위한 최고의 플랫폼이 됩니다.

Apidog가 API 테스트를 어떻게 개선하고 QA 엔지니어의 테스트 효율성을 향상시키는지 알아보세요.

API 통합 테스트를 위한 모범 사례

  1. 모킹 라이브러리 사용: requests_mock와 같은 라이브러리를 사용하여 네트워크 상호 작용을 시뮬레이션합니다. 이는 테스트를 격리하고 실제 API 호출을 피하여 테스트 속도를 높입니다.
  2. 오류 처리: 시스템이 다양한 API 오류(예: 404, 500)에 어떻게 반응하는지 테스트하여 시스템이 중단되지 않도록 합니다.
  3. 경계값 테스트: 극단적인 값을 사용하여 시스템이 이를 어떻게 처리하는지 테스트합니다.
  4. 하위 호환성: API 변경 사항이 기존 기능을 손상시키지 않도록 보장합니다.
  5. 실제 데이터: 현실적인 시나리오(예: 실제 사용자 데이터, 정확한 가격)를 사용하여 시스템이 실제 환경에서 어떻게 작동할지 테스트합니다.
  6. 테스트 업데이트 유지: API가 발전함에 따라 테스트를 업데이트하여 정확성과 신뢰성을 유지합니다.

API 통합 테스트 예시

다음은 Python과 requests_mock 라이브러리를 사용하여 API 통합을 테스트하는 실제 예시입니다.

단계 1: 필수 라이브러리 설치

pip install requests requests_mock

단계 2: API 통합 코드 예시

이 예시는 두 개의 공개 API를 통합하는 방법을 보여줍니다. 하나는 통화 변환용이고, 다른 하나는 우편 번호에 기반한 제품 가용성 확인용입니다.

import requests

def get_converted_price(product_price: int, conversion_currency: str) -> float:
    converted_price = None
    base_currency = "usd"
    api_url = f"https://cdn.jsdelivr.net/gh/fawazahmed0/currency-api@1/latest/currencies/{base_currency}/{conversion_currency.lower()}.json"

    try:
        resp = requests.get(api_url)
        if resp.ok:
            currency_data = resp.json()
            converted_price = product_price * currency_data[conversion_currency]
            print(f"Converted price: {round(converted_price, 2)} {conversion_currency.upper()}")
        else:
            print(f"Error: {resp.text}")
    except Exception as ex:
        print(f"Exception: {ex}")
    finally:
        return converted_price

def get_product_availability(zipcode: int) -> bool:
    availability = None
    api_url = f"https://api.zippopotam.us/us/{zipcode}"

    try:
        resp = requests.get(api_url)
        if resp.ok:
            zip_data = resp.json()
            state = zip_data["places"][0]["state"]
            availability = False if state in ["Texas", "California"] else True
            print(f"Availability in {state}: {availability}")
        else:
            print(f"Error: {resp.text}")
    except Exception as ex:
        print(f"Exception: {ex}")
    finally:
        return availability

단계 3: API 통합 테스트

unittestrequests_mock를 사용하여 통합을 검증하기 위한 단위 테스트를 생성할 수 있습니다.

import unittest
import requests_mock
from api_integration import get_converted_price, get_product_availability

class TestAPIIntegrations(unittest.TestCase):

    def test_get_converted_price(self):
        test_data = {"usd": 82.6}
        expected_price = 8260
        with requests_mock.Mocker() as mock:
            mock.get("https://cdn.jsdelivr.net/gh/fawazahmed0/currency-api@1/latest/currencies/usd/inr.json", json=test_data)
            calculated_price = get_converted_price(100, "inr")
            self.assertEqual(calculated_price, expected_price)

    def test_get_converted_price_failure(self):
        with requests_mock.Mocker() as mock:
            mock.get("https://cdn.jsdelivr.net/gh/fawazahmed0/currency-api@1/latest/currencies/usd/inr.json", status_code=404)
            calculated_price = get_converted_price(100, "inr")
            self.assertIsNone(calculated_price)

    def test_get_product_availability_true(self):
        test_data = {"places": [{"state": "California"}]}
        with requests_mock.Mocker() as mock:
            mock.get("https://api.zippopotam.us/us/90210", json=test_data)
            availability = get_product_availability(90210)
            self.assertTrue(availability)

    def test_get_product_availability_false(self):
        test_data = {"places": [{"state": "Texas"}]}
        with requests_mock.Mocker() as mock:
            mock.get("https://api.zippopotam.us/us/75001", json=test_data)
            availability = get_product_availability(75001)
            self.assertFalse(availability)

    def test_get_product_availability_failure(self):
        with requests_mock.Mocker() as mock:
            mock.get("https://api.zippopotam.us/us/75001", status_code=500)
            availability = get_product_availability(75001)
            self.assertIsNone(availability)

if __name__ == '__main__':
    unittest.main(verbosity=2)

단계 4: API 통합 테스트 실행

테스트를 실행하려면 터미널에서 다음 명령을 사용하세요:

python api_integration_tests.py

이렇게 하면 모든 테스트가 실행되고 각 테스트에 대한 상세한 출력이 표시됩니다. 여기에는 모의 API 응답이 올바르게 처리되었는지, 예상 결과가 충족되었는지 여부가 포함됩니다.

마무리 생각

API 통합 테스트는 API가 의도한 대로 함께 작동하는지 보장합니다. 모킹 라이브러리와 포괄적인 테스트 케이스를 사용하면 시스템의 통합 동작을 효율적으로 검증할 수 있습니다. API가 발전함에 따라 테스트가 항상 업데이트되도록 하고, 지속적 통합을 위한 자동화된 테스트 구현을 고려하세요.

통합 프로세스를 더욱 자동화하려는 경우, Apidog와 같은 도구는 통합을 신속하게 확장하고 테스트할 수 있는 통합 API를 제공합니다.

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

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