문제

메모리에서 sqlite를 사용하고 싶습니다 ( ": memory :") db는 웹 app의 테스트를 위해 DB를 사용하고 싶습니다. 테스트에 noSetests를 사용하고 Webpy를 프레임 워크로 사용하고 있습니다.

Setup () 함수에서 DB를 채우고 모든 테스트를 실행하고 싶습니다. 내 문제는 Webpy가 각 요청 후 모든 열린 DB 연결을 닫고 SQLITE : MEMARY : DB는 연결을 닫을 때까지 지속되므로 첫 번째 테스트 만 실제로 실행되고 다른 모든 것이 실패합니다.

내 선택은 디스크 후원 DB에서 테스트를 실행하거나 각 개별 테스트의 시작 부분에서 메모리에서 전체 DB를 재현하는 것입니다.

각 요청 후 Webpy가 DB 연결을 닫지 못하게하는 방법을 알고 있습니까? Webpy를 사용하여 하나 이상의 요청에 대해 지속되는 메모리 SQLITE DB를 얻는 다른 방법을 생각할 수 있습니까?

도움이 되었습니까?

해결책

어쩌면 디스크에 저장된 DB에서 테스트를 실행할 수는 있지만 램 디스크. Windows에서는 드라이버를 설치하여 RAM 디스크를 설정할 수 있습니다 (여기에 몇 가지 지침이 있습니다). Linux에서는 당신이 설정하고 싶다고 생각합니다. TMPFS.

RAM 디스크는 하드 디스크와 똑같이 작용하지만 메모리에서 완전히 작동하므로 하드 디스크에 파일을로드하는 오버 헤드를 잃게됩니다.

다른 팁

테스트되지 않은 :

class NoCloseDB(web.db.SqliteDB):
  def _unload_context(self):
    pass # this keeps the _ctx.db attribute alive
web.db.register_database('sqlite',NoCloseDB) # overrides the previous registration

하나의 운영 체제 프로세스 만 사용하는 방식으로 web.py를 실행하는 경우에만 작동 할 수 있습니다. 여러 프로세스에 따라 요청이 발송되면 각 프로세스는 여전히 자체 데이터베이스를 얻습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top