기본적으로 django에서는 테스트 환경에서 기존의 디비 환경과 동일한 환경의 데이터 베이스를 만들고 테스트가 종료되는 즉시 롤백을 하게된다. → 지운다는 의미이다.
따라서 django 프로젝트에서 가지고 있는 기존의 migration 파일들을 복기하는 방식으로 테스트 db가 형성되고 이 db에 대해서 api 요청을 통해서 테스팅을 진행하게 된다.
현행 pikurate db에는 다음과 같은 문제점이 발생되었다.
pytest config 문제
pytest를 실행하는 과정에서 버전으로 인해서 config를 요구하게 되는 것을 보인다.
pytest5로 넘어가는 과정에서 config와 같은 요구사항이 없어졌다는 소식을 들었기 때문에 위 문제는 pytest-django 문제라는 생각이 들었다. 이에 따라서 pytest-django에 대한 upgrade를 진행한 결과 관련 에러는 발생하지 않았다.
migration 파일을 커스텀 하는 과정에서 dependency를 무시하는 명령어가 발견되었다.
migrate시에 새롭게 정보를 추가하는 상황에서 필요한 코드이지만, dependencies를 보면
activities 모델에 대한 의존성이 성립되지 않은 것을 확인할 수 있다. 즉, 위의 migration파일이 실행될 때에, activities 모델이 없다면 migration fail이 발생한다.
<aside> ❓ 그렇다면 왜 prod/dev 에서는 위와 같은 에러가 발생하지 않은 것일까?
운🤪
디펜던시가 없는 경우 랜덤으로 마이그레이션이 진행되기 때문에 운이 좋게 activities 모델이 먼저 생겼을 수 있다.
각 과정에서 누적된 migration 현황
개발과정에서 배포를 하게되면 실제 서버의 내용들은 과거의 migration 파일이 축적되어 순서대로 실행되는 상황이 발생하게 된다. 이러한 상황에서 위와 같은 의존성이 없더라도 정상적으로 작동했을 수 있다.
</aside>
두개 이상의 db를 사용하면서 발생하는 문제 발생
위는 settings.py에서 설정된 db 옵션이다. test db가 형성되는 과정에서는 동시에 두개의 db가 같은 migration이 적용되어 생성된다고 한다.
→ 공식문서에 따르면 django3.1부터는 TEST
옵션에서 MIGRATION
을 통해서 test db의 migration 여부를 결정할 수 있다고는 하지만... 우리는 2.1이기 때문에...
→ settings의 폴더를 나누어서 해결하도록 하자
위의 그림처럼 test.py를 만들어서 test환경에서의 옵션을 오버라이딩 하는 방식으로 문제를 해결하였다. 추가적으로 pytest.ini의 DJANGO_SETTINGS_MODULE
의 경로 설정을 바꾸자!
위의 결과처럼 간단한 테스트에 대해서는 성공을 한 모습이다. 하지만 버전으로 인한 deprecated warning이 발생하였다.