Python API 테스트 완전 가이드|pytest×requests로 CRUD 테스트부터 HTML 리포트・CSV 출력까지

테스트 자동화

Python으로 API 테스트를 시작하고 싶은 엔지니어를 위해. pytest・requests를 사용한 CRUD 조작의 API 테스트부터 HTML 리포트・CSV 출력까지, 이 시리즈 하나로 전부 배울 수 있습니다.

이 글에서는 API 테스트 완전 시리즈의 전체 기사를 정리해서 소개합니다. 초보자부터 실무 엔지니어까지 스텝 바이 스텝으로 배울 수 있는 구성입니다.

결론

Python으로 API 테스트를 자동화한다면 pytest + requests 조합이 가장 심플하고 실무에서도 사용됩니다.

이 시리즈에서는 다음 내용을 전 7기사로 체계적으로 배울 수 있는 구성으로 되어 있습니다.

  • API 테스트의 기초 지식
  • CRUD 조작(GET・POST・PUT/PATCH・DELETE)의 구현
  • 헤더・스키마 검증 등 실무 패턴
  • HTML 리포트(pytest-html)에 의한 결과 시각화
  • CSV 에비던스에 의한 테스트 결과 기록과 공유

📌 이 글은 이런 분께 추천합니다

  • Python으로 API 테스트를 처음부터 배우고 싶은 분
  • pytest・requests의 사용법을 정리해서 확인하고 싶은 분
  • CRUD 전 조작의 API 테스트를 포트폴리오에 추가하고 싶은 분
  • UI 테스트뿐만 아니라 API 테스트도 할 수 있는 엔지니어가 되고 싶은 분

이 시리즈에서 배울 수 있는 것

  • API 테스트란 무엇인가・왜 중요한가의 기초 지식
  • pytest・requests에 의한 GET・POST・PUT/PATCH・DELETE 전체 테스트 구현
  • raise_for_status()・헤더 검증・스키마 검증 등 실무 패턴
  • HTML 리포트・CSV 출력에 의한 테스트 결과 시각화와 공유

👨‍💻 필자 소개

QA 엔지니어로서 실무에서 Python・pytest・requests를 사용한 API 테스트 자동화를 담당하고 있습니다. 본 시리즈에서 사용하는 코드는 모두 GitHub에 공개되어 있으며, 실제로 동작 확인이 완료된 코드를 그대로 해설하고 있습니다. GitHub에서 코드 보기 →


00. 이 API 테스트 시리즈에 대해

이 시리즈는 Python으로 API 테스트를 제로부터 배우는 전 7회의 기사입니다. 환경 구축부터 시작해서 GET 테스트부터 순서대로 CRUD 전 조작을 구현하고, 최종적으로 HTML 리포트와 CSV로 테스트 결과를 관리하는 방법까지 배울 수 있습니다.

기사타이틀내용
API 테스트란?개념・UI 테스트와의 차이・기본 패턴
환경 구축pip install・venv・pytest.ini 설정
GET 테스트상태・응답・스키마 검증
POST 테스트데이터 생성・ID 부여・유효성 검사 검증
PUT/PATCH 테스트전체 업데이트・부분 업데이트의 차이와 구현
DELETE 테스트삭제・삭제 후 404 확인
CSV・리포트화pytest-html・CSV 출력・에비던스 관리

💡 포인트:각 기사는 독립해서 읽을 수 있지만 ①→②→③의 순서로 읽으면 체계적으로 배울 수 있습니다. 특정 HTTP 메서드만 알고 싶은 경우는 그 기사로 바로 이동하세요.


01. API 테스트 시리즈 기사 목록

각 기사는 독립해서 읽을 수 있지만, ①→②→③의 순서로 읽으면 체계적으로 배울 수 있습니다.

📘
① API 테스트란?입문편

API 테스트의 기본 개념・UI 테스트와의 차이・requests와 pytest의 기본 패턴

→ 기사 읽기

🛠️
② 환경 구축 가이드

pip install・venv・pytest.ini 설정・동작 확인 테스트까지

→ 기사 읽기

🔍
③ GET 테스트

상태・응답・헤더・스키마 검증(9건)

→ 기사 읽기

✏️
④ POST 테스트

데이터 생성・ID 부여・유효성 검사 이상계(9건)

→ 기사 읽기

🔄
⑤ PUT/PATCH 테스트

전체 업데이트・부분 업데이트의 차이와 구현(9건)

→ 기사 읽기

