2016-10-17 6 views
5

हम जेडॉस पर तैनात ईएआर के साथ PostgreSQL का उपयोग कर रहे हैं। निर्माण प्रक्रिया के दौरान हमारे पास एक विकास डेटाबेस डंप है जिसका उपयोग तब एकीकरण परीक्षण में किया जाता है: विशेष आर्टिफैक्ट तैनात किया जाता है और http क्लाइंट का उपयोग करके ऐप के साथ संचार का परीक्षण करता है।डॉकर का उपयोग कर एकीकरण परीक्षण के बाद डेटाबेस स्थिति को पुनर्स्थापित करें?

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

क्या डीबी का स्नैपशॉट बनाने का कोई तरीका है ताकि उचित परीक्षण के साथ प्रत्येक परीक्षण चलाने के बाद इसे पुनर्स्थापित किया जा सके? डॉकर मदद कर सकता है? या किसी अन्य तरीके से चारों ओर?

एच 2 रास्ता नहीं है, क्योंकि हम कुछ PostgreSQL- विशिष्ट विशेषताओं का उपयोग करते हैं। टेस्ट कई लेन-देन कर सकते हैं, इसलिए मुझे लगता है कि रोलबैक या तो मदद नहीं करेगा।

उत्तर

2

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

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

+0

मैं सिर्फ कंटेनर में रखा निर्देशिका का उपयोग करने के डोकर बात कर सकता हूँ ताकि मेरे postgres अभी भी यह वह जगह है जहाँ परियोजना फ़ोल्डर में डंप? – Valya

+0

मैं सिर्फ एक अवधारणा के रूप में डॉकर से परिचित हूं, इसलिए मुझे आशा है कि आप कुछ चीजों को स्पष्ट करेंगे। क्या मैं डॉकर को मेमोरी में कंटेनर की फाइल सिस्टम में किए गए परिवर्तनों को स्टोर करने के लिए मजबूर कर सकता हूं, इसलिए मैं प्रत्येक परीक्षण से पहले सचमुच एक सहेजे गए राज्य में वापस आ सकता हूं और जल्दी से ऐसा कर सकता हूं? – Valya

1

एक विकल्प प्रत्येक एकीकरण परीक्षण पूरा होने के बाद डेटा को फिर से बीज करना है। SpringSqlScriptsTestExecutionListener और @Sql एनोटेशन के माध्यम से ऐसी सुविधा प्रदान करता है। मुझे पता है कि आपने EAR और JBoss का उल्लेख किया है, इसलिए यदि Spring का उपयोग नहीं किया जा रहा है, तो मेरा मानना ​​है कि Arquillian कुछ इसी तरह की पेशकश कर सकता है।

यदि डीबी पुन: बीजिंग एकीकरण परीक्षण के लिए उपयोग किए जाने वाले डेटा की मात्रा के कारण एक महंगा संचालन बन जाता है, तो दूसरा विकल्प Docker छवि का उपयोग डीबी और बीजित डेटा पहले से ही शामिल किया जाएगा। प्रत्येक एकीकरण परीक्षण निष्पादित होने से पहले DB with data कंटेनर शुरू करने की आवश्यकता होगी और इसे पूरा करने के बाद बंद कर दिया जाएगा, दूसरे शब्दों में, आपको एकीकरण परीक्षण की अवधि के लिए कंटेनर जीवन चक्र का प्रबंधन करने की आवश्यकता होगी। मैंने कुछ महीनों पहले इसे पूरा करने के बारे में ब्लॉग किया: Integration Testing using Spring Boot, Postgres and Docker, फिर से, Spring Boot का उपयोग करके, लेकिन विचार किसी अन्य ढांचे के साथ उपयोग करने के लिए मान्य होंगे। इसमें आयातित डेटा के साथ Docker छवियां बनाने, मौजूदा स्कीमा से JPA इकाइयां उत्पन्न करने, प्रत्येक परीक्षण निष्पादित होने से पहले और बाद में कंटेनर को शुरू/बंद करने के लिए एकीकरण टेस्ट के लिए समर्थन जोड़ना शामिल है, और इसे प्रति परीक्षण एक से अधिक कंटेनर शुरू करने के लिए आसानी से बढ़ाया जा सकता है या Docker कंटेनर को मेजबान यादृच्छिक बंदरगाह पर मैप किया गया है, इसलिए उन्हें एक साथ निष्पादित करने के लिए।

इस बिंदु पर यह एक समझौता है, डेटा को फिर से बीज के खर्च पर एक परीक्षण राज्य (आईएमएचओ, सही दृष्टिकोण) से प्रत्येक परीक्षण शुरू करना या प्रत्येक व्यक्तिगत परीक्षण के लिए कंटेनर शुरू/बंद करना या निश्चित रूप से परीक्षण चलाएं ऑर्डर करें और टेस्ट सूट निष्पादित होने से पहले डेटा को फिर से बीज करें।

0

आप प्रारंभिक डेटाबेस क्लोन करके और परीक्षण के बाद नव निर्मित परीक्षण डेटाबेस को छोड़कर ऐसा कर सकते हैं। "टेम्पलेट" के रूप में मूल डेटाबेस का उपयोग करते समय यह शायद मिलीसेकंड लेगा।

// FIXTURES // Create "initial_database" before all tests are run and load fixtures etc.

// TEST SETUP BEFORE EACH TEST CREATE DATABASE some_test_database_name TEMPLATE "initial_database";

// TEST TEARDOWN AFTER EACH TEST DROP DATABASE some_test_database_name;

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