क्या मुझे डॉकर छवि में परीक्षण शामिल करना चाहिए?


19

जब परीक्षणों की बात आती है, तो मैं दो विकल्पों के बारे में सोच सकता हूं:

  1. टेस्ट और एप्लिकेशन दोनों को एक इमेज में रखें।
  2. छवि में केवल एप्लिकेशन कोड शामिल करें। एक परीक्षण-विशिष्ट कंटेनर बनाएं जो मुख्य छवि के बाद बनाता है और इसमें कुछ परतें जोड़ता है (परीक्षण कोड, निर्भरता आदि)।

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

दूसरे विकल्प के साथ, जिस छवि को भेज दिया गया है वह परीक्षण के समान नहीं है।

दोनों बुरी रणनीति की तरह दिखते हैं। क्या कोई तीसरी, बेहतर रणनीति है?


1
आपने मूल रूप से खुद को जवाब दिया। दोनों बुरे विचार हैं। आप पहले से ही परीक्षण योग्य प्रक्रियाओं को एक कंटेनर आकार में शिप करेंगे और आवश्यकताओं के अनुसार अनुकूलित करेंगे। आप देव-निर्भरता नहीं चाहते हैं और न ही src कोड। उत्पादन में इसका जोखिम माना जाता है।
लैवि

1
कंटेनरीकरण से पहले परीक्षण का मतलब है कि पर्यावरण का परीक्षण नहीं किया गया है, केवल कोड है। आपने जो कुछ भी शिपिंग किया है, उसके केवल एक हिस्से का परीक्षण किया होगा, यह सब नहीं।
lfk

जवाबों:


10

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

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


1
तो यह बहुत ज्यादा विकल्प 2 है - मैं एक ऐसे वातावरण / कंटेनर में परीक्षण चलाता हूं जो उत्पादन के समान है, लेकिन काफी समान नहीं है। क्या वह सही है?
lfk

9

एक तीसरा तरीका है, जैसा कि आपने खुद कहा। मुझे लगता है कि आप विकास, परीक्षण और तैनाती को मिला रहे हैं। मेरा प्रस्ताव है कि पूरे एसडीएलसी को एक पूरे के रूप में देखा जाए, सबसे पहले, यह समझने के लिए कि आप इसे हासिल करने की कोशिश कर रहे हैं। यह एक बड़ा विषय है, लेकिन मैं संक्षेप में बताने की पूरी कोशिश करूंगा।

टी एल; डॉ;

संक्षेप में, आपको अलग करने की आवश्यकता है:

  • आपका कोड, से
  • अनुप्रयोग कॉन्फ़िगरेशन, से
  • सिस्टम पर्यावरण कॉन्फ़िगरेशन।

प्रत्येक को एक-दूसरे से स्वतंत्र और उपयुक्त होना चाहिए:

  • संस्करण नियंत्रित किया गया
  • परीक्षण किया
  • परिनियोजन योग्य

लंबा संस्करण

सबसे पहले, आपके पास कोड और (अलग सेट) कॉन्फ़िगरेशन से बना एक एप्लिकेशन है। इसे बनाने और जानबूझकर कार्य करने के लिए परीक्षण करने की आवश्यकता है - इसे निरंतर एकीकरण (CI) कहा जाता है। इस सेवा के कई प्रदाता ऑनलाइन और स्थानीय दोनों हैं - उदाहरण के लिए सर्किलसी एक क्लाउड प्रदाता के लिए जो आपके रिपॉजिटरी से लिंक करता है और जब भी आप निर्माण करता है और परीक्षण करता है। यदि आपकी रिपॉजिटरी ऑन-प्रिमाइसेस है और क्लाउड प्रदाता का उपयोग नहीं कर सकती है, तो जेनकिन्स जैसी कुछएक समकक्ष होगा। यदि आपका एप्लिकेशन काफी मानक है, तो संभवतः एक मौजूदा डॉकर छवि है जिसे CI सेवा उपयोग कर सकती है। यदि नहीं, तो आपको एक, या ऐसा क्लस्टर बनाना होगा, जिसमें आपके एप्लिकेशन कोड और कॉन्फ़िगरेशन को तैनात किया जा सके। सही तरीके से कॉन्फ़िगर किया गया है, आपके पास अपने एप्लिकेशन कोड की गुणवत्ता पर आंकड़ों का खजाना होगा।

