2011-01-05 3 views
13

기존 테스트 데이터베이스를 사용하여 테스트를 실행하고 Django에서 테스트를 실행할 때마다 데이터베이스를 만들고 삭제할 수 없도록하고 싶습니다. 이것이 가능한가?장고 테스트가 매번 빌드하는 대신 장고 테스트에 사용할 데이터베이스를 지정하려면 어떻게합니까?

+0

왜 그렇게하고 싶습니까? 또한 데이터베이스 생성을 테스트하고 싶습니다 ... –

+6

빌드하는 데 몇 시간이 걸릴 때가 아닙니다. –

+0

테스트를 위해 다른 DB 엔진을 선택할 수 있습니다 (sqlite는 DB 생성이 더 빠름) –

답변

14

그것은 여기에, 가능 방법입니다 :

1) 자신의 테스트 러너는 방식을 볼 수 here 보일 정의합니다. default test runner에서 사용자 정의 테스트 러너보기 위해

2), 그냥 복사 코드 과거와 단지이 줄을 주석 처리 할 수 ​​있습니다 테스트 데이터베이스를 파괴 할 책임이 connection.creation.destroy_test_db(old_name, verbosity)을, 그리고 난 당신의 connection.creation.create_test_db(..) 줄을 추가해야한다고 생각 이 어쩌면 같은 것을 제외하고 시도 :

try: 
    # Create the database the first time. 
    connection.creation.create_test_db(verbosity, autoclobber=not interactive) 
except ..: # Look at the error that this will raise when create a database that already exist 
    # Test database already created. 
    pass 

3) 테스트 러너에 setting.py에 TEST_RUNNER 바운드.

4) 이제이 같은 테스트 실행 ./manage.py 테스트

+0

그래도 괜찮아 보이지만 로컬 테스트 db에 연결을 설정해야합니다. –

+0

@Ryan Detzel : 나는 방금 테스트가 실행되는 처음 만들 때 테스트 데이터베이스 위의 코드로 생각하는 귀하의 질문에 대한 자세한 내용은 내 대답을 편집 네,이 테스트 데이터베이스는 장고에 의해 원자 적으로 만들어집니다 여기보세요 : http://docs.djangoproject.com/en/dev/topics/testing/?from=olddocs#the-test-database – mouad

+0

@mouad, 조명기를로드하거나 플러시하지 않도록 구성 할 수 있습니까? –

6

사용하는 장고> = 테스트 실행 사이의 테스트 데이터베이스를 유지합니다 --keepdb 1.8

python manage.py test --keepdb 

. 이렇게하면 작성 및 삭제 작업을 건너 뛰는 장점이 있습니다. 특히 대규모 테스트 스위트에서 테스트를 실행할 시간을 크게 단축 할 수 있습니다. 테스트 데이터베이스가 존재하지 않으면 첫 번째 실행시 작성되고 이후의 각 실행마다 보존됩니다. 적용되지 않은 마이그레이션은 테스트 스위트를 실행하기 전에 테스트 데이터베이스에도 적용됩니다.

+0

어떻게 Django 1.6을 위해 ?? 어떤 비슷한 방법이 있습니까 ??? –