일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 감사일기
- 코딩
- Python
- QA자동화
- QA자동화테스트
- ShareTechnote
- DART
- 코멘토
- QA
- 테스트자동화
- QA직무교육
- testautomationuniversity
- LTE기초
- Selenium
- Flutter
- 웹ui자동화
- 백준
- 자동화테스트
- 카카오API
- HTML
- HTTP
- pytest
- 하이브리드앱테스트
- 무선통신
- 실무PT후기
- 앱개발
- javascript
- 코딩테스트
- 서평
- 코멘토실무PT
- Today
- Total
오예남
QA 엔지니어를 위한 테스트 자동화 python pytest 독학 본문
Pytest 소개
https://docs.pytest.org/en/stable/
Pytest는 Python의 강력한 테스트 프레임워크로, 코드의 품질을 유지하고 버그를 조기에 발견하는 데 도움을 줍니다.
단위 테스트(Unit Test), 기능 테스트(Functional Test), 통합 테스트(Integration Test) 등 다양한 테스트를 간결한 코드로 작성할 수 있습니다.
- 간단한 문법: 테스트 함수를 함수 기반(def test_)으로 작성하며, assert 키워드를 활용해 직관적으로 검증할 수 있습니다.
- 자동 테스트 탐색: test_로 시작하는 파일 및 함수명을 자동으로 탐색하여 실행합니다.
- 강력한 확장성: 다양한 플러그인을 활용할 수 있으며, fixtures 기능을 제공해 테스트 데이터를 효율적으로 관리할 수 있습니다.
- 다양한 리포팅 옵션: 테스트 결과를 상세히 출력할 수 있으며, 실패 시 디버깅을 쉽게 할 수 있습니다.
- CI/CD와 연동 가능: GitHub Actions, Jenkins 등과 쉽게 통합할 수 있어 자동화 테스트 환경을 구축하기에 적합합니다.
Python의 기본 unittest 모듈과 비교했을 때, Pytest는 더 직관적이고 사용하기 쉬우며, 강력한 기능을 제공합니다. 따라서 Python 개발자들이 가장 많이 사용하는 테스트 프레임워크 중 하나입니다.
Pytest 설치
Pytest는 Python 표준 라이브러리가 아니므로 pip을 사용하여 설치해야 합니다.
pip install pytest
설치 후 Pytest 버전을 확인하여 정상적으로 설치되었는지 확인합니다.
pytest --version
pytest 8.3.4
기본 테스트 코드 작성 및 실행
단순한 산술 연산 테스트 코드를 작성합니다.
def test_addition():
assert 1 + 1 == 2
def test_subtraction():
assert 5 - 3 == 2
테스트를 실행을 위해, 프로젝트 루트 디렉터리에서 다음 명령어를 입력합니다.
pytest
출력 예시는 아래와 같습니다.
======================================== test session starts =========================================
platform win32 -- Python 3.10.2, pytest-8.3.4, pluggy-1.5.0
rootdir: C:\Python\pytest
collected 2 items
test_add.py .. [100%]
========================================= 2 passed in 0.02s ==========================================
. (점) 하나는 성공한 테스트를 나타내며, 우측 하단에 진행률을 표시합니다.
2개의 산술 테스트를 진행했고, 0.02초 만에 모두 Pass하였습니다.
Pytest의 다양한 기능
(1) 테스트 실패 사례 및 디버깅
테스트가 실패할 경우, Pytest에서 력해줍니다.
def test_addition():
assert 1 + 1 == 2
def test_subtraction():
assert 5 - 3 == 2
def test_fail_example():
assert 2 * 2 == 5 # 의도적으로 실패하는 코드
실행하면 다음과 같은 결과를 출력합니다.
======================================== test session starts =========================================
platform win32 -- Python 3.10.2, pytest-8.3.4, pluggy-1.5.0
rootdir: C:\Python\pytest
collected 3 items
test_add.py ..F [100%]
============================================== FAILURES ==============================================
_________________________________________ test_fail_example __________________________________________
def test_fail_example():
> assert 2 * 2 == 5 # 의도적으로 실패하는 코드
E assert (2 * 2) == 5
test_add.py:10: AssertionError
====================================== short test summary info =======================================
FAILED test_add.py::test_fail_example - assert (2 * 2) == 5
==================================== 1 failed, 2 passed in 0.12s =====================================
이처럼 Pytest는 단순한 assert문을 사용하여 직관적으로 실패한 테스트 결과를 표시해줍니다.
(2) Fixtures 활용
Pytest의 fixtures 기능을 활용하면 반복적인 테스트 데이터를 효율적으로 관리할 수 있습니다.
import pytest
@pytest.fixture
def sample_data():
return {'name': 'Alice', 'age': 30}
def test_sample_data(sample_data):
assert sample_data['name'] == 'Alice'
assert sample_data['age'] == 30
위 코드에서 @pytest.fixture를 사용하여 sample_data() 함수를 정의하면, 테스트 함수에서 이를 매개변수로 받아 활용할 수 있습니다.
(3) 파라미터화 테스트
여러 개의 입력값을 테스트해야 할 경우, @pytest.mark.parametrize를 사용하면 반복적인 테스트를 간결하게 작성할 수 있습니다.
import pytest
@pytest.mark.parametrize("a, b, result", [(1, 2, 3), (2, 3, 5), (5, 5, 10)])
def test_addition(a, b, result):
assert a + b == result
이제 한 번의 실행으로 여러 개의 값을 테스트할 수 있습니다.
'Pytest' 카테고리의 다른 글
[Python] 테스트 자동화 - pytest 명령어 옵션 사용하기 (0) | 2025.02.07 |
---|---|
[Python] pytest 테스트 자동화 - 픽스처(Fixture) 함수 사용하기 (0) | 2025.02.05 |
[Python] pytest 테스트 자동화 - 단위 테스트(class) 샘플 예제 (0) | 2025.02.04 |
[Python] pytest 테스트 자동화 - parametrize 매개변수화 (0) | 2025.02.02 |
pytest 로 예외처리하는 방법 try/except 대신 pytest.raises 사용하기 (0) | 2025.02.01 |