일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 코멘토
- pytest
- Python
- Selenium
- QA자동화테스트
- 카카오API
- HTML
- Flutter
- 서평
- 코멘토실무PT
- javascript
- 자동화테스트
- DART
- 코딩
- LTE기초
- QA
- QA자동화
- HTTP
- 하이브리드앱테스트
- 백준
- 무선통신
- 웹ui자동화
- QA직무교육
- ShareTechnote
- 코딩테스트
- 감사일기
- 테스트자동화
- 실무PT후기
- 앱개발
- testautomationuniversity
- Today
- Total
오예남
[Python] pytest 테스트 자동화 - parametrize 매개변수화 본문
이전 글에서는 pytest.raises 를 사용하여 테스트 케이스에서 예외처리하는 방법을 알아보았습니다.
pytest 로 예외처리하는 방법 try/except 대신 pytest.raises 사용하기
이전 글에서는 pytest를 설치하고 샘플 코드로 간단하게 실행하는 방법을 알아보았습니다. QA 엔지니어를 위한 테스트 자동화 python pytest 독학Pytest 소개 https://docs.pytest.org/en/stable/ Pytest는 Python의
ohyenam.tistory.com
테스트 케이스를 작성하다보면
오늘은 pytest에서 테스트 케이스를 매개변수화하는 방법을 알아보겠습니다.
매개 변수화란?
매개 변수화(Parameterize)는 하나의 테스트 함수로 여러가지 테스트 케이스를 실행할 수 있게 해주는 기능입니다.
쉽게 말해서, 테스트에 필요한 여러 입력값과 예상 결과값을 미리 정해두고 이를 자동으로 테스트 해주는 방법입니다.
예를 들어, 계산기 앱의 곱셈 기능을 테스트할 경우 다음과 같은 케이스들을 테스트해야 합니다:
- 일반적인 양수의 곱셈 (2 × 3 = 6)
- 1을 곱하는 경우 (1 × 99 = 99)
- 0을 곱하는 경우 (0 × 5 = 0)
- 음수가 포함된 경우 (-2 × 3 = -6)
- 소수점이 있는 경우 (2.5 × 2 = 5.0)
위 항목들을 별도의 테스트 함수로 만들면 코드가 길어지고 관리하기 어려워집니다.
def test_multiply_normal():
assert 2 * 3 == 6
def test_multiply_with_zero():
assert 0 * 100 == 0
def test_multiply_negative():
assert -2 * 3 == -6
하지만 매개변수화를 사용하면, 하나의 테스트 함수로 이 모든 경우를 깔끔하게 처리할 수 있습니다.
Pytest 매개변수화 데코레이터 사용하기
pytest의 @pytest.mark.parametrize 를 사용하면 매개변수화된 여러 입력을 받는 하나의 테스트 함수를 작성할 수 있습니다.
아래는 test_cases라는 튜플과 데코레이터를 적용 샘플 코드입니다.
*데코레이터 철자는 영국식 'parametrize'를 사용합니다. (parameterize가 아닙니다.)
import pytest
# 테스트할 데이터들을 한 곳에 모아둡니다
test_cases = [
(2, 3, 6), # 일반적인 곱셈
(1, 99, 99), # 1을 곱하는 경우
(0, 99, 0), # 0을 곱하는 경우
(3, -4, -12), # 음수가 포함된 경우
(2.5, 2, 5.0) # 소수점이 있는 경우
]
# 하나의 함수로 모든 테스트 케이스를 처리합니다
@pytest.mark.parametrize('a, b, expected', test_cases)
def test_multiplication(a, b, expected):
assert a * b == expected
parametrize 데코레이터를 통해 하나의 테스트 함수로 5개의 입력값을 모두 테스트할 수 있습니다.
아래는 테스트 결과 메세지 입니다.
================================================== test session starts ===================================================
platform win32 -- Python 3.10.2, pytest-8.3.4, pluggy-1.5.0
rootdir: C:\Python\pytest
collected 5 items
test_add.py ..... [100%]
=================================================== 5 passed in 0.03s ====================================================
이렇게 매개변수화를 활용하면 코드 중복을 줄여 코드를 깔끔하게 관리할 수 있어, 테스트를 쉽게 관리할 수 있습니다.
그리고 테스트 케이스가 많다면 CSV나 Excel 파일로 따로 관리할 수도 있습니다.
<csv 파일을 사용하여 테스트하는 방법은 아래 링크를 참고해주세요.>
PyTest parameterised test with csv data
In many PyTest scripts example with parameterised data such as @pytest.mark.parametrize("input1, input2, output", [(5, 5, 10), (7, 5, 12)]) def test_add(input1, input2, output): assert
stackoverflow.com
매개변수화는 테스트 코드의 중복을 줄이면서 커버리지를 높일 수 있는 강력한 도구입니다.
하지만 모든 경우에 대해 무분별하게 적용하지않고, 필요한 케이스에 대해서만 적절히 사용하는 것이 중요합니다.
(입력값으로 사용한 모든 튜플은 각각의 테스트이므로 테스트 진행시간이 늘어날 수 있음)
테스트 실행 시간과 유지보수성을 고려하여, 각 동등 분할을 대표할 수 있는 최소한의 테스트 케이스만 작성하는 것을 권장합니다.
위 내용은 Test Automation University - Pytest 강의 내용을 정리하고, 추가로 이해한 내용을 작성한 게시물임을 참고 부탁드립니다.
Chapter 4 - Parameterized Test Cases
testautomationu.applitools.com
'Pytest' 카테고리의 다른 글
[Python] 테스트 자동화 - pytest 명령어 옵션 사용하기 (0) | 2025.02.07 |
---|---|
[Python] pytest 테스트 자동화 - 픽스처(Fixture) 함수 사용하기 (0) | 2025.02.05 |
[Python] pytest 테스트 자동화 - 단위 테스트(class) 샘플 예제 (0) | 2025.02.04 |
pytest 로 예외처리하는 방법 try/except 대신 pytest.raises 사용하기 (0) | 2025.02.01 |
QA 엔지니어를 위한 테스트 자동화 python pytest 독학 (2) | 2025.02.01 |