2017-01-28 2 views
0

SQLAlchemy, Alembic 및 Pytest를 테스트 용으로 사용하는 ORM 앱이 있습니다. 필자의 테스트에서 필자는 데이터베이스를 조명기로 사용했다. 이전에는 마이그레이션을 사용하기 전에 모든 테이블을 삭제하고 각 테스트 세션마다 테이블을 다시 만들었다. 내가 마이그레이션을 사용하고 이제Alembic을 사용하여 SQLAlchemy 앱을 테스트하고 있습니까?

, 나는 내가

한 가지 방법이있다 할 (좋은 이론적 근거는?인가요)을 모방 더 밀접하게 생산 환경을 제공합니다. 있다고 생각하기 때문에 너무 내 비품을 만드는 증류기를 사용하려면 매번 upgrade()까지 downgrade()까지 줄이십시오. 나는 이것을 정말로 좋아하지 않는다. 내가 틀렸을지도 모른다.

또 다른

단위 테스트에 대한 drop_all()create_all()에, 그리고 단지 스탬프 머리 데이터베이스를하고 upgradedowngrade을 테스트 또 다른 테스트를 작성합니다.

drop_tables을 사용할 필요가 없으므로 설비/설비와 마이그레이션을 통합하는 또 다른 좋은 표준 방법이 있습니까?

또는 방법이 있습니까 drop_tables "꼬리"또는 빈으로 스탬프? 명시 적으로 리비전 0의 마이 그 레이션 해시를 사용하지 않고, 그 결과가 alembic downgrade -1과 같은 의존성을 생성하므로 0 년으로 돌아갑니다. 감사합니다.

답변

1

매번 임시 데이터베이스 인스턴스를 시작할 것을 권장합니다. 또는 testing.postgresql입니다. 이 방법의 장점은 매번 새로운 것을 시작할 수 있다는 것입니다. 시험의 성공 여부는 외부 요인에 좌우되지 않습니다. 단점은 인스턴스를 시작하는 데 필요한 몇 초가 걸린다는 점입니다.

기존 데이터베이스 인스턴스 사용을 주장하는 경우, 앞에서 말한 것처럼 create_all() + alembic stamp head을 사용할 수 있습니다. 그러나 drop_all()을 수행하는 대신 PostgreSQL의 경우 전체 데이터베이스 (또는 스키마)를 삭제하고 다시 만드십시오.

drop_all()을 사용하고 싶다면 alembic_version 테이블을 삭제하면 현재 버전이 "꼬리"임을 알렘에게 알릴 수 있습니다.

+0

감사합니다. 'testing.psql'의 문제점은 psql이 temp 인스턴스를 시작하고, 내 환경이 컨테이너 화되었고, 내 db가 다른 컨테이너에 있고, orm 컨테이너에 psql이 없다는 것이 었습니다. 나는 그것으로 pg를 끌어 들이고 싶지 않았기 때문에 꼬리를 찍어 버렸다. – plumSemPy

+0

나중에 참조 할 것 :'alembic downgrade base' http://alembic.zzzcomputing.com/en/latest/tutorial.html#downgrading – plumSemPy