API 테스트 도구 활용 실전 가이드

네트워크 패킷 분석 도구

도구 개요

  • 브라우저 개발자 도구: 크롬/파이어폭스 내장 기능으로 사용이 간편함
  • Fiddler/Charles: 프록시 기반의 고급 기능 제공, 모바일 패킷 캡처, 네트워크 시뮬레이션, 요청 차단, 응답 조작 가능
    • Fiddler: 무료 제공, 윈도우 전용
    • Charles: 유료 제품, 윈도우/리눅스/맥 지원
  • wireshark/tcpdump: 네트워크 인터페이스 레벨 패킷 캡처, 다양한 프로토콜(tcp/udp 등) 데이터 수집 (필터링 필요)
    • wireshark: 윈도우/리눅스/맥 지원
    • tcpdump: 리눅스 명령어 도구, 서버측 패킷 분석에 주로 사용

프록시 개념 이해

  • 포워드 프록시: 클라이언트와 동일 네트워크에 위치, 서버 입장에서는 투명하게 작동
  • 리버스 프록시: 서버와 동일 네트워크에 위치, 클라이언트 입장에서는 투명하게 작동

예시: 구글 접속을 위한 프록시 사용은 포워드 프록시, Nginx를 통한 여러 도메인 요청 처리는 리버스 프록시

  • 리버스 프록시는 로드 밸런싱 기능 제공
  • 리버스 프록시 기반 API 테스트 시 로컬 hosts 파일 설정 필수

수동 프록시 설정 방법

  1. 프록시 서버 시작 (예: Postman 프록시 서비스 - 로컬 IP, 포트 5555)
  2. 윈도우 설정 → 프록시 → 프록시 IP 및 도메인 구성

모바일 프록시 설정 (모바일 패킷 캡처)

  1. 노트북과 스마트폰 동일 Wi-Fi 사용
  2. 노트북에서 프록시 서버 시작 (예: Postman 프록시 - 로컬 IP, 포트 5555)
  3. 스마트폰 Wi-Fi 길게 누르기 → 네트워크 관리 또는 고급 설정 → 수동 프록시 구성 → 프록시 IP 및 도메인 입력

hosts 파일 설정 (리버스 프록시용)

  • 윈도우: notepad C:\Windows\System32\drivers\etc\hosts
  • 리눅스: vim /etc/hosts (형식: IP 도메인)

크롬 개발자 도구 활용

  • Elements: HTML 요소 검사 및 소스코드 확인
  • Console: 자바스크립트 콘솔, 프론트엔드 로그 확인
  • Sources: 자바스크립트 디버깅 리소스
  • Network: 요청 및 응답 정보 확인
  • Timeline: 웹사이트 생명주기 이벤트 기록
  • Profiles: 이벤트 상세 정보
  • Application: 로컬 스토리지, 세션 스토리지 등 리소스
  • Security: 웹페이지 보안 상태 확인
  • Audits: 네트워크 성능 진단

Network 패널 기능

  1. 콘솔 제어:
    • 녹화: 요청 기록 시작/중지
    • 초기화: 모든 요청 삭제
    • 스냅샷 캡처: 프레임 단위 화면 이벤트 캡처
    • 필터: 필터 기능 활성화/비활성화
    • 검색: 요청 검색
    • 프레임별 그룹화
    • 로그 유지: 페이지 리로드 시 요청 유지
    • 캐시 비활성화
    • 오프라인: 네트워크 단절 및 약한 네트워크 시뮬레이션
  2. 필터: 요청 필터링
  3. 개요: 리소스 타임라인
  4. 요청 테이블:
    • Name: 리소스 이름
    • Status: HTTP 상태 코드
    • Initiator: 요청 출처
    • Size: 서버 다운로드 파일 및 리소스 크기. 캐시 사용 시 (from cache) 표시
    • Timeline: 모든 네트워크 요청 시간 상태 축
  5. 요약: 요청 총수, 데이터 전송량, 로딩 시간 정보
    • DOMContentLoaded: DOM 완전 로드 및 파싱 완료
    • load: 모든 DOM, CSS, JS, 이미지 로드 완료

요청 내보내기: 요청 우클릭 → 복사 → fetch 형식 또는 cUrl 형식으로 복사

Fiddler 활용법

Fiddler 사용 이유

  • 요청 데이터 캡처, Raw/폼/JSON/XML 형식 확인 가능
  • 요청 가로채기 및 수정 기능
  • 강력한 필터링 기능
  • Postman/API 스크립트 요청 캡처로 디버깅 용이
  • 모바일 요청 패킷 캡처 가능

