pytest-django 설치
Django 프레임워크에서 Pytest를 진행 하기 위해선 pytest-django 패키지 설치가 필요하다.
$ pip install pytest-django
https://pytest-django.readthedocs.io/en/latest/
django 셋팅
1. Django 프로젝트 생성
2. Django APP 생성
3. Settings.py에 DB 정보 및 APP 등록 (만약에 DOT_ENV를 사용하여 환경변수를 Load 하는 경우 다음과 같이 Flag 작성하여 구분 가능
IS_TESTING_MODE = True
if IS_TESTING_MODE:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': '<YOUR DB SCHEMA>', # Schema Name
'USER': 'postgres',
'PASSWORD': '<YOUR PASSWORD>', # PASSWORD
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
# NOT TESTING MODE
else:
DATABASES = {
'default': {
'ENGINE': os.environ.get("DB_ENGINE"),
'NAME': os.environ.get("DB_NAME"), # Schema Name
'USER': os.environ.get("DB_USER"),
'PASSWORD': os.environ.get("DB_PASSWORD"), # PASSWORD
'HOST':os.environ.get("DB_HOST"),
'PORT':os.environ.get("DB_PORT"),
}
}
4. Pytest.ini 작성
[pytest]
DJANGO_SETTINGS_MODULE = LookupService.settings
python_files = tests.py test_*.py *_tests.py
5. TEST CODE 작성
import pytest
from sharedb.models import Category
@pytest.fixture
def create_Categories():
Category.objects.bulk_create([
# Category Table Field : (id, name, image:path임)
Category(1, 'coffee', '<your img path>'),
Category(2, 'meat', '<your img path>'),
])
# 결함 TEST
# 1. Category 값 중 누락된건 없는지
# - 모든 Rows에 name과 image값이 다 있는지
@pytest.mark.django_db
def test_CategoryRowsValidation(create_Categories):
queryset = list(Category.objects.all())
assert len(queryset)==2, "Num of Category Rows is Failed"
assert all([obj.name for obj in queryset if obj.name is not None]) # 모두 True면 통과
assert all([obj.image for obj in queryset if obj.image is not None]) # 모두 True면 통과
fixture와 @pytest.mark.django_db 사용 없이 (pytest에서 제공하는 db 인자 적어도 가능
def test_CategoryRowsValidation(db):
queryset = list(Category.objects.all())
assert len(queryset)==2, "Num of Category Rows is Failed"
assert all([obj.name for obj in queryset if obj.name is not None]) # 모두 True면 통과
assert all([obj.image for obj in queryset if obj.image is not None]) # 모두 True면 통과
bulk_create 대신 아래와 같이 params를 이용해서도 가능
import pytest
from sharedb.models import Category
@pytest.fixture(params=("abd", "efgh", "klji"))
def create_Categories(db, request):
# Category Table Field : (id, name)
return Product.objects.create(name=request.param)
6. Pytest Command 실행
$ pytest -rA # 모든 TEST Case 결과 출력
'Python > Advanced' 카테고리의 다른 글
[Python 비동기] (2) Generator, Async/await 코루틴 코드 비교 (0) | 2023.02.09 |
---|---|
[Python 비동기] (1) 코루틴, 비동기 관련 용어 이해 (0) | 2023.02.08 |
[Pytest] 3. Pytest 문법 (Feat. fixture, parametize) (0) | 2022.11.06 |
[Pytest] 2. Pytest 명령어 옵션 (command) (0) | 2022.11.05 |
[Pytest] 1. Pytest란? (+ 프레임워크 별 사용) (0) | 2022.11.04 |