Docker 및 Pytest-Django로 테스트 환경 설정: PostreSQL 스키마 문제
이 핵심 응용 프로그램은 다른 응용 프로그램에서 동일한 논리가 반복되기 때문에 인증, 조직 생성 및 지갑 트랜잭션과 같은 작업을 실제로 처리합니다. 이로 인해 실제로 스키마를 사용하여 데이터베이스에서 동일한 구조를 미러링하게 되었습니다.
프로젝트의 각 애플리케이션에는 자체 스키마가 있습니다.
그러나 pytest로 테스트하는 경우 상황이 약간 까다롭습니다.
또한 Docker를 사용하고 있으며 Docker를 사용하여 테스트를 실행하고 있습니다.
문제
Pytest를 사용하여 테스트 데이터베이스에 스키마를 생성하는 것은 간단하지 않습니다. 개발 환경과 테스트에 동일한 데이터베이스 컨테이너를 사용하고 있으므로 테스트 데이터베이스가 생성됩니다. 당연히 훌륭합니다.
Dev 데이터베이스용 스키마가 이미 생성되어 있고 Postgres에서 SQL 문을 사용하여 정확한 데이터베이스용 스키마를 생성할 방법이 없기 때문에 테스트가 계속 실패했습니다.
return self.cursor.execute(sql, params)
E django.db.utils.ProgrammingError: relation "core.user" does not exist
E LINE 1: INSERT INTO "core"."user" ("password", "last_login", "public...
별로 흥미롭지 않죠? 여기 내 해결책이 있습니다.
해결책
간단한 해결책은 내
docker-compose.dev.yaml
파일에 테스트 데이터베이스 컨테이너를 추가하는 것입니다. db_test:
container_name: test_optimus_db
image: postgres:14.3-alpine
environment:
DATABASE_NAME: test_optimusdb
DATABASE_USER: test_optimus
DATABASE_PASSWORD: Qinsjhgvv45LJSD
DATABASE_HOST: test_optimus_db
DATABASE_PORT: 5432
POSTGRES_USER: test_optimus
POSTGRES_PASSWORD: Qinsjhgvv45LJSD
POSTGRES_DB: test_optimusdb
volumes:
- postgres_data_test:/var/lib/postgresql/data/
- ./db/db_test_init.sql:/docker-entrypoint-initdb.d/1-init.sql
db_test_init.sql
파일은 다음과 같습니다.GRANT ALL PRIVILEGES ON DATABASE test_optimusdb TO test_optimus;
CREATE SCHEMA IF NOT EXISTS core AUTHORIZATION test_optimus;
CREATE SCHEMA IF NOT EXISTS optimus AUTHORIZATION test_optimus;
init SQL 스크립트가 준비되면 이 함수를
conftest.py
파일 구성에 추가하기만 하면 됩니다.import pytest
from django.conf import settings
@pytest.fixture(scope="session")
def django_db_setup():
settings.DATABASES["default"] = {
"ENGINE": "django.db.backends.postgresql",
"HOST": "test_optimus_db",
"NAME": "test_optimusdb",
"PASSWORD": "Qinsjhgvv45LJSD",
"USER": "test_optimus",
"PORT": 5432,
}
그리고 우리는 끝났습니다. 지금 테스트를 실행하면 통과됩니다.
docker-compose -f docker-compose.dev.yml exec -T web pytest -s -v --traceconfig
그리고 짜잔. 이 솔루션이 작동하고 테스트 환경에 대한 많은 제어 기능을 제공하더라도 저는 여전히 자동화된 솔루션을 찾고 있습니다. 따라서 이미 이 문제에 직면한 적이 있다면 자유롭게 의견을 추가하고 토론해 봅시다.
Reference
이 문제에 관하여(Docker 및 Pytest-Django로 테스트 환경 설정: PostreSQL 스키마 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/koladev/setup-a-testing-environment-with-docker-and-pytest-django-postresql-schema-issue-2ffo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)