2009-12-30 10 views
8

चलाने से पहले एसक्यूएल डंप लोड हो रहा है मेरे पास एक जटिल जटिल Django प्रोजेक्ट है जो डेटा लोड करने के लिए फिक्स्चर का उपयोग करना मुश्किल/असंभव बनाता है।Django परीक्षण

मैं क्या करना चाहता हूं कि उत्पादन डेटाबेस सर्वर से डेटाबेस डंप लोड करना है, सभी टेबलों के परीक्षणकर्ता द्वारा बनाए गए परीक्षण के बाद और वास्तविक परीक्षण चलने से पहले।

मैंने MyTestCase.setUp() में विभिन्न "जादू" की कोशिश की है, लेकिन बिना किसी किस्मत के।

किसी भी सुझाव का स्वागत किया जाएगा। धन्यवाद।

+2

अगर मैं गलत लोड हो रहा है एसक्यूएल तेजी से है क्योंकि यह भूमि के ऊपर जुड़नार है कि नहीं है हो सकता है नहीं कर रहा हूँ। मैं इसी समस्या को हल करने के लिए देख रहा हूँ। मेरे पास परीक्षण के लिए लोड करने के लिए एक बड़ा डीबी है और मैं लोडिंग को त्वरित रखना चाहता हूं। – Jeff

+0

मैं सामान्य संबंधों का व्यापक रूप से उपयोग करता हूं जो फिक्स्चर का उपयोग करते समय एक समस्या है। ऐसा प्रतीत होता है कि यह काम में 1.2 की ओर हल हो गया है, http://docs.djangoproject.com/en/dev/topics/serialization/#natural-keys – knutin

+4

देखें यह एक शर्म की बात है कि आप केवल टिप्पणी को वोट दे सकते हैं, नीचे नहीं। वह पहली टिप्पणी बस reeks। – boatcoder

उत्तर

0

आपको कस्टम टेस्ट धावक को परिभाषित करने की आवश्यकता हो सकती है। यहां कुछ जानकारी दी गई है: http://docs.djangoproject.com/en/dev/topics/testing/#using-different-testing-frameworks

असल में मुझे लगता है कि आप सिर्फ डिफ़ॉल्ट परीक्षण धावक को django.test.simple.run_tests से कॉपी कर सकते हैं और फिर अपनी आवश्यकताओं के अनुरूप इसे संशोधित कर सकते हैं।

मैंने पहले यह नहीं किया है, लेकिन मेरी समझ से यह अनुकूलित करने का तरीका होगा।

-1

फिक्स्चर सबसे अच्छा विकल्प हैं। क्या आपने अपने वर्तमान डेटाबेस से एक स्थिरता बनाने के लिए ./manage.py डंपडाटा का उपयोग करने का प्रयास किया है? मैंने जटिल मॉडल पर असफल नहीं देखा है, लेकिन मुझे लगता है कि यह संभव है।

मान लीजिए कि आप mysql का उपयोग कर रहे हैं, तो आप mysqldump का उपयोग करके इसे स्क्रिप्ट करने में सक्षम होना चाहिए।

7

Django जब syncdb कर रही है, रीसेट करें, या एक परीक्षण धावक शुरू कर लोड हो रहा है एसक्यूएल फ़ाइलों का समर्थन करता है - यह वास्तव में करता है कि तुम क्या वर्णन:

http://docs.djangoproject.com/en/dev/howto/initial-data/#providing-initial-sql-data

आपको अपने एप्लिकेशन में एक "एसक्यूएल" निर्देशिका बनाने की जरूरत निर्देशिका, और फिर उस निर्देशिका में "mymodel.sql" नाम की एक फ़ाइल डालें (जहां "MyModel" संबंधित मॉडल नाम है)।

myproject/ 
    |--myapp/ 
     |--sql/ 
      |--mymodel.sql 

आप इस डेटाबेस को अपने डेटाबेस के लिए डंप टूल के साथ बना सकते हैं।

  • SQLite [1]: echo '.dump' | sqlite3 yourdbname.sqlite> MyApp/एसक्यूएल/mymodel.sql
  • MySQL [2]: mysqldump yourdbname> MyApp/एसक्यूएल/mymodel.sql
  • PostgreSQL [3]: pg_dump yourdbname> MyApp/एसक्यूएल/mymodel.sql

डंपिंग के बाद, आपको सब कुछ हटाने के लिए फ़ाइल को संपादित करने की आवश्यकता होगी, लेकिन उपयुक्त INSERT कथन, या अन्य जटिल सामग्री। विशेष रूप से, आपको डुप्लिकेट बनाने कथन लोड करते समय त्रुटियों से बचने के लिए एसक्यूएल बनाने के लिए लेनदेन हैंडलिंग, इंडेक्स बनाने और तालिका को हटा देना होगा।

मैं वास्तव में लोड करने के लिए इस विधि का उपयोग करता हूं, वास्तव में बड़े फिक्स्चर - जेसन को संसाधित करने में बहुत लंबा समय लगता है, लेकिन एक सीधा एसक्यूएल आयात बहुत तेज़ है।

ध्यान रखें कि यह विधि परीक्षण धावक के लिए डेटा लोड करने के अलावा synchdb, रीसेट इत्यादि के किसी भी आमंत्रण के लिए एसक्यूएल लोड करेगी - इसलिए आप विभिन्न परीक्षण मामलों के लिए अलग-अलग डेटा नहीं रख पाएंगे , और यदि आप उन्हें अपने उत्पादन सर्वर पर वापस लोड नहीं करना चाहते हैं तो आपको रीसेट से पहले फ़ाइलों को हटाना होगा।

[1] http://www.sqlite.org/sqlite.html

[2] http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

[3] http://www.postgresql.org/docs/8.1/static/backup.html#BACKUP-DUMP

+11

चूंकि यह उत्तर पोस्ट किया गया था, यह व्यवहार Django में अनुपलब्ध हो गया है। परीक्षण फ्रेमवर्क चलाते समय Django 1.2 अब 'sql /' निर्देशिका में 'sql' फ़ाइलों को अनदेखा करता है। –

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