डॉकर के साथ जावा एकीकरण परीक्षण: एक संपूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

डॉकर के साथ जावा अनुप्रयोगों का एकीकरण परीक्षण



आधुनिक जावा विकास गुणवत्तापूर्ण परीक्षण के बिना अकल्पनीय है। हालाँकि, यूनिट परीक्षण अक्सर वास्तविक डेटाबेस, मैसेज क्यू या बाहरी API के साथ घटकों की परस्पर क्रिया के दौरान उत्पन्न होने वाली समस्याओं का पता लगाने में असमर्थ होते हैं। यहीं पर एकीकरण परीक्षण काम आता है, और डॉकर इस प्रक्रिया को सरल, पुनरुत्पादनीय और पृथक बनाता है। इस लेख में, हम Testcontainers लाइब्रेरी और Docker Compose का उपयोग करके जावा अनुप्रयोगों के एकीकरण परीक्षण के लिए डॉकर का प्रभावी ढंग से उपयोग करने का तरीका समझेंगे।



डॉकर एकीकरण परीक्षण में खेल के नियम क्यों बदलता है?



एकीकरण परीक्षण के पारंपरिक दृष्टिकोण में अक्सर डेवलपर की स्थानीय मशीन या CI सर्वर पर सभी निर्भरताओं (डेटाबेस, मैसेज ब्रोकर) को स्थापित और कॉन्फ़िगर करने की आवश्यकता होती है। इससे कई समस्याएँ उत्पन्न होती हैं:



  • वातावरण की अस्थिरता: DBMS के विभिन्न संस्करण, पोर्ट विरोध, विकास और उत्पादन वातावरण के बीच अंतर।
  • CI/CD सेटअप की जटिलता: पाइपलाइन में मैन्युअल रूप से सेवाओं को स्थापित और कॉन्फ़िगर करने की आवश्यकता।
  • डेटा संदूषण: परीक्षण डेटा स्थानीय डेटाबेस में रह सकता है, जो बाद के रन को प्रभावित करता है।
  • समानांतरीकरण: एक ही मशीन पर परीक्षणों का एक साथ चलना विरोध का कारण बन सकता है।


डॉकर हल्के, पृथक और क्षणिक कंटेनर प्रदान करके इन समस्याओं का समाधान करता है। प्रत्येक परीक्षण (या परीक्षणों का सेट) PostgreSQL, Redis या Kafka का अपना इंस्टेंस चला सकता है, और परीक्षण पूरा होने के बाद उसे नष्ट कर सकता है। यह परिणामों की शुद्धता और पुनरावृत्ति सुनिश्चित करता है।



प्रोजेक्ट सेटअप: Testcontainers बनाम Docker Compose



जावा परीक्षणों में डॉकर को एकीकृत करने के दो मुख्य दृष्टिकोण हैं। आइए दोनों पर विचार करें।



1. Testcontainers: कोड से कंटेनर प्रबंधित करने के लिए लाइब्रेरी



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



लाभ:

  • प्रोग्रामेटिक नियंत्रण: कंटेनर स्वचालित रूप से शुरू और बंद होते हैं।
  • लोकप्रिय सेवाओं के लिए "आउट-ऑफ-द-बॉक्स" समर्थन (GenericContainer, PostgreSQLContainer, KafkaContainer और अन्य)।
  • स्वचालित रूप से मुक्त पोर्ट का चयन (विरोध से बचाव)।
  • मॉड्यूलर एकीकरण परीक्षणों के लिए आदर्श।


उदाहरण: PostgreSQL के साथ REST-नियंत्रक का परीक्षण



अपने pom.xml (Maven) में निर्भरता जोड़ें:



<dependency>    <groupId>org.testcontainers</groupId>    <artifactId>testcontainers</artifactId>    <version>1.19.3</version>    <scope>test</scope></dependency><dependency>    <groupId>org.testcontainers</groupId>    <artifactId>postgresql</artifactId>    <version>1.19.3</version>    <scope>test</scope></dependency>


अब PostgreSQL के साथ काम करने वाले स्प्रिंग बूट एप्लिकेशन के लिए एक परीक्षण लिखते हैं:



import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.boot.test.web.client.TestRestTemplate;import org.springframework.http.ResponseEntity;import org.testcontainers.containers.PostgreSQLContainer;import org.testcontainers.junit.jupiter.Container;import org.testcontainers.junit.jupiter.Testcontainers;

import static org.junit.jupiter.api.Assertions.assertEquals;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnviron

ब्लॉग

पुस्तक अनुशंसाएँ