2014-07-05 2 views
1

단위 테스트를 실행할 때 Django가 sqlite3 db 파일을 메모리로로드하는 대신 새 데이터베이스를 생성하고 처음부터 스키마를 초기화하는 대신 어떻게합니까?Django unittests 템플릿 Sqlite 데이터베이스 가속화

Django가 각 테스트를로드하는 데 약간의 시간이 걸리는 커다란 JSON 픽스처가 있습니다. 내가 상상하는 해결 방법은 "템플릿"sqlite3 데이터베이스를 생성하고, 모든 스키마와 조명기를로드 한 다음, 모든 조명기 로딩을 우회하여 각 유닛 테스트에이를 단순히 사용하는 것입니다. 필자는 스키마 나 조명기를 변경할 때마다이 템플릿을 업데이트해야하지만, 각 unittest가 실행되는 데 몇 분이 걸리지 않고 몇 초가 걸릴 것이라는 점을 고려하면 허용되는 절충점입니다.

I에 의해, 템플릿 데이터베이스를 생성, 첫 번째 단계를 수행 한 다음 'TEST_NAME'데이터베이스 설정 필드에 DB 파일 이름을 지정 * * 장고는 스키마를 생성 할 수 있도록, 아무것도하지 않는 특정 유닛 테스트를 실행하고 부하 설비 * monkeypatched django.test.running.DiscoverRunner.teardown_databases는 아무것도 할 수 없습니다, 그래서 DB 파일을 검색하고 내 데이터베이스 템플릿으로

를 저장하지만 지금은 장고이를 사용하는 방법에 붙어 있습니다 파일. 파일을 내 TEST_NAME 매개 변수로 유지하면 Django는 파일을 삭제하고 다시 생성하지만 파일 시스템에 계속 쓰면서 메모리 내 Sqlite3 데이터베이스보다 거의 10 배 느려집니다. 당신의 settings.py 파일의 끝에

답변

0

, 추가 : 나는 메모리 sqlite3를 데이터베이스를 사용하는 방법을 묻는 게 아니에요

if 'test' in sys.argv: 
    # If you also want to speed up password hashing in test cases. 
    PASSWORD_HASHERS = (
     'django.contrib.auth.hashers.MD5PasswordHasher', 
    ) 
    # Use SQLite3 for the database engine during testing. 
    DATABASES['default'] = { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': '', # Add the name of your SQLite3 database file here. 
     } 
+0

. 내가 나의 질문에서 언급했듯이, 나는 이미 이것을하고있다. 특정 sqlite3 데이터베이스 파일을 메모리로 복사하는 방법을 묻습니다. – Cerin

+0

이것은 늦었을 수도 있지만 다음을 발견했습니다. https://docs.djangoproject.com/ko/1.6/topics/testing/advanced/#django.test.runner.DiscoverRunner.setup_databases 'setup_databases' 함수를 사용하면 생성 한 데이터베이스를 사용할 수 있습니다. – Nagra

관련 문제