Pytest를 활용한 단위 테스트
Pytest 프레임워크를 사용하여 FastAPI 함수와 모듈을 위한 효과적인 단위 테스트를 작성합니다.
Pytest를 활용한 단위 테스트은(는) CoddyKit의 무료 FastAPI Backend Development Bootcamp 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 FastAPI Backend Development Bootcamp 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. FastAPI Backend Development Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.
이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.
What is Unit Testing?
Welcome to unit testing! This is a fundamental practice in software development that helps ensure your code works correctly.
- Unit testing focuses on testing the smallest testable parts of an application, called 'units'.
- A 'unit' can be a function, a method, or a class. The goal is to isolate it and verify it behaves as expected.
- This helps catch bugs early, makes code easier to refactor, and builds confidence in your application's reliability.
Introducing Pytest
For Python, one of the most popular and powerful testing frameworks is Pytest. It's known for its simplicity and flexibility.
- Pytest makes it easy to write simple, yet scalable tests.
- It automatically discovers tests, provides detailed failure reports, and supports advanced features like fixtures.
- You'll find Pytest widely used in the Python community, including for FastAPI projects.
Installing Pytest
Before we write our first test, we need to install Pytest. It's a standard Python package.
Open your terminal or command prompt and run the following command:
pip install pytestYour First Function to Test
Let's create a simple Python function that we want to test. We'll put this in a file named utils.py.
This function simply multiplies two numbers. We'll write tests to ensure it always returns the correct product.
def multiply(x, y):
return x * y
if __name__ == "__main__":
# This part shows how to use the function directly
print(f"5 * 3 = {multiply(5, 3)}")
print(f"10 * 0 = {multiply(10, 0)}")Crafting Your First Test
Now, let's write tests for our multiply function. Pytest automatically discovers test files that start with test_ (e.g., test_utils.py) and test functions within them that also start with test_.
Create a new file named test_utils.py in the same directory as utils.py:
from utils import multiply # Import the function to test
def test_multiply_positive_numbers():
# Check if 2 * 3 equals 6
assert multiply(2, 3) == 6
def test_multiply_by_zero():
# Check if any number multiplied by zero is zero
assert multiply(5, 0) == 0
def test_multiply_negative_numbers():
# Check multiplication with a negative number
assert multiply(-2, 4) == -8Executing Your Tests
With both utils.py and test_utils.py saved in the same folder, you can now run your tests!
Open your terminal in that directory and simply type pytest. Pytest will find and execute all tests.
# In your terminal or command prompt:
pytestUnderstanding Assertions
The core of any test is the assert statement. It's how you verify that a condition is true. If an assert statement fails, Pytest marks the test as failed.
Here are some common ways to use assert:
assert actual == expected: Checks if two values are equal.assert actual != unexpected: Checks if two values are not equal.assert item in collection: Checks if an item exists in a list, set, or string.assert not condition: Checks if a condition is false.assert value > 0: Checks for numerical comparisons.
Reusable Test Setup with Fixtures
Sometimes, multiple tests need the same setup (e.g., a temporary file, a configured object). Pytest fixtures provide a way to define reusable setup and teardown logic.
A fixture is a function decorated with @pytest.fixture. Tests can then request the fixture by naming it as an argument.
import pytest
@pytest.fixture
def sample_data():
# This fixture provides a list of numbers for tests
print("\nSetting up sample_data") # Runs before tests
yield [10, 20, 30]
print("\nTeardown sample_data") # Runs after tests
def test_data_length(sample_data):
assert len(sample_data) == 3
def test_data_contains_value(sample_data):
assert 20 in sample_dataHandling Expected Errors
What if your function is supposed to raise an error under certain conditions? Pytest can test for that too, using pytest.raises.
This ensures your error handling logic works correctly by asserting that a specific exception is raised.
# my_processor.py
def divide(a, b):
if b == 0:
raise ValueError("Cannot divide by zero!")
return a / b
# test_my_processor.py
import pytest
from my_processor import divide
def test_divide_by_zero_raises_error():
with pytest.raises(ValueError, match="Cannot divide by zero!"):
divide(10, 0)
def test_divide_positive_numbers():
assert divide(10, 2) == 5.0Pytest Fundamentals Check
Consider the Python function and the Pytest test below:
# calculator.py
def add(a, b):
return a + b
# test_calculator.py
from calculator import add
def test_add_positive():
assert add(5, 3) == 8
def test_add_negative_numbers():
assert add(-2, -4) == -6
def test_add_mixed_numbers():
assert add(10, -5) == 5
If you run pytest in the terminal, what will be the outcome?
Unit Testing Recap
Great job! You've learned the basics of unit testing with Pytest. This is a crucial skill for building robust applications.
- Unit tests verify small, isolated parts of your code.
- Pytest is a powerful and easy-to-use framework for writing and running these tests.
- You use
assertstatements to check for expected outcomes. - Fixtures help set up reusable data or resources for your tests.
pytest.raisesis used to test that your code correctly raises specific exceptions.
Next, we'll explore how to perform integration testing specifically for your FastAPI endpoints!
자주 묻는 질문
“Pytest를 활용한 단위 테스트” 강의는 무료인가요?
네 — “Pytest를 활용한 단위 테스트” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 FastAPI Backend Development Bootcamp 강의 전체를 잠금 해제할 수 있습니다. FastAPI Backend Development Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.
“Pytest를 활용한 단위 테스트”에서 뭘 배우나요?
Pytest 프레임워크를 사용하여 FastAPI 함수와 모듈을 위한 효과적인 단위 테스트를 작성합니다. 브라우저에서 직접 실행하는 실습 코드로 FastAPI Backend Development Bootcamp을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
FastAPI Backend Development Bootcamp을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 FastAPI Backend Development Bootcamp은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“Pytest를 활용한 단위 테스트” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 FastAPI Backend Development Bootcamp 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 FastAPI Backend Development Bootcamp 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Pytest를 활용한 단위 테스트
- FastAPI 엔드포인트 통합 테스트
- FastAPI 애플리케이션 디버깅
- FastAPI 테스트에서 종속성 모킹하기