🗑️
⑥ DELETE 테스트

삭제・삭제 후 404 확인・204 대응(7건)

→ 기사 읽기

📊
⑦ CSV 출력・HTML 리포트화

pytest-html・CSV 추가 기록・utf-8-sig・fixture 초기화・response.elapsed

→ 기사 읽기


02. 시리즈에서 배운 실무 코드 패턴

이 시리즈를 통해 등장한 실무에서 반드시 사용하는 코드 패턴을 정리합니다.

① 실무의 기본 패턴(매번 사용하는 3행)

response = requests.get(url, timeout=5)
response.raise_for_status()  # 4xx/5xx로 자동 예외
elapsed_ms = response.elapsed.total_seconds() * 1000

② 헤더 체크(부분 일치가 정답)

# ✅ in 으로 부분 일치(charset 포함이어도 실패하지 않음)
content_type = response.headers.get("Content-Type", "")
assert "application/json" in content_type

③ 필수 필드 일괄 검증

required_fields = ["id", "name", "email"]
for field in required_fields:
    assert field in body, f"'{field}' 가 존재하지 않습니다"

④ 스키마(타입)검증

assert isinstance(body["id"],    int)
assert isinstance(body["name"],  str)
assert isinstance(body["email"], str)

⑤ FAIL 시에도 CSV에 기록하는 패턴

try:
    assert response.status_code == 200
    write_result("TC01", "GET /users/1", "PASS", ...)
except AssertionError as e:
    write_result("TC01", "GET /users/1", "FAIL", ..., str(e))
    raise  # pytest에 실패를 전달

💡 포인트:이 5가지 패턴을 조합하는 것만으로 실무 수준의 API 테스트 코드를 작성할 수 있습니다.


03. 이 시리즈에서 구현한 테스트 케이스 목록

시리즈 전체로 합계 34건의 테스트 케이스를 구현했습니다.

카테고리건수주요 검증 내용
GET 테스트9건상태・raise_for_status・헤더・바디・필드・스키마・404・목록・응답 시간
POST 테스트9건201 확인・raise_for_status・헤더・바디・ID 부여・필수 필드 없음・빈 문자열・잘못된 이메일・스키마
PUT/PATCH 테스트9건PUT200・raise_for_status・PUT 바디・헤더・PATCH200・PATCH 바디・PATCH 복수・스키마・404
DELETE 테스트7건200 확인・raise_for_status・응답 바디・삭제 후 404・존재하지 않는 리소스・200/204・헤더

💡 포인트:34건의 테스트 케이스로 CRUD 전 조작을 커버할 수 있습니다. 「API 테스트가 가능하다」는 포트폴리오 어필로서 충분한 내용입니다.


04. API 테스트의 포트폴리오 활용법

이 시리즈에서 구현한 코드를 포트폴리오로 공개할 때의 포인트를 소개합니다.

GitHub에 공개하는 구성(추천)

automated-testing-portfolio/
├── README.md              ← 테스트 케이스 목록・실행 방법 기재
├── pytest.ini             ← HTML 리포트 자동 생성 설정
├── requirements.txt       ← 의존 라이브러리 목록
├── tests/
│   ├── test_get_api.py    ← GET 테스트(9건)
│   ├── test_post_api.py   ← POST 테스트(9건)
│   ├── test_put_patch_api.py ← PUT/PATCH 테스트(9건)
│   └── test_delete_api.py ← DELETE 테스트(7건)
├── report.html            ← 테스트 실행 결과(HTML 리포트)
└── test_results.csv       ← 테스트 실행 결과(CSV)

💡 포인트:report.htmltest_results.csv 를 GitHub에 포함하면 「실제로 동작시킨 증거」가 그대로 보입니다. 클라이언트나 채용 담당자에 대한 어필이 됩니다.


05. API 테스트 시리즈 자주 겪는 문제 총정리

시리즈 전체를 통해 특히 자주 나오는 문제들을 정리합니다.


① Content-Type은 == 가 아닌 in 으로 비교한다

# ❌ charset 포함으로 실패한다
assert response.headers["Content-Type"] == "application/json"

# ✅ 부분 일치로 안전
assert "application/json" in response.headers.get("Content-Type", "")

② 204 No Content에서 json()을 호출하면 오류가 발생한다

# ✅ 상태 코드로 분기한다
if response.status_code == 204:
    body = None
else:
    body = response.json()

③ raise_for_status와 assert의 사용 구분

