2010-03-04 3 views
0

Django에서 데이터베이스를 설정 한 경우 어떻게 TestRunner에 '라이브'데이터베이스를 사용할 수 있습니까? DATABASE_ * 설정은 settings.py에 있습니다.) 임시 데이터베이스에서 실행하는 대신.Django의 'manage.py test'를 사용하면서 settings.py의 'live'데이터베이스에 대한 단위 테스트 수행

예를 들어, 나는 settings.py에 지정된 년대 live 데이터베이스에서 다음 테스트를 실행하고 싶습니다 : 현재

import unittest 

from example import models 

class DBDriverTest(unittest.TestCase): 
    db testDriver(self): 
     "Connect to the live database and drop in sample value." 
     m = models.MyModel('hello') 
     m.save() # ... save to the live database from settings.py 

위의 코드 만 구성되어있어 테스트 데이터베이스에 저장합니다. 이것은 응용 프로그램이 데이터베이스에서 작동하는 여러 개의 병렬 프로세스를 가지고 있기 때문에 매우 제한적입니다. 그리고 유닛 테스트는 '실제'데이터베이스로 물을 퍼 올릴 수없고 잠자 지 않은 곳에서 볼 수있는 기능이 없으면 불완전한 (그리고 비 일관적인) 테스트가 될 것입니다. 내가 생각할 수있는

두 가지 가능성이 옵션은 다음과 같습니다 장고 API를 통해

  1. 플러그 '수동'낮은 확인 settings.py

  2. 에서 데이터베이스에 연결하는 방법을 알아 내기 위해 수동으로 '라이브'데이터베이스에 -level 연결은 장고의 공개 API 아래 것들에 의존 할 것입니다 있기 때문에

선행이 문제가 웁니다. 후자는 데이터베이스에 무관 한 Django 데이터베이스 API를 앞 지르고 더 수동적으로 집중하기 때문에 문제가됩니다.

귀하의 생각과 의견에 감사드립니다.

브라이언

답변

2

당신은 모든 테스트가 단독으로 실행되는 데이터베이스마다 실행 후 취소되어 있기 때문에, 자신의 test_runnertearDown 방법을 정의해야합니다. 당신은 당신이 할 수있는 것, 단지 당신 자신의 test_runner을 구축함으로써 우리가 한 것을 할 수 있습니다. (우리 팀이 아니었지만) 웹 서비스에 의해 액세스 된 데이터베이스로 한 번 해보았습니다. 방법은 거기에서 아무것도 삭제하지만 수동으로 전체 데이터베이스를 삭제하려면 ;-) 이것은 꽤 재미있었습니다.

질문에 답변 : 자신 만의 test_runner을 만들고 자신이 만든 개체 만 삭제하는 tearDown 메서드를 만들 준비를하십시오. 아무래도 거기에 primary keys을 저장해야하므로 라이브 데이터베이스에서 아무 것도 삭제하지 않습니다.

, 나는 이것이 좋은 방법이라고 생각하지 않습니다. 실제 데이터베이스에서 테스트를 실행하면 재난이 발생하는지 직접 확인해야합니다. 조만간 당신은이 문제에 곤경에 처하게 될 것입니다. 대신 수행해야 할 일은 실제 데이터베이스를 덤프하고이 데이터에서 fixtures을 준비하고 테스트에 사용하는 것입니다. 이것은 잘 문서화되어 있으며 쉽게 수행됩니다. 이렇게하면 귀중한 데이터를 위험에 빠뜨리지 않고 라이브 환경을 구축 할 수 있으며 직접 test_runner을 작성할 필요가 없습니다. 이것은 내 생각에 들어가기에 가장 안전하고 안전한 방법입니다.

+0

감사합니다. Gruszczy. 나는'test_runner'를 생성하는 것이 일반적으로 최선의 방법이 아니라는 것에 동의하지만 우리의 경우는 표준과 다소 다릅니다. 첫째, 데이터는 약 5 분 후에 관련성이 없습니다. 두 번째로, 데이터베이스는 삽입을 위해 (Django에 의해) (데몬에 의해) 폴링됩니다. 디먼이 특정 데이터를 한 행에 표시하면 해당 행이 변경 될 수 있습니다. 단위 테스트가 (1) 삽입이 적절하고 (2) 데몬이 올바르게 작동하는지 테스트하도록합니다.불행하게도, 조명기는 데몬이 단위 테스트 데이터베이스에 접근하는 것을 허용하는 방법의 문제를 해결하지 못합니다. 그러나 사용자 정의 test_runner가 문제를 해결해야합니다! –

+0

와우! 데이터는 5 분 후에 관련이 없습니까? 매우 실용적이고 시원하게 들리는 이유는 무엇입니까? – gruszczy

+0

작동하는 경우 여기에 게시하겠습니다. : O) 나 zdrowie! –