Pytest는 Python 생태계에서 가장 널리 사용되는 테스트 프레임워크 중 하나로, 단위 테스트, 기능 테스트, 성능 테스트 등 다양한 상황에 적용할 수 있습니다. 자동화 테스트는 기능 테스트의 한 형태이며, Pytest를 활용하여 테스트 케이스를 작성하고 관리한 후 실제 자동화 테스트를 수행할 수 있습니다.
기능 테스트는 일반적으로 인터페이스(API) 테스트와 웹 테스트로 구분됩니다. 두 유형 모두 Pytest 프레임워크를 통해 구현 가능합니다. 이 글에서는 API 테스트를 중심으로 Pytest를 사용한 자동화 테스트 방법을 설명합니다.
웹 자동화 테스트가 필요하다면, 아래 코드에서 API 테스트 관련 부분을 웹 자동화에 맞는 API로 교체하기만 하면 됩니다. 전체적인 프레임워크 구조와 실행 방식은 거의 동일합니다.
1. 테스트 케이스 작성
1) 기본 테스트 케이스 작성
네이버(Naver) 홈페이지 API를 테스트한다고 가정해 보겠습니다. 사용자가 보낸 요청이 유효한지 확인하고, 응답 텍스트에 "NAVER"라는 문자열이 포함되어 있는지 검사합니다.
코드 예시:
import requests
def test_naver():
# API 요청 전송
response = requests.get('https://www.naver.com')
# 응답 상태 코드와 텍스트 검증
assert response.status_code == 200
assert "NAVER" in response.text
위 코드는 test_naver()라는 테스트 함수를 정의하며, 이것이 하나의 기본 테스트 케이스입니다. 이 예시에서는 API에 GET 요청을 보내고 응답 상태 코드가 200인지, 응답 텍스트에 "NAVER" 키워드가 포함되었는지를 검증합니다.
2) 매개변수화된 테스트 케이스 작성
실제 테스트에서는 여러 데이터 세트를 동시에 검증해야 하는 경우가 많습니다. 이때 매개변수화된 테스트 케이스가 유용합니다. 여러 데이터를 손쉽게 테스트할 수 있어 수동으로 반복 작성할 필요가 없습니다.
코드 예시:
import requests
import pytest
# 테스트 데이터 선언
test_data = [
{'site_url': 'https://www.naver.com', 'keyword': 'NAVER'},
{'site_url': 'https://www.daum.net', 'keyword': 'Daum'}
]
@pytest.mark.parametrize('item', test_data)
def test_websites(item):
url = item['site_url']
expected = item['keyword']
# API 요청 전송 및 검증
response = requests.get(url)
assert response.status_code == 200
assert expected in response.text
위 코드는 pytest.mark.parametrize 데코레이터를 사용하여 매개변수화를 구현했습니다. item은 매개변수 이름이고, test_data 리스트에는 여러 테스트 데이터가 포함되어 있습니다. Pytest는 각 데이터 세트를 순회하며 테스트를 실행합니다.
2. 테스트 케이스 실행
테스트 케이스 작성 후에는 반드시 자체 검증을 수행해야 합니다. 테스트 결과의 정확성과 일관성을 확인하고, 테스트 케이스 자체에 문제가 없음을 보장한 후에 자동화 테스트에 적용해야 합니다.
Pytest로 테스트를 실행하는 것은 매우 간단합니다. 터미널에서 pytest 명령어만 입력하면 됩니다:
pytest
3. 테스트 결과 확인
모든 테스트 케이스 실행이 완료되면 Pytest는 결과를 출력합니다. 모든 케이스가 통과하면 다음과 같은 메시지가 표시됩니다:
collected 2 items
test_example.py .. [100%]
========================= 2 passed in 1.23s =========================
만약 실패한 테스트 케이스가 있다면, 실행 결과에 실패 메시지와 원인이 함께 표시됩니다. 테스터는 결과를 분석하여 실패 원인이 테스트 케이스 자체의 문제인지, 실제 프로그램 버그인지 판단해야 합니다.
Pytest로 자동화 테스트를 수행할 때는 최적의 코딩 규칙을 따르고, 다양한 경계 조건과 예외 상황을 고려해야 합니다. 또한 매개변수화 및 기타 고급 기능을 적극 활용하여 테스트의 신뢰성과 유지보수성을 높이고, 자동화 테스트가 원활하게 실행되도록 보장해야 합니다.