Postman으로 API 테스트 자동화


Postman은 API 개발과 테스트를 위한 필수 도구입니다. 단순 요청 테스트부터 자동화된 테스트 스크립트, CI/CD 통합까지 다양한 기능을 제공합니다.



언제 사용하나요?



  • REST API 개발 및 디버깅

  • API 문서화와 팀 공유

  • 자동화된 API 테스트

  • CI/CD 파이프라인 통합



기본 요청 보내기


// GET 요청
GET https://api.example.com/users

// POST 요청 (Body - raw JSON)
POST https://api.example.com/users
Content-Type: application/json

{
"name": "홍길동",
"email": "hong@example.com"
}

// 헤더 추가
Authorization: Bearer {{token}}
Content-Type: application/json


환경 변수 활용


// 환경 설정 (Development, Production)
{
"base_url": "https://dev-api.example.com",
"api_key": "dev-key-12345"
}

// 변수 사용
GET {{base_url}}/users
Authorization: Bearer {{api_key}}

// 동적 변수
{{$randomInt}} // 랜덤 정수
{{$timestamp}} // 현재 타임스탬프
{{$guid}} // UUID


Pre-request Script


// 요청 전 실행되는 스크립트

// 타임스탬프 생성
pm.environment.set("timestamp", Date.now());

// 서명 생성 (HMAC)
const crypto = require("crypto-js");
const secret = pm.environment.get("secret_key");
const message = pm.request.method + pm.request.url;
const signature = crypto.HmacSHA256(message, secret).toString();
pm.environment.set("signature", signature);

// 토큰 갱신
if (!pm.environment.get("token") || tokenExpired()) {
pm.sendRequest({
url: pm.environment.get("base_url") + "/auth/token",
method: "POST",
body: { mode: "raw", raw: JSON.stringify({...}) }
}, (err, res) => {
pm.environment.set("token", res.json().access_token);
});
}


테스트 스크립트


// 상태 코드 검증
pm.test("상태 코드 200", function() {
pm.response.to.have.status(200);
});

// 응답 시간 검증
pm.test("응답 시간 500ms 이하", function() {
pm.expect(pm.response.responseTime).to.be.below(500);
});

// JSON 구조 검증
pm.test("사용자 목록 반환", function() {
const json = pm.response.json();
pm.expect(json).to.be.an("array");
pm.expect(json.length).to.be.above(0);
pm.expect(json[0]).to.have.property("id");
pm.expect(json[0]).to.have.property("name");
});

// 특정 값 검증
pm.test("특정 사용자 포함", function() {
const json = pm.response.json();
const user = json.find(u => u.email === "test@test.com");
pm.expect(user).to.not.be.undefined;
});

// 스키마 검증
const schema = {
type: "object",
required: ["id", "name", "email"],
properties: {
id: { type: "number" },
name: { type: "string" },
email: { type: "string", format: "email" }
}
};
pm.test("스키마 일치", function() {
pm.response.to.have.jsonSchema(schema);
});

// 환경 변수에 저장
const json = pm.response.json();
pm.environment.set("userId", json.id);


Collection Runner


// 컬렉션 전체 실행
// 1. 순차 실행
// 2. 반복 실행 (iterations)
// 3. 데이터 파일 연동 (CSV/JSON)

// data.json
[
{ "name": "사용자1", "email": "user1@test.com" },
{ "name": "사용자2", "email": "user2@test.com" }
]

// 테스트에서 데이터 사용
pm.request.body = {
mode: "raw",
raw: JSON.stringify({
name: pm.iterationData.get("name"),
email: pm.iterationData.get("email")
})
};


Newman CLI (CI/CD 통합)


# 설치
npm install -g newman

# 컬렉션 실행
newman run collection.json

# 환경 파일과 함께
newman run collection.json -e environment.json

# 리포트 생성
newman run collection.json -r html,cli

# Jenkins/GitHub Actions에서
newman run collection.json
--environment prod.json
--reporters cli,junit
--reporter-junit-export results.xml


Mock Server


// Mock 응답 설정
// 1. Collection > Mock 생성
// 2. 요청별 Example 정의

// Example 응답
{
"id": 1,
"name": "테스트 사용자",
"status": "active"
}

// Mock URL
GET https://mock-server-id.mock.pstmn.io/users/1


유용한 팁



  • Ctrl+Enter: 요청 전송

  • Workspace로 팀 협업

  • Fork로 컬렉션 버전 관리

  • API 문서 자동 생성

  • 모니터링으로 정기 테스트