Pytest 및 PostgreSQL: 모든 테스트를 위한 새로운 데이터베이스

WBOY
풀어 주다: 2024-08-19 16:43:42
원래의
276명이 탐색했습니다.

Pytest and PostgreSQL: Fresh database for every test

모두가 선호하는 Python 테스트 프레임워크인 Pytest에서 픽스처는 테스트가 시작되기 전에무언가를 정렬하고 종료 후 정리하는 재사용 가능한 코드 조각입니다. 예를 들어 임시 파일이나 폴더, 설정 환경, 웹 서버 시작 등이 있습니다. 이 게시물에서는정리되는 테스트 데이터베이스(비어 있거나 알려진 상태)를 생성하는 Pytest 픽스처를 생성하는 방법을 살펴보겠습니다. , 각 테스트를 완전히 깨끗한 데이터베이스에서 실행할 수 있습니다.

목표

우리는 테스트 데이터베이스를 준비하고 정리하기 위해 Psycopg 3을 사용하여 Pytest 픽스쳐를 생성할 것입니다. 빈 데이터베이스는 테스트에 거의 도움이 되지 않기 때문에 선택적으로 Yoyo 마이그레이션(웹 사이트 작성 시 archive.org 스냅샷으로 이동)을 적용하여 채울 것입니다.

따라서 이 블로그 게시물에서 생성된 test_db라는 Pytest 픽스처에 대한 요구 사항은 다음과 같습니다.

  • 테스트 데이터베이스 삭제테스트 이전에 존재하는 경우
  • 테스트 전에 빈 데이터베이스를 만듭니다
  • 선택적으로테스트 전에 마이그레이션을 적용하거나 테스트 데이터를 생성
  • 테스트 데이터베이스에 대한 연결을 테스트
  • 에 제공합니다.
  • 테스트 데이터베이스 삭제테스트 후(실패한 경우에도)

테스트 메서드 인수를 나열하여 요청하는 모든 테스트 메서드:

으아악

테스트 DB에 연결된 일반 Psycopg Connection 인스턴스를 받게 됩니다. 테스트는 일반 Psycopg 일반적인 사용법과 같이 필요한 모든 작업을 수행할 수 있습니다. 예:

으아악

동기 부여 및 대안
데이터베이스에 의존하는 테스트를 위한 PostgreSQL 고정 장치를 약속하는 일부 Pytest 플러그인이 있는 것 같습니다. 그들은 당신에게 잘 작동할 수도 있습니다.

저는 동일한 결과를 약속하는 pytest-postgresql을 사용해 보았습니다. 나는 내 자신의 픽스처를 작성하기 전에 그것을 시도했지만 나에게 적합하게 만들 수 없었습니다. 어쩌면 그들의 문서가 나에게 매우 혼란스럽기 때문일 수도 있습니다.

또 다른 pytest-dbt-postgres는 전혀 시도하지 않았습니다.


프로젝트 파일 레이아웃

클래식 Python 프로젝트에서 소스는 src/에 있고 테스트는 test/에 있습니다.

으아악

환상적인 Yoyo와 같은 마이그레이션 라이브러리를 사용하는 경우 마이그레이션 스크립트가 migrations/:
에 있을 가능성이 높습니다.

으아악

구성

테스트 DB 고정 장치에는 약간의 구성이 필요합니다.

  • 연결 URL- (데이터베이스 없음)
  • 테스트 데이터베이스 이름- 모든 테스트마다 다시 생성됩니다
  • (선택 사항)migrations 폴더- 모든 테스트에 적용할 마이그레이션 스크립트

Pytest에는 여러 파일에 걸쳐 픽스쳐를 공유하기 위한 자연스러운 장소인 conftest.py가 있습니다. 고정 장치 구성도 거기에 적용됩니다:

으아악

이러한 값은 환경 변수 또는 귀하의 사례에 맞게 설정할 수 있습니다.

test_db 고정 장치 생성

PostgreSQL 및 Psycopg 라이브러리에 대한 지식을 바탕으로 conftest.py에 픽스쳐를 작성하세요.

으아악

마이그레이션 픽스쳐 생성

우리의 경우에는Yoyo 마이그레이션을 사용합니다. Apply migration을 yoyo라는 또 다른 Fixture로 작성하세요.

으아악

모든 테스트 데이터베이스에 마이그레이션을 적용하려면 test_db 고정 장치에 yoyo 고정 장치가 필요합니다.

으아악

일부 테스트에만 마이그레이션을 적용하려면, 개별적으로 yoyo를 요구하세요.

으아악

결론

테스트에 깨끗한 데이터베이스를 제공하기 위해 자체 픽스처를 구축하는 것은 Pytest와 Postgres에 대해 더 깊이 탐구할 수 있는 보람 있는 경험이었습니다.

이 기사가 귀하의 데이터베이스 테스트 스위트에 도움이 되었기를 바랍니다. 궁금한 점을 댓글로 남겨주시면 행복한 코딩이 될 것입니다!

위 내용은 Pytest 및 PostgreSQL: 모든 테스트를 위한 새로운 데이터베이스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!