# 정상계: raise_for_status()로 4xx/5xx를 일괄 검지
response.raise_for_status()

# 이상계: 의도적으로 4xx/5xx를 확인할 때는 assert를 사용
response = requests.delete(url, timeout=5)
assert response.status_code == 404

④ CSV 출력은 utf-8-sig로 Excel 대응

# ✅ Excel에서 CSV를 열어도 깨지지 않음
with open(CSV_FILE, mode="w", encoding="utf-8-sig") as f:
    ...

⑤ timeout과 response.elapsed로 실무 품질로

# ✅ 실무의 기본 패턴
response = requests.get(url, timeout=5)
elapsed_ms = response.elapsed.total_seconds() * 1000

06. 자주 묻는 질문(FAQ)

Q. pytest와 Postman 어느 것으로 API 테스트를 작성해야 하나요?
A. 수동 테스트나 동작 확인이라면 Postman이 편리하지만, 자동 테스트나 CI/CD에 조합하는 경우는 pytest + requests가 더 적합합니다. 코드로서 관리할 수 있기 때문에 테스트 재사용・자동 실행・GitHub에서의 공유가 가능해집니다. 포트폴리오로 공개하려면 pytest + requests를 추천합니다.

Q. 이 시리즈는 어느 순서로 읽으면 좋나요?
A. API 테스트가 처음인 분은 ①→②→③의 순서로 읽는 것을 권장합니다. 특정 HTTP 메서드만 배우고 싶은 분은 그 기사로 바로 이동하세요. 각 기사는 독립해서 읽을 수 있도록 구성되어 있습니다.

Q. JSONPlaceholder 외의 API로 시험해볼 수 있나요?
A. 예. 인증 플로우 테스트에는 Restful Booker、더 본격적인 테스트에는 reqres.in 이나 직접 만든 API를 사용할 수 있습니다. 이 시리즈의 코드는 API의 URL을 바꾸기만 하면 다른 API에도 응용할 수 있습니다.

Q. 이 시리즈의 코드를 포트폴리오에 사용해도 되나요?
A. 물론입니다. GitHub에 공개하여 포트폴리오로 활용해주세요. README에 테스트 케이스 목록과 실행 방법을 기재하고 HTML 리포트도 포함하면 완성도가 올라갑니다.

Q. Playwright의 코드도 함께 넣는 편이 좋나요?
A. 예. UI 테스트(Playwright)와 API 테스트(requests)를 1개의 리포지토리로 공개하면 「UI도 API도 둘 다 가능합니다」라는 어필이 됩니다. 실제로 GitHub에서 공개하고 있는 포트폴리오 구성으로 추천합니다.

Q. CI/CD에 조합하는 방법이 있나요?
A. GitHub Actions를 사용하면 push할 때마다 API 테스트를 자동 실행할 수 있습니다. .github/workflows/test.yml 을 작성하여 pytest 커맨드를 실행하는 설정을 추가하기만 하면 됩니다. 시리즈의 다음 단계로 검토해보세요.


07. 정리

Python에 의한 API 테스트 자동화는 pytest와 requests 2가지를 조합하는 것만으로 실무 수준의 품질이 실현됩니다. 이 시리즈에서 배운 스킬은 포트폴리오로서도 Upwork나 LinkedIn에 대한 어필로서도 충분한 내용입니다.

이 시리즈에서는 API 테스트의 기초부터 실무 패턴・리포트화까지 전 7회로 해설했습니다.

스킬내용
API 테스트의 기초개념・환경 구축・기본 패턴 이해
CRUD 전 조작 테스트GET・POST・PUT/PATCH・DELETE 구현(34건)
실무 패턴 습득raise_for_status・헤더 검증・스키마 검증
리포트・CSV 출력pytest-html・csv 모듈・에비던스 관리
포트폴리오 활용GitHub 공개・HTML 리포트・requirements.txt

이 시리즈를 끝까지 읽어주셔서 감사합니다. 「UI 테스트도 API 테스트도 가능한 QA 엔지니어」로서 꼭 포트폴리오에 활용해주세요💪

⬅️ 이전 기사

Python으로 API 테스트 결과를 CSV・HTML 리포트로 출력하는 방법|pytest×requests 실무 패턴

기사 읽기 →

📚 시리즈 일람

Python API 테스트 완전 가이드|pytest×requests로 CRUD 테스트부터 HTML 리포트・CSV 출력까지

일람 보기 →

제목과 URL을 복사했습니다