테스트코드를 작성하여
로직에 대한 에러처리와 코드가 잘 작동되는지 검증하고 확인할 수 있다는 사실을 알게되어,
장고에 내장되어있는 django.test 모듈을 사용하여
한 앱의 APIs와 Services 에 대한 테스트코드를 작성했었다.
from django.test import TestCase 코드
최근 구인 과정 중 기업과제를 몇번 접해보니 unittest 보다는 pytest를 많이 사용하는 것 같더라.
pytest는
fixture를 별도의 함수로 분리해서 관리
필요한 테스트 케이스에서만 호출해서 사용
fixture를 모듈화, 재가공, 재사용 등이 쉬움
테스트코드 결과도 unittest 보다 좀 더 상세함
장점들이 많아보여 사용해보고자 ! 모듈을 임포트하여 세팅하는 과정에 ... 겪은 문제들에 대해 적어본다. 🥲
1. pytest 실행시
E django.core.exceptions.ImproperlyConfigured: Requested settings, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
✨ 1번 해결 ✨
에러메세지에서 모듈 세팅이 안됐다하여
root directory에 pytest.ini 파일을 생성하여 DJANGO_SETTINGS_MODULE 을 설정해주니 해결 !
# pytest.ini
[pytest]
DJANGO_SETTINGS_MODULE = 프로젝트명.settings
2. 시크릿키를 읽지못함
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
아래의 코드처럼 환경변수에 시크릿키를 넣어 관리했었는데, pytest 실행시 시크릿키를 읽지 못하더라.
# .env
SECRET_KEY="시크릿키"
# settings.py
SECRET_KEY = os.environ.get("SECRET_KEY")
✨ 2번 해결 ✨
root directory에 secrets.json 파일 생성 후 settings 에서 시크릿키를 불러오는 함수를 재작성하여 해결 !
( .gitignore에 secrets.json 꼭꼭 추가하여 관리해주자 )
# secrets.json
{
"SECRET_KEY":"시크릿키"
}
# settings.py
import json
secret_file = os.path.join(BASE_DIR, "secrets.json")
with open(secret_file) as f:
secrets = json.loads(f.read())
def get_secret(setting, secrets=secrets):
try:
return secrets[setting]
except KeyError:
error_msg = "Set the {} environment variable".format(setting)
raise ImproperlyConfigured(error_msg)
SECRET_KEY = get_secret("SECRET_KEY")
3. tests.py 안에 하나의 테스트코드(test_true())가 있으나 읽지 못함
결과값은 no tests 라고 하며 collected 0 items이 뜸
✨ 3번 해결 ✨
pytest.ini 파일에 python_files 부분에 테스트하는 파일명을 지정해주니 test_true() 함수를 인식함
# pytest.ini
[pytest]
python_files = tests.py test_*.py *_tests.py # 추가해주기
이렇게 해결은 되었으나
SECRET_KEY 는 json 파일이 아닌 환경변수로 계속 관리하고싶다는 생각을 하다보니 read_env를 사용해서 불러올 수 있을 것 같다.
그리고 프로젝트 내의 테스트코드의 형식은 통일하는 것이 나을 것 같다는 생각이 들어 pytest는 다른 프로젝트에 적용해보고자 한다.
다시 바꿔야지..
'PROJECTS' 카테고리의 다른 글
body 안넣었을때 에러처리 | 에러메세지 필드값 설정 | flake8 좋다.. (0) | 2022.12.10 |
---|---|
Django | RESTful API는 뒤에 slash가 없어야하는데 WARNING 발생 (0) | 2022.11.10 |
AttributeError: This QueryDict instance is immutable (0) | 2022.10.20 |
쿼리수 줄이기 (0) | 2022.10.13 |
쿼리수 확인 (0) | 2022.10.12 |