sqlite 사용 방법 : 메모리 : UnitTesting 용 Webpy의 데이터베이스
-
12-09-2019 - |
문제
메모리에서 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를 실행하는 경우에만 작동 할 수 있습니다. 여러 프로세스에 따라 요청이 발송되면 각 프로세스는 여전히 자체 데이터베이스를 얻습니다.