WireMock Java: HTTP मॉक सर्वर की संपूर्ण मार्गदर्शिका
1. WireMock क्या है और इसकी ज़रूरत क्यों है?
WireMock एक शक्तिशाली Java लाइब्रेरी (और अन्य भाषाओं के लिए standalone सर्वर) है, जो टेस्टिंग के लिए HTTP मॉक सर्वर बनाने में मदद करती है। यह एक वास्तविक HTTP सर्विस (API, REST, SOAP) का इम्यूलेटर है, जिसे आप इस तरह से कॉन्फ़िगर कर सकते हैं कि वह विशिष्ट अनुरोधों पर पूर्व-निर्धारित प्रतिक्रियाएँ लौटाए। यह माइक्रोसर्विसेज आर्किटेक्चर या किसी भी ऐसे सिस्टम के साथ काम करने वाले डेवलपर और टेस्टर के लिए एक अनिवार्य टूल है जो बाहरी HTTP सर्विसेज पर निर्भर करता है।
इसकी ज़रूरत क्यों है? आधुनिक डेवलपमेंट में, एप्लिकेशन शायद ही कभी अलग-थलग होते हैं। वे डेटाबेस, पेमेंट गेटवे, ऑथराइज़ेशन सर्विसेज, मौसम API और दर्जनों अन्य बाहरी सिस्टम से संवाद करते हैं। ऐसे इंटीग्रेशन को "लाइव" टेस्ट करना एक सिरदर्द है: बाहरी सर्विस अनुपलब्ध हो सकती है, धीमी हो सकती है, अप्रत्याशित डेटा लौटा सकती है, या इससे भी बदतर, हर अनुरोध पर पैसे ले सकती है। WireMock इस समस्या को हल करता है:
- अलगाव में टेस्टिंग: आप केवल अपने कोड का परीक्षण करते हैं, बाहरी सर्विसेज की उपलब्धता और स्थिरता पर निर्भर नहीं होते।
- दुर्लभ परिदृश्यों का अनुकरण: मॉक को आसानी से 500 एरर, टाइमआउट, खाली प्रतिक्रियाएँ या विशिष्ट हेडर लौटाने के लिए सेट किया जा सकता है - जो वास्तविक सर्विस के साथ दोहराना मुश्किल है।
- टेस्ट को तेज़ करना: मॉक सर्वर मिलीसेकंड में जवाब देता है, जबकि वास्तविक सर्विस को सेकंड लग सकते हैं।
- डेवलपमेंट को समानांतर करना: जबकि बैकएंड टीम ने अभी तक API लागू नहीं किया है, फ्रंटएंड टीम WireMock का उपयोग करके अपना कोड लिख और टेस्ट कर सकती है।
WireMock एक पूर्ण HTTP सर्वर (Jetty पर आधारित) के रूप में काम करता है, जो आपके टेस्ट के अंदर या एक अलग प्रक्रिया के रूप में चलता है। यह HTTP अनुरोधों को इंटरसेप्ट करता है, उनकी तुलना कॉन्फ़िगर किए गए नियमों (stubs) से करता है, और संबंधित प्रतिक्रिया लौटाता है। लाइब्रेरी रिकॉर्ड और प्लेबैक, स्थिति की जाँच (verify), टेम्पलेट (Handlebars) के साथ काम, विलंब का अनुकरण और बहुत कुछ सपोर्ट करती है।
2. इंस्टॉलेशन (Installation)
Java के लिए WireMock Maven Central के माध्यम से वितरित किया जाता है। अपने pom.xml (Maven के लिए) या build.gradle (Gradle के लिए) में निम्नलिखित डिपेंडेंसी जोड़ें।
Maven (pom.xml):
<dependency>
<groupId>org.wiremock</groupId>
<artifactId>wiremock</artifactId>
<version>3.9.1</version> <!-- Maven Central पर नवीनतम संस्करण जांचें -->
<scope>test</scope>
</dependency>
Gradle (build.gradle):
testImplementation 'org.wiremock:wiremock:3.9.1'
महत्वपूर्ण: संस्करण 3.x से शुरू, WireMock को Java 11 या उससे ऊपर की आवश्यकता है। यदि आप Java 8 का उपयोग कर रहे हैं, तो आपको संस्करण 2.x (जैसे, 2.35.1) का उपयोग करना होगा, लेकिन Java 11+ पर जाने की दृढ़ता से अनुशंसा की जाती है।
3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण
आइए एक सरल टेस्ट बनाएं जो WireMock को शुरू करता है, /api/hello पर GET अनुरोध के लिए एक स्टब सेट करता है, और जाँच करता है कि क्लाइंट को अपेक्षित प्रतिक्रिया मिलती है या नहीं।
import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.WireMock;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
पुस्तकालय में भी
Kotlin WebSocket लाइब्रेरी: Ktor WebSocket क्लाइंट और सर्वर
Prometheus मेट्रिक्स C# (.NET) में: एकीकरण और कॉन्फ़िगरेशन
जावा एप्लिकेशन मॉनिटरिंग: मेट्रिक्स संग्रह के लिए उपकरण और लाइब्रेरीज़
Swagger/OpenAPI जनरेशन Go (Golang) के लिए: पूर्ण गाइड
Go (Golang) में XML के साथ कार्य: encoding/xml पैकेज और विकल्प