2011-06-06 14 views
14

मुझे परीक्षण डेटाबेस सेटअप व्यवहार को अनुकूलित करने में कठिनाई हो रही है। मैं निम्नलिखित प्राप्त करने के लिए करना चाहते हैं:Django परीक्षण मौजूदा डेटाबेस का उपयोग करने के लिए

  • परीक्षण स्वीट एक मौजूदा डेटाबेस का उपयोग करने की आवश्यकता है
  • टेस्ट स्वीट मिटाने या पुन: डेटाबेस बजाय एक mysql डंप से डेटा लोड
  • के बाद से नहीं करना चाहिए डाटाबेस एक डंप से पॉप्युलेट होता है कोई जुड़नार
  • लोड किया जाना चाहिए परिष्करण परीक्षण करने पर डेटाबेस

मैं एक कठिन समय बाईपास निर्माण के लिए testsuiterunner हो रही हो रही है नष्ट नहीं किया जाना चाहिए।

+0

यदि आप एक एसक्यूएल डंप से डेटा लोड कर रहे हैं तो मौजूदा डेटाबेस का उपयोग किस तरीके से कर रहे हैं? मैं डंप लोड करने, फिक्स्चर बनाने और पारंपरिक परीक्षण दृष्टिकोण का उपयोग करने का सुझाव दूंगा। – shanyu

+2

डंप से बहुत सारे डेटा और लोडिंग फिक्स्चर – pyeleven

+0

से लोड होने से तेज़ है, इसलिए यह मौजूदा डेटाबेस का उपयोग करने के बारे में नहीं है। क्या आप 100% सुनिश्चित हैं कि आपको पूर्ण डेटा का उपयोग करके परीक्षण करने की आवश्यकता है? परीक्षण के लिए नमूना पर्याप्त हो सकता है? – shanyu

उत्तर

0

आपको एक कस्टम टेस्ट धावक प्रदान करने की आवश्यकता होगी।

डिफ़ॉल्ट django.test.runner.DiscoverRunner के साथ ओवरराइड करने में आपकी रूचि DiscoverRunner.setup_databases और DiscoverRunner.teardown_databases विधियां हैं। ये दो विधियां परीक्षण डेटाबेस बनाने और नष्ट करने में शामिल हैं और केवल एक बार निष्पादित की जाती हैं। आप परीक्षण-विशिष्ट परियोजना सेटिंग्स प्रदान करना चाहेंगे जो डिफ़ॉल्ट रूप से आपके मौजूदा परीक्षण डेटाबेस का उपयोग करें और इन्हें ओवरराइड करें ताकि डंप डेटा लोड हो और परीक्षण डेटाबेस नष्ट न हो।

डंप के आकार और सामग्रियों के आधार पर, एक सुरक्षित शर्त केवल एक उपप्रोसेसर बनाने के लिए हो सकती है जो आपके डेटाबेस के SQL कमांड-लाइन इंटरफ़ेस को डंप पाइप करेगी, अन्यथा आप कर्सर और execute queries directly प्राप्त कर पाएंगे।

अपने पूरी तरह से स्थिरता लोड हो रहा है से छुटकारा पाने के लिए देख रहे हैं, तो आप एक कस्टम आधार परीक्षण का मामला है कि TestCase._fixutre_setup और TestCase._fixutre_teardown तरीकों NOOP होने के लिए ओवरराइड साथ Django के डिफ़ॉल्ट django.test.testcases.TestCase फैली प्रदान कर सकते हैं।

कैविट एम्प्टर: यह धावक आपके आवेदन के स्रोतों के अलावा किसी भी चीज़ के परीक्षणों को सुविधाजनक बनाना असंभव कर देगा। अपने मौजूदा डेटाबेस से कनेक्शन के लिए एक विशिष्ट उपनाम बनाने और डंप लोड करने के लिए रनर को कस्टमाइज़ करना संभव है, फिर एक कस्टम टेस्ट केस प्रदान करें जो TestCase._database_names को इसके उपनाम को इंगित करने के लिए ओवरराइड करता है।

3

यह TEST_RUNNER Django 1,3

from django.test.simple import DjangoTestSuiteRunner as TestRunner 

class DjangoTestSuiteRunner(TestRunner): 
    def setup_databases(self, **kwargs): 
     pass 

    def teardown_databases(self, old_config, **kwargs): 
     pass 
2

2016 को फास्ट आगे और बनाए रखने के लिए परीक्षण के बीच डेटाबेस Django में बनाया गया है की क्षमता में काम करता है। यह --keep flag के रूप में manage.py

Django 1.8 में नया है। परीक्षण रनों के बीच परीक्षण डेटाबेस को संरक्षित करता है। यह दोनों को बनाने और नष्ट करने के लिए को छोड़ने का लाभ है जो परीक्षण चलाने के लिए समय कम कर सकता है, खासकर में एक बड़े परीक्षण सूट में। यदि परीक्षण डेटाबेस मौजूद नहीं है, तो यह पहले रन पर बनाए गए होगा और फिर प्रत्येक बाद के रन के लिए संरक्षित होगा। किसी भी अनुपयुक्त माइग्रेशन परीक्षण सूट चलाने से पहले परीक्षण डेटाबेस पर भी लागू किया जाएगा।

यह आपके प्रश्नों में उल्लिखित सभी मानदंडों को पूरा करता है। वास्तव में यह एक कदम आगे भी चला जाता है। प्रत्येक रन से पहले डंप आयात करने की कोई आवश्यकता नहीं है।

संबंधित मुद्दे