2012-05-16 5 views
9

मैं रूबी 3.2.2, फैक्टरीगर्ल 3.1.0, फैक्ट्रीगर्लरेल 3.1.0, रुपेक 2.9.0 और रुपेक्रेल 2.9.0 पर रूबी का उपयोग कर रहा हूं। मेरे आवेदन का परीक्षण करने के लिए मुझे डेटाबेस में बहुत सारे रिकॉर्ड (लगभग 5000) बनाना है, लेकिन यह ऑपरेशन बहुत धीमा है (रिकॉर्ड बनाने में 10 मिनट से अधिक समय लगता है)। मैं इस तरह आगे बढ़ता हूं:मैं अपने आरएसपीईसी परीक्षणों के लिए 5,000 रिकॉर्ड बनाने की गति कैसे बढ़ा सकता हूं?

before(:each) do 
    5000.times do 
    FactoryGirl.create(:article,) 
    end 
end 

मैं अपने स्पेक कोड को कैसे सुधार सकता हूं ताकि तेजी से जा सके?

नोट: हो सकता है सुस्ती (5) लेख कॉलबैक कि पहले चलाने के लिए और प्रत्येक लेख बनाने की प्रक्रिया के बाद, लेकिन मैं उन को छोड़ सकते हैं द्वारा दिया जाता है (केवल बातें मैं परीक्षण करने के लिए है के बाद से लेख और संबद्ध नहीं मॉडल हैं) अगर वे रिकॉर्ड्स के धीमे सृजन करते हैं ... क्या यह बनाना संभव है और क्या यह आगे बढ़ने का सही तरीका है?

उत्तर

0

मैं परीक्षण में कोई विशेषज्ञ नहीं हूं, लेकिन मुझे लगता है कि फैक्ट्रीगर्ल का यह उपयोग नहीं होना चाहिए। यह केवल कुछ रिकॉर्ड बनाना चाहिए।

सोचें कि क्या आपको वास्तव में परीक्षण के लिए बहुत से रिकॉर्ड की आवश्यकता है, यदि आप करते हैं, तो क्या उन्हें प्रत्येक परीक्षण से पहले "रीसेट" किया जाना चाहिए? (हाँ, आप प्रत्येक परीक्षण से पहले उन्हें बना रहे हैं, इसलिए आप वास्तव में 5000 * number_of_tests रिकॉर्ड बना रहे हैं)। कच्ची एसक्यूएल स्क्रिप्ट एक विकल्प नहीं है? तो जब आपका टेस्ट डीबी बनाया जाता है तो ये सभी रिकॉर्ड भी बन जाते हैं।

2

जब आप इस तरह के रिकॉर्ड की बड़ी संख्या को संसाधित करना शुरू करते हैं, तो इसे सक्रिय रूप से ActiveRecord ओवरहेड से बचने के लिए एसक्यूएल में करना बेहतर होता है जिसकी आपको आवश्यकता नहीं है।
मैं एक स्क्रिप्ट लिखना चाहता हूं या आपके एसक्यूएल कार्यान्वयन पर इस निर्भरता को करने के लिए संग्रहीत प्रक्रिया तैयार करना चाहता हूं। यह कुछ सेकंड में खत्म होने की संभावना है।

+0

+1। या बस डीबी को एक टेक्स्ट फ़ाइल में डंप करें और इसे आवश्यकतानुसार पुनः लोड करें। –

0

जैसा कि अन्य ने उल्लेख किया है, कारखानों को उच्च मात्रा नहीं माना जाता है। किसी भी उचित इकाई परीक्षण के लिए 5,000 रिकॉर्ड क्यों चाहिए?

यह कहा गया है कि धीमी गति के कारण का हिस्सा यह है कि #create प्रत्येक रिकॉर्ड को डेटाबेस के निर्माण के बाद सहेजता है। आप शायद फैक्टरीगर्ल.बिल्ड का उपयोग करना चाहते हैं; Using Factories देखें।

बेशक, आप मेमोरी-बाध्य प्रक्रिया के लिए I/O- बाध्य प्रक्रिया का व्यापार करने जा रहे हैं। यदि आप वास्तव में जो चाहते हैं वह नहीं है, तो #build का उपयोग करने पर विचार करें ताकि प्रत्येक व्यक्तिगत परीक्षण करने के लिए पर्याप्त रिकॉर्ड्स को तुरंत चालू किया जा सके या थोक लोड के लिए अनुकूलित fixture file का उपयोग किया जा सके।

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

  • कोई संबंधित समस्या नहीं^_^