주요 인터페이스 구성

  • Inspectors: 검사 도구
    • Raw: 요청 원본 형식
    • WebForm: 폼 형식 요청
    • Json: JSON 형식 요청
    • XML: XML 형식 요청
  • AutoResponder: 자동 응답, 응답 생성, Mock 테스트, 서버 파일 수정 없이 인터페이스 디버깅
  • Composer: 요청 생성 및 디버깅 도구
  • FiddlerScript: 스크립트 기능
  • Filters: 필터 기능
    • Hosts: 서버 기준 필터링
    • Clients Process: 클라이언트 프로그램 기준 필터링
    • Request Headers: 요청 헤더 기준 필터링
    • Breakpoints: 중단점 설정
    • Response Status Code: 상태 코드 기준 필터링
    • Response Type and Size: 응답 타입 및 크기 기준 필터링
    • Response Headers: 응답 헤더 기준 필터링

자동 중단점 설정

메뉴 Rules → Automatic Breakpoints → Before Requests/After Requests

모바일 패킷 캡처

Fiddler 설치 노트북과 스마트폰 동일 Wi-Fi 사용 → 스마트폰 Wi-Fi 길게 누르기, 고급 설정 → 프록시 추가 (IP: 노트북 IP, 포트: 8888) → 노트북에서 Fiddler 실행, 스마트폰 웹접속

서버측 패킷 분석 - tcpdump

Postman 활용

대표적 API 테스트 도구

  • Postman: 직관적인 인터페이스 디버깅 도구, 공유 및 협업 편리. 인터페이스 디버깅, 인터페이스 집합 관리, 환경 설정, 파라미터화, 어설션, 일괄 실행, 인터페이스 녹화, Mock 서버, 인터페이스 문서, 인터페이스 모니터링 기능 제공
  • JMeter: 오픈소스 인터페이스 테스트 및 부하 테스트 도구, 리눅스 및 GUI 없는 환경 지원
  • LR: 상용 인터페이스 성능 테스트 도구, 사용 쉬움, 기능 강력
  • SoupUI: 오픈소스, WebService 인터페이스 전용 테스트 도구, Rest 인터페이스 및 인터페이스 보안 테스트 가능

Postman 인터페이스 구성

툴바 기능

  • New: 새로 만들기, 요청, 컬렉션, 환경 등 생성 가능
  • Import: 가져오기, 다른 사용자의 요청 집합 가져올 수 있음
  • Runner: 요청 집합 실행 (일괄 처리)
  • Invite: 초대 기능 (회원가입 필요, 협업 목적)
  • 동기화 아이콘: (회원가입 필요, 프로젝트 클라우드 동기화)
  • 패킷 캡처 아이콘: 패킷/요청 캡처, Postman 프록시 시작, 수동 프록시(또는 모바일 프록시) 설정 후 패킷 캡처/요청 녹화 가능
  • 설정 아이콘: Postman 설정
  • 메시지 아이콘: 공식 및 협업 관련 메시지
  • 즐겨찾기 아이콘: 즐겨찾기 (회원가입 필요)
  • 클라우드 아이콘: 사용자 클라우드 데이터 (회원가입 필요)

인터페이스 관리 영역

  • History: 요청 이력, 이전 요청 기록 조회 가능
  • Collections: 인터페이스 집합, 인터페이스 프로젝트 또는 테스트 계획에 해당, 무제한 하위 폴더 생성으로 인터페이스 그룹 관리 가능

환경 관리 영역

  • 환경 전환: 테스트 환경 변경
  • 환경 미리보기: 환경 내 모든 변수 빠른 확인
  • 환경 관리: 환경 및 환경 변수 추가/수정, 전역 변수 관리

환경(Environment) 개념

인터페이스 전체 주소 = 서버 주소 + 인터페이스 주소, 예:

www.sojson.com + /open/api/weather/json.shtml

환경은 여러 환경 변수를 포함하는 설정 집합. 인터페이스 테스트 시 서로 다른 서버에 배포된 경우 서버 주소가 달라질 수 있으나 동일 인터페이스의 주소는 동일. 서로 다른 서버에 배포된 동일 인터페이스 테스트를 위해 서로 다른 환경을 생성하고 각 환경의 host 변수에 다른 주소 사용

인터페이스 설계 영역

상단 탭 옆 + 버튼으로 여러 요청 생성 가능. 위에서 아래로 요청 영역과 응답 영역으로 구성

  • 요청 영역
    • 요청 주소 행: 요청 메서드(GET/POST/...) 선택, 요청 주소 입력, 요청 전송 및 테스트 집합에 저장
    • 요청 데이터 영역: 인증, 요청 헤더, 요청 데이터, 요청 전 실행 스크립트(데이터 준비용), 요청 후 실행 스크립트(어설션용)
  • 응답 영역:
    • 응답 내용: Pretty(포맷팅), Raw(원본), Preview(HTML 미리보기) 형식 확인
    • 응답 쿠키
    • 응답 헤더
    • 테스트 결과, 요청의 Tests 섹션에서 설정한 어설션 대응

Collection(요청 집합)

