Postman을 활용한 API 테스트 가이드

H4N2·2024년 12월 13일
15
post-thumbnail

API(Application Programming Interface)는 애플리케이션 간의 통신을 가능하게 해주는 중요한 요소이다. QA 엔지니어로서 API 테스트는 시스템의 안정성과 신뢰성을 확인하기 위한 핵심 업무 중 하나이다. Postman은 이러한 API 테스트를 손쉽게 수행할 수 있는 도구로, 다양한 기능을 제공한다. 이번 포스팅에서는 실무에서 Postman을 활용하여 API 테스트를 수행하는 방법과 직접 경험했던 몇 가지 사례를 소개해 보겠다.


Postman의 주요 기능

  1. 요청 생성
    GET, POST, PUT, DELETE 등 다양한 HTTP 메서드 요청을 생성 가능

  2. 환경 변수 관리
    개발, 스테이징, 프로덕션 환경을 쉽게 전환하며 테스트 가능

  3. 테스트 스크립트 작성
    JavaScript 기반의 테스트 스크립트를 통해 자동화 가능

  4. 컬렉션 관리
    여러 요청을 그룹화하여 관리 및 공유 가능

  5. 성능 테스트
    응답 시간 측정 및 부하 테스트 가능


Postman의 주요 객체 및 메서드 소개

pm 객체

  • pm은 Postman Sandbox에서 제공하는 전역 객체로, 요청 및 응답 데이터를 다루고 테스트 스크립트를 실행할 수 있다.

  • 주요 기능

    • pm.test: 테스트 케이스 정의

    • pm.expect: 테스트 조건 작성

    • pm.response: API 응답 데이터 접근

pm.response

  • pm.response는 응답 데이터와 관련된 정보를 제공한다.

    • pm.response.json(): JSON 형식의 응답 데이터를 반환

    • pm.response.to.have.status: 응답 상태 코드를 검증

pm.expect

  • pm.expect는 테스트 조건을 작성하는 데 사용된다. Chai.js 라이브러리를 기반으로 동작하며, 다양한 assertion을 제공한다.

    • 예: pm.expect(pm.response.responseTime).to.be.below(200);

실무에서의 API 테스트 사례

1. 로그인 및 인증 테스트

목적

  • 로그인 API가 올바르게 동작하고, 인증 토큰이 정상적으로 반환되는지 확인

예제)

  • 요청
POST /auth/login
{
    "username": "test_user",
    "password": "passwd123!"
}
  • 테스트 스크립트
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

pm.test("Response contains token", function () {
    const jsonData = pm.response.json();
    pm.expect(jsonData).to.have.property('token');
    pm.expect(jsonData.token).to.be.a('string');
});
  • 검증 사항

    • 상태 코드가 200인지 확인

    • 응답에 token 필드가 포함되어 있는지 확인


2. CRUD 테스트

CRUD(Create, Read, Update, Delete) API는 리소스를 관리하기 위한 기본적인 작업이다.
Postman을 활용하여 각 단계별로 테스트를 진행한다.

리소스 생성 (POST)

요청

POST /api/items
{
    "name": "New Item",
    "description": "Item description"
}

테스트 스크립트

pm.test("Status code is 201", function () {
    pm.response.to.have.status(201);
});

pm.test("Response contains item ID", function () {
    const jsonData = pm.response.json();
    pm.expect(jsonData).to.have.property('id');
});

리소스 조회 (GET)

요청

GET /api/items/1

테스트 스크립트

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

pm.test("Response contains correct item details", function () {
    const jsonData = pm.response.json();
    pm.expect(jsonData.name).to.eql("New Item");
});

리소스 수정 (PUT)

요청

PUT /api/items/1
{
    "name": "Updated Item"
}

테스트 스크립트

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

pm.test("Response reflects updated item details", function () {
    const jsonData = pm.response.json();
    pm.expect(jsonData.name).to.eql("Updated Item");
});

리소스 삭제 (DELETE)

요청

DELETE /api/items/1

테스트 스크립트

pm.test("Status code is 204", function () {
    pm.response.to.have.status(204);
});

3. 경계값 및 오류 테스트

목적

API가 비정상적인 입력 값에 대해 올바르게 처리하고, 적절한 오류 메시지를 반환하는지 확인

경계값 테스트

요청

POST /api/users
{
    "username": "a-very-long-username-that-exceeds-the-limit"
}

테스트 스크립트

pm.test("Response rejects too long input", function () {
    pm.response.to.have.status(400);
    const jsonData = pm.response.json();
    pm.expect(jsonData.message).to.include("exceeds maximum length");
});

잘못된 요청 테스트
요청

POST /api/users
{
    "username": ""
}

테스트 스크립트

pm.test("Missing fields return 400", function () {
    pm.response.to.have.status(400);
});

📌 잘못된 요청 테스트의 목적
위의 경우, 빈 문자열이 유효한 값으로 처리되지 않는다는 것을 확인하기 위한 테스트이다.
서버는 사용자 이름이 반드시 존재해야 한다는 요구사항을 충족하지 못했기 때문에 오류 메시지와 함께 400 Bad Request 응답을 반환해야 하는 것이다.


4. 성능 및 부하 테스트

목적

API의 응답 시간이 SLA(Service Level Agreement)를 충족하는지 확인

성능 테스트

테스트 스크립트

pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

부하 테스트

Postman의 Collection Runner 또는 Newman을 사용하여 다수의 요청을 빠르게 실행하고 API의 처리 능력을 검증


결론

Postman은 강력한 API 테스트 도구로, QA 엔지니어가 다양한 테스트를 쉽게 수행할 수 있도록 도와준다. 실무 사례를 구체적으로 들 수는 없지만 오늘 포스팅한 내용들이 주로 실무에서 사용되는 Postman의 기능인 것 같다. API의 신뢰성을 높이고 테스트를 자동화함으로써 더 효율적인 QA 업무를 수행해 보도록 하자 :)

profile
Quality Assurance !

2개의 댓글

comment-user-thumbnail
2024년 12월 13일

오 저도 안그래도 postman을 사용해서 api 자동화를 이루고 싶었는데 실무에서도 손쉽게 적용 할 수 있을까요?

답글 달기
comment-user-thumbnail
2024년 12월 16일

postman을 사용한 경험은 있지만 자동화를 적용한 경험은 없는데 postman 자동화에 대해 알아봐야겠네요~

답글 달기