2010-11-28 20 views
6

के साथ परीक्षण डेटा वापस लेना और रोल करना मैं वेब स्वचालन परीक्षणों की एक श्रृंखला तैयार कर रहा हूं जिसके लिए परीक्षण डेटा डेटाबेस (SQL सर्वर 2008) में होना आवश्यक है। प्रत्येक परीक्षण के लिए आवश्यक डेटा जेनरेट करने के लिए मुझे कुछ सी # कोड कॉल करना होगा जो डीबी में सही डेटा डालेगा (यानी मैं डेटा डालने के लिए केवल एसक्यूएल स्क्रिप्ट नहीं लिख सकता)। मेरी समस्या यह है कि मैं इन स्वचालित परीक्षणों से बहुत सारे परीक्षण डेटा के साथ अपने टेस्ट डीबी को प्रदूषित नहीं करना चाहता हूं। तो परीक्षण के दौरान डीबी में किए गए सभी बदलावों को रोलबैक करना चाहते हैं।एसक्यूएल सर्वर

क्या कोई इसे प्राप्त करने का एक समझदार तरीका सुझा सकता है?

उत्तर

5

परीक्षण चलाने से पहले डेटाबेस का बैकअप बनाना सरल तरीका होगा, और उसके बाद बस अंत में पुनर्स्थापित करें।

+0

या यहां तक ​​कि परीक्षण के अंत में पुनर्स्थापना भी करें, ताकि अगली बार परीक्षण डीबी पहले से ही चल रहा हो। हाय टिम, हाय जेम्स! – mcintyre321

+0

जेमी, यह वैसे ही होगा जिस तरह से मैं जाऊंगा। डेटाबेस को 'पूर्ण' रिकवरी मॉडल पर सेट करें। प्रत्येक टेस्ट रन की शुरुआत में एक-एक पूर्ण बैकअप करें, एक अलग बैकअप रन करें, यह बहुत तेज़ होना चाहिए। परीक्षणों के अंत में 'रिकवरी टू पॉइंट इन टाइम' http://msdn.microsoft.com/en-us/library/ms190982.aspx - प्रबंधन स्टूडियो का उपयोग करके आपको स्वचालित करने के लिए आवश्यक स्क्रिप्ट दिखाने के लिए उपयोग करें। –

4

ऐसा करने के दो तरीके।

एक लेनदेन के भीतर अपना परीक्षण संलग्न करना और इसे वापस रोल करना है। दूसरा एक परीक्षण स्क्रिप्ट का उपयोग अपने परीक्षण समापन कोड के हिस्से के रूप में करना है (हम अपने कुछ एकीकरण परीक्षणों के लिए ऐसा करते हैं जहां लेनदेन काम नहीं करता है)।

+0

एक तरफ नोट पर - हम आम तौर पर हमारे एकीकरण परीक्षण के लिए एक विशिष्ट संदर्भ डेटाबेस के साथ काम करते हैं, इसलिए हमारे एकीकरण परीक्षण चलाने से पहले सिस्टम हमेशा एक ज्ञात अच्छी स्थिति में होता है (रोलबैक डेटा के साथ भी)। चीजें बहुत आसान बनाता है। –

2

जब मेरे पास मेरे परीक्षणों के लेन-देन के दायरे पर नियंत्रण नहीं होता है, तो मैं आमतौर पर डेटाबेस को प्रत्येक बार खरोंच से छोड़ देता हूं और फिर से बना देता हूं।

जाहिर है, यह केवल तभी संभव है जब परीक्षण नंगे स्कीमा के खिलाफ चलाया जा सके (या स्क्रिप्ट बनाने में हार्डकोडेड लुकअप मानों के साथ)।

जब मैं बहुत सारे डेटा के साथ प्री-पॉप्युलेट किए गए स्नैपशॉट डेटाबेस के खिलाफ परीक्षण करता हूं, तो मैंने क्लीनअप स्क्रिप्ट का उपयोग करने से पहले, मेरे बेसलाइन स्नैपशॉट की अधिकतम आईडी के ऊपर प्रत्येक तालिका से सभी रिकॉर्ड्स हटाएं।

AdaTheDev के रूप में बैकअप/रोलबैक को स्वचालित करने का प्रयास नहीं किया है, लेकिन यदि आप संभावित रूप से जटिल (और छोटी गाड़ी) क्लीनअप स्क्रिप्ट को बनाए रखना नहीं चाहते हैं तो यह संभवतः आपका सबसे अच्छा विकल्प लगता है (आपके स्नैपशॉट डेटा की जटिलता पर निर्भर करता है/आप कितनी बार अपना स्नैपशॉट बदल सकते हैं और तदनुसार अपने क्लीनअप को संशोधित करना होगा)।

क्या आपने डेटा एक्सेस का मज़ाक उड़ाया है, ताकि आपके वेब परीक्षण मेमोरी डेटा स्टोर में चल सकें? फिर आंतरिक रूप से डेटा एक्सेस प्रक्रियाओं का परीक्षण करें जहां आप अभी भी लेन-देन के दायरे को रोलबैक कर सकते हैं?

1

ऐसा लगता है कि लेनदेन का उपयोग करना मुश्किल होगा, क्योंकि आप एक ही परीक्षण में एकाधिक वेब अनुरोध करने जा रहे हैं - लेकिन यह मेरी पहली वरीयता होगी क्योंकि यह बैकअप से डेटाबेस को पुनर्स्थापित करने से तेज़ है।

आप एसक्यूएल सर्वर का सही संस्करण मिल गया है, तो आप डेटाबेस स्नैपशॉट बजाय बैकअप की इस्तेमाल कर सकते हैं: http://msdn.microsoft.com/en-us/library/ms175876.aspx, बस क्योंकि वे तेजी से :)

2

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

वर्चुअल पुनर्स्थापना http://www.red-gate.com/products/sql_virtual_restore/index.htm पर है और यदि आप इसे आजमाएं तो 14-दिवसीय परीक्षण है।

मुझे लाल गेट के साथ कोई संबद्धता नहीं है, बीटीडब्ल्यू - मैं सिर्फ उनके उपकरणों का उत्साही उपयोगकर्ता हूं।

+0

मेरे लिए स्पष्ट नहीं है MyTestDb पर बैकअप को पुनर्स्थापित करने के बजाय अतिरिक्त मूल्य क्या है? कोई उपकरण आवश्यक नहीं है ... –

0

जाहिर है यह सब इस बात पर निर्भर करता है कि आप परीक्षण कैसे कहते हैं, लेकिन "रोलबैक" विशेषता एमबीयूनीट में काम करेगी?