테스트 집합은 Postman의 인터페이스 관리 "전체" 단위, 실행, 내보내기, 공유 모두 테스트 집합 기반.

  • 테스트 집합 생성: New 버튼 → Collection 또는 테스트 집합 목록 상단 새 테스트 집합 버튼 직접 클릭
    • 인증: 테스트 집합 및 하위 폴더 인터페이스 통합 인증, 각 인터페이스별 개별 설정 불필요
    • 요청 전 스크립트: 테스트 집합 모든 인터페이스 공통 요청 전 스크립트
    • 요청 후 어설션: 테스트 집합 모든 인터페이스 공통 요청 후 스크립트
    • 요청 집합 변수: 요청 집합 공통 변수
  • 하위 폴더 하위 폴더 속성에도 설명, 인증, 요청 전 스크립트, 요청 후 어설션 포함 (변수 제외, 요청 집합 변수 통합 관리), 서로 다른 범위(Scope) Fixture 기능 구현.
  • 요청 집합 내보내기: 요청 집합 내보내기 및 타인에게 전달 가능 (환경 정보 미포함), 타인이 가져오기를 통해 인터페이스 사용
  • 요청 집합 공유: 요청 집합 직접 타인에게 공유 (양측 회원가입 필요)

환경 관리

환경에서 여러 변수 설정 가능, 요청에서 사용

환경 변수 사용 방법:

  1. 환경 선택
  2. 요청 URL 또는 요청 Body에서 {{변수명}} 형태로 환경 변수 사용
  3. 변수는 요청 Body의 다양한 형식에서 사용 가능
  4. 요청 전 스크립트(Pre-request Script)와 요청 후 스크립트(Tests)에서는 직접 사용 불가

환경 관리에서 "Global" 클릭하여 전역 변수 추가 가능. 환경 변수는 해당 환경 선택 시에만 유효, 전역 변수는 모든 환경에서 유효, 테스트 집합 변수는 현재 테스트 집합에서만 유효. 테스트 집합 변수, 환경 변수, 전역 변수에 중복 변수명 존재 시 우선순위: 환경 변수 > 전역 변수 > 테스트 집합 변수

Params 기능

요청 URL에 파라미터가 많을 때 추가 및 확인 불편, URL 입력창 후 Params 버튼 클릭하여 표 형식으로 변수 및 값 추가 가능, 표에서 추가 후 변수와 값이 자동으로 URL에 추가됨

요청 설계

  • 인증: 인터페이스 인증 필요 시 해당 페이지에서 인증 방식(type) 및 인증 정보 설정
  • Header: 요청 헤더, 요청 타입(Content-Type) 및 쿠키 설정
  • Body: 요청 데이터
    • form-data: 혼합 폼, 파일 업로드 지원
    • x-www-form-urlencoded: 텍스트 폼
    • raw: 원본 형식, JSON/XML 형식 지원 (뒤에서 선택 가능)
    • binary: 바이너리 형식, 바이너리 데이터 스트림 전송용
  • Pre-request Script: 요청 전 스크립트, 자바스크립트 문법, 요청 전 동적 데이터 생성 또는 처리용
  • Tests: 요청 후 스크립트, 자바스크립트 문법, 요청 반환 후 처리 또는 결과 어설션용

다양한 형식 요청 전송 방법:

주의: 서로 다른 요청 선택 시 Header에 Content-Type 정보 자동 추가

Tests 어설션

  • HTTP 상태 코드 어설션:
pm.test("HTTP 상태 코드 200", function () {
    pm.response.to.have.status(200);
});
  • 응답 내용 포함 여부 어설션:
pm.test("로그인 성공 메시지 포함", function () {
    pm.expect(pm.response.text()).to.include("로그인 성공");
});

인터페이스 예시:
POST https://demo.fastadmin.net/admin/index/login.html
사용자명/비밀번호: admin/123456

  • JSON 응답 어설션:
pm.test("JSON 응답 검증", function () {
    const responseJson = pm.response.json();
    pm.expect(responseJson.code).to.eql(200);
    pm.expect(responseJson.msg).to.eql("success");
});

인터페이스 예시:
GET http://www.tuling123.com/openapi/api?key=ec961279f453459b9248f0aeb6600bbe&info=안녕하세요

Runner: 테스트 집합 일괄 실행

  • 반복 횟수 설정 지원
  • CSV 또는 JSON 형식 테스트 데이터 로드 지원

사용 방법:
https://demo.fastadmin.net/admin/index/login.html 인터페이스 예시

  1. Demo2라는 새로운 Collection 생성
  2. URL 입력: https://demoadmin.net/admin/index/login.html, POST 메서드 선택
  3. 요청 데이터(Body) 형식 x-www-form-urlencoded 선택, username {{username}} password {{password}} 입력, 두 변수를 파라미터화에 사용
  4. 요청을 Demo2에 저장
  5. 컴퓨터에 data.csv 파일 생성, 첫 행에 변수명, 아래에 데이터 입력
  6. Postman 툴바 Runner 버튼 클릭, Collection Demo2 선택, Data에서 data.csv 파일 선택, Demo2 실행

태그: Postman Fiddler API Testing Chrome DevTools tcpdump

6월 4일 02:32에 게시됨