अगला, एक बार जब आप अपने एप्लिकेशन की कार्यक्षमता और शुद्धता से संतुष्ट हो जाते हैं, तो कोडबेस को विशिष्ट रिलीज के लिए उपयुक्त रूप से टैग किया जाना चाहिए। इस बिल्ड को तब एक परीक्षण वातावरण में तैनात किया जाना चाहिए। ध्यान दें कि कोड आपके CI में परीक्षण के समान होगा (यदि आप सही तरीके से ऐसा कर चुके हैं तो), लेकिन आपका कॉन्फ़िगरेशन भिन्न हो सकता है। फिर से कुछ CI प्रदाता इस कदम की पेशकश कर सकते हैं ताकि आप एक पैकेज्ड एप्लिकेशन और असतत कॉन्फ़िगरेशन की अपनी तैनाती का परीक्षण कर सकें। इस चरण में आम तौर पर उपयोगकर्ता कार्यात्मक परीक्षण (नई कार्यक्षमता के लिए), साथ ही स्वचालित परीक्षण (ज्ञात कार्यक्षमता के लिए) शामिल होंगे। यदि रिलीज़ इस चरण से गुजरता है, तो आपके पास एकीकरण परीक्षण के लिए एक रिलीज़ उम्मीदवार है। आप दूसरे डॉकटर कंटेनर से स्वचालन परीक्षण चला सकते हैं,कुछ मेट्रिक्स जो राज्य परीक्षण का प्रयास 1: 1 से कोडिंग प्रयास है (हालांकि मैं खुद इस पर अनिश्चित हूं)।

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

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


इसका मतलब यह है कि आपके सीआई आपके डॉकफाइल्स का परीक्षण बिल्कुल नहीं करेंगे? उदाहरण के लिए, यदि आपकी डॉकरफाइल एक निर्भरता याद कर रही थी, तो परीक्षण अभी भी पास होंगे?
lfk

1
हर्गिज नहीं। पहले कोड का परीक्षण करें, फिर एप्लिकेशन कॉन्फिग का परीक्षण करें, फिर सिस्टम का परीक्षण करें। मैं जो कह रहा हूं वह यह है कि ये असतत गतिविधियां हैं। कंटेनरीकरण के बारे में महान बात यह है कि एक पर्यावरण में विकास का सपना जो ठेस के समान है, बहुत करीब है। लेकिन सख्त होने से विकास भी मुश्किल हो जाएगा।
avastmick

0

मुझे लगता है कि आप विभिन्न प्रकार के परीक्षणों का मिश्रण कर रहे हैं। मूल रूप से आपको खुद से पूछने की जरूरत है: यहां परीक्षण के तहत इकाई क्या है?

जब आप एक डेवलपर के रूप में काम कर रहे हैं तो सबसे आम परिदृश्य यूनिट के कुछ टुकड़े के लिए यूनिट / एकीकरण परीक्षण लिखना है, जहां आप उस कोड का टुकड़ा परीक्षण के तहत इकाई है। आप उन परीक्षणों को स्थानीय स्तर पर और / या CI में चलाते हैं।

जब आपने एक नई डॉकटर छवि बनाई है, तो यह एक नई इकाई बन जाती है जिसे आप परीक्षण कर सकते हैं। इस छवि के लिए आप किस प्रकार की चीजों का परीक्षण करना चाहेंगे? यह क्या एपीआई प्रदान कर रहा है? आप उसे कैसे परखेंगे?

यदि यह एक वेब एप्लिकेशन है, तो आप छवि के आधार पर एक कंटेनर शुरू कर सकते हैं और कुछ HTTP अनुरोध कर सकते हैं और जांच सकते हैं कि प्रतिक्रियाएं वही हैं जो आप अपेक्षा करते हैं। मुझे लगता है कि आप जो समस्या अनुभव कर रहे हैं, वह यह है कि आप परीक्षण कोड के लिए बहुत उपयोग किए जा रहे हैं, जिसे एप्लिकेशन कोड में जोड़ा जा रहा है। यह विकास के दौरान ठीक है, लेकिन अब आप एक डॉकटर छवि का परीक्षण करना चाहते हैं और इसलिए आपको एक नए प्रकार के परीक्षण ढांचे की आवश्यकता है जो ऐसा कर सकता है और आवेदन कोड से बंधा नहीं है।

इसलिए मुझे लगता है कि आप जिस 3 विकल्प की तलाश कर रहे हैं वह है:

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

तो CI / CD चरण होंगे:

सेटअप विकास पर्यावरण -> कोड पर परीक्षण चलाएं -> अंतिम छवि बनाएं -> छवि पर परीक्षण चलाएं -> छवि को तैनात करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.