산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

PyTest 튜토리얼: 설치부터 작성, 실행까지 파이썬 테스트 마스터하기

PyTest란 무엇인가?

PyTest는 개발자가 파이썬 프로젝트를 위한 간결하고 확장 가능한 테스트 케이스를 작성할 수 있게 해주는 강력하고 오픈소스인 테스트 프레임워크입니다. 단위 테스트, 통합 테스트, 엔드투엔드 API 검사 등 모든 유형을 지원하며, 병렬 실행, 픽스처 주입, 매개변수화, 풍부한 리포팅을 기본 제공합니다.

왜 PyTest를 선택해야 할까?

PyTest 설치

pip로 최신 안정 버전 설치:

pip install pytest

설치 확인:

pytest --version

특정 버전 고정이 필요하면 예: pip install pytest==7.4.0

시작하기: 기본 테스트

프로젝트 디렉터리를 만들고 test_sample1.py라는 테스트 파일 추가:

import pytest
def test_file1_method1():
    x = 5
    y = 6
    assert x + 1 == y, "Addition failed"
    assert x == y, "Values should match"

def test_file1_method2():
    x = 5
    y = 6
    assert x + 1 == y, "Addition failed"

테스트 스위트 실행:

pytest

출력 예시:

==================== test session starts ====================
collected 2 items
test_sample1.py F. [100%]
=================================== FAILURES ===================================
...

어설션 이해하기

PyTest 어설션은 표준 파이썬 assert 문과 동일하게 동작합니다. 실패 시 테스트 실행을 중단하고 정확한 위치와 메시지를 보고합니다:

assert "hello" == "Hai", "Mismatched greeting"

테스트 발견 규칙

특정 테스트 실행

디렉터리 내 모든 테스트 실행:

pytest

단일 파일 실행:

pytest test_sample1.py

부분 문자열로 필터링:

pytest -k method1 -v

마커로 실행:

pytest -m set1

병렬 실행

xdist 플러그인 설치 후 4워커 병렬 실행:

pip install pytest-xdist
pytest -n 4

픽스처 사용

재사용 가능한 설정 로직을 한 번 정의하고 테스트에 주입:

import pytest
@pytest.fixture
def supply_data():
    return [25, 35, 45]

def test_compare_with_first(supply_data):
    assert supply_data[0] == 25

픽스처 코드를 conftest.py에 두면 여러 테스트 모듈에서 공유 가능.

매개변수화 테스트

단일 테스트를 여러 입력으로 실행:

import pytest
@pytest.mark.parametrize("a, b, expected", [(5, 5, 10), (3, 5, 8)])
def test_add(a, b, expected):
    assert a + b == expected

스킵과 예상 실패

마커로 결과를 오염시키지 않고 스킵하거나 실패 예상:

import pytest
@pytest.mark.skip(reason="Feature not yet available")
def test_future_feature():
    pass

@pytest.mark.xfail(reason="Known bug")
def test_known_issue():
    assert 1 == 2

XML 리포트 생성

CI 파이프라인용 JUnit 호환 XML 파일 생성:

pytest -v --junitxml=result.xml

실전 예제: 공개 API 테스트

아래는 https://reqres.in/을 테스트하는 최소 프레임워크입니다:

# conftest.py
import pytest
@pytest.fixture
def base_url():
    return "https://reqres.in/api"

# test_list_user.py
import requests, json
import pytest
@pytest.mark.parametrize("user_id, first_name", [(1, "George"), (2, "Janet")])
def test_valid_user(base_url, user_id, first_name):
    resp = requests.get(f"{base_url}/users/{user_id}")
    data = json.loads(resp.text)
    assert resp.status_code == 200
    assert data["data"]["id"] == user_id
    assert data["data"]["first_name"] == first_name

def test_invalid_user(base_url):
    resp = requests.get(f"{base_url}/users/50")
    assert resp.status_code == 404

# test_login_user.py
import requests, json
import pytest
def test_login_success(base_url):
    payload = {"email": "test@test.com", "password": "something"}
    resp = requests.post(f"{base_url}/login/", data=payload)
    data = json.loads(resp.text)
    assert resp.status_code == 200
    assert data["token"] == "QpwL5tke4Pnpja7X"

def test_login_missing_password(base_url):
    payload = {"email": "test@test.com"}
    resp = requests.post(f"{base_url}/login/", data=payload)
    data = json.loads(resp.text)
    assert resp.status_code == 400
    assert data["error"] == "Missing password"

결론

이 튜토리얼은 PyTest 설치, 명확한 테스트 작성, 픽스처와 마커 활용, 병렬 실행, XML 리포트 생성, 간단한 API 테스트 스위트 구축을 다뤘습니다. 이 기초로 파이썬 테스트 관행을 자신 있게 확장할 수 있습니다.

python

  1. 구글 클라우드에 WordPress 설치하기: 단계별 가이드
  2. Coded UI Test 자동화 프레임워크: 초보자를 위한 종합 가이드
  3. 네트워크 보안 키 찾기 및 보호: 와이파이 비밀번호 쉽게 확인하는 방법
  4. 와이파이 통화(WiFi Calling) 완벽 가이드: 작동 원리와 장점
  5. 6G 탐구: 초고속 연결의 미래
  6. 전문가 가이드: 독 레벨러 설치로 최대 효율 달성
  7. 부분 방전 시험 이해: 고전압 설비 보호
  8. 펌프 캐비테이션 예방: 원인, 증상, 방지법
  9. 동 브레이징(납땜) 설명: 강력하고 신뢰할 수 있는 연결을 위한 기술 및 팁
  10. 유지보수 백로그 완전 정복: 원인 분석부터 해결 전략까지