홈으로 돌아가기

API 테스트: 체크리스트 및 자동테스트

이 기사는 API 테스트에 대한 체계적인 접근 방식을 설명합니다: 확인 카테고리, Postman 및 Jest+axios 예제, 체크리스트, 케이스 생성에서 AI의 역할. 중급/시니어 QA 및 개발자에게 적합.

API 테스트: Postman부터 AI 케이스 생성까지
Advertisement 728x90

API 테스트 체크리스트: 상태 코드부터 AI 자동화까지

API 테스트는 체계적인 접근이 필수입니다. 상태 코드, 응답 구조, 극한 상황, 인증 검증을 포함해야 합니다. Postman은 수동 테스트에 최적화되어 있으며, Jest + axios는 CI/CD 파이프라인과 자연스럽게 통합됩니다. AI 기술은 OpenAPI 사양에서 테스트 케이스를 자동 생성하고 응답을 분석하며, 극단적 데이터 패턴을 탐지하는 데 강력한 도움을 줍니다.

상태 코드

응답 코드가 예상된 시나리오와 일치하는지 확인하세요:

| 시나리오 | 예상 코드 |

Google AdInline article slot

|----------|-----------|

| 성공적인 생성 | 201 |

| 리소스 없음 | 404 |

Google AdInline article slot

| 권한 부족 | 403 |

| 인증되지 않음 | 401 |

| 유효하지 않은 데이터 | 400/422 |

Google AdInline article slot

| 서버 오류 | 500 |

흔한 실수: 본문에 오류 메시지를 담고 있으면서도 200 코드를 반환하는 것—이는 REST 원칙을 위반합니다.

응답 구조

  • 필수 필드가 존재해야 합니다.
  • 데이터 타입이 예상과 일치해야 합니다 (예: 숫자가 문자열로 전달되는 경우).
  • 중첩 객체는 null이 되면 안 됩니다.
  • 배열과 객체를 혼동하지 않도록 주의합니다.

극한 상황 테스트

경계 조건을 테스트하세요:

  • 비어 있는 요청 본문.
  • 필수 필드 누락.
  • 필드에 빈 문자열.
  • 숫자: 0, 음수값, MAX_INT.
  • 문자열: 1자, 최대 길이, 특수문자, SQL/XSS 공격 패킷.

인증 및 헤더

  • 토큰 없음 → 401.
  • 만료된 토큰 → 401.
  • 잘못된 토큰 → 403.
  • 쓰기 작업 시 읽기 전용 사용자 → 403.

헤더: Content-Type, CORS, 요청 제한(레이트 리미팅).

Postman으로 테스트하기

응답 후 Tests 탭에서 자바스크립트 스크립트를 사용할 수 있습니다.

기본 검증

// 상태 코드 및 응답 시간
pm.test("Status 200", () => {
    pm.response.to.have.status(200);
});

pm.test("Response <500ms", () => {
    pm.expect(pm.response.responseTime).to.be.below(500);
});

// Content-Type
pm.test("JSON", () => {
    pm.response.to.have.header("Content-Type", "application/json; charset=utf-8");
});

구조 및 타입 검사

const response = pm.response.json();

pm.test("id 존재 여부", () => {
    pm.expect(response).to.have.property("id");
});

pm.test("id는 숫자", () => {
    pm.expect(response.id).to.be.a("number");
});

pm.test("email 비어 있지 않음", () => {
    pm.expect(response.email).to.be.a("string").and.not.empty;
});

음성 테스트: 토큰 없음

pm.test("401 토큰 없음", () => {
    pm.response.to.have.status(401);
});

const response = pm.response.json();
pm.expect(response).to.have.property("message");

/login에서 받은 토큰을 환경 변수에 저장하세요: pm.environment.set("auth_token", response.token);. 이후 헤더에서 {{auth_token}}로 참조 가능합니다.

Jest + axios를 활용한 자동화 테스트

CI/CD 파이프라인에서는 코드로 테스트를 작성하세요. /users/:id 엔드포인트 예시:

const axios = require("axios");

const BASE_URL = "https://api.example.com";
const TOKEN = process.env.API_TOKEN;

const client = axios.create({
    baseURL: BASE_URL,
    headers: { Authorization: `Bearer ${TOKEN}` }
});

describe("GET /users/:id", () => {

    test("ID로 사용자 조회", async () => {
        const response = await client.get("/users/1");

        expect(response.status).toBe(200);
        expect(response.data).toMatchObject({
            id: expect.any(Number),
            email: expect.any(String),
            name: expect.any(String),
        });
    });

    test("존재하지 않는 사용자 → 404", async () => {
        await expect(client.get("/users/999999"))
            .rejects.toMatchObject({
                response: { status: 404 }
            });
    });

    test("토큰 없이 접근 → 401", async () => {
        await expect(axios.get(`${BASE_URL}/users/1`))
            .rejects.toMatchObject({
                response: { status: 401 }
            });
    });

});

실행 명령어: npx jest user.test.js.

포괄적 체크리스트

긍정 시나리오:

  • 유효한 데이터 → 올바른 상태 코드.
  • 응답 구조가 문서와 일치.
  • 필수 필드 존재.
  • 정확한 데이터 타입.
  • 응답 시간 제한 내.

부정 시나리오:

  • 인증 없음 → 401.
  • 잘못된 토큰 → 403.
  • 필드 누락 → 400/422.
  • 타입 오류 → 400/422.
  • 존재하지 않는 리소스 → 404.
  • 비어 있는 본문 → 검증 오류.

극한 상황:

  • 최소/최대 값.
  • 0 또는 음수 숫자.
  • 빈 문자열.
  • 특수문자/유니코드.
  • 긴 문자열.

보안:

  • SQL 인젝션.
  • XSS.
  • IDOR (ID 추측 공격).

AI 기반 자동화

AI는 OpenAPI 사양에서 긍정, 부정, 극한 상황 테스트 케이스를 자동 생성하고, Jest 형식으로 제공합니다.

프롬프트 예시: "[schema] 기반으로 POST /users에 대한 테스트를 생성해 주세요. 현실적인 데이터를 사용하세요."

LLM을 활용한 응답 자동 분석:

async function validateWithAI(prompt, response) {
    // Claude/GPT 호출하여 관련성 평가
    // ...
    return data.content[0].text.trim() === "YES";
}

극한 데이터 생성: AI는 RTL 텍스트, 이모티콘, 보이지 않는 유니코드 문자를 제안합니다.

AI는 비즈니스 로직 이해를 대체하지 않습니다 (예: 비프리미엄 사용자에게 할인율 ≤ 100).

가장 중요한 점

  • 각 시나리오에 맞춰 상태 코드를 엄격히 검증하세요. 오류 시 200 코드를 사용하지 마세요.
  • JSONPath 유사 문법을 활용해 응답 구조와 타입을 검증하세요.
  • CI/CD에서 Jest/axios로 부정 및 극한 상황 테스트를 자동화하세요.
  • AI를 반복 작업(테스트 생성, 분석, 극한 데이터)에 활용하세요.
  • 모든 엔드포인트에 이 체크리스트를 의무적으로 적용하세요.

— Editorial Team

Advertisement 728x90

다음 읽기