testcontainers-go गाइड: Go में Docker टेस्टिंग का पूरा ट्यूटोरियल

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

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

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

testcontainers-go: Go में Docker के साथ टेस्टिंग

आधुनिक सॉफ्टवेयर डेवलपमेंट में, बाहरी सर्विसेज (डेटाबेस, मैसेज ब्रोकर, कैश) के साथ इंटीग्रेशन टेस्टिंग सबसे चुनौतीपूर्ण कामों में से एक है। पारंपरिक तरीके जैसे कि साझा टेस्ट डेटाबेस या मॉक का उपयोग अक्सर समस्याएँ पैदा करता है: टेस्ट नाजुक हो जाते हैं, एनवायरनमेंट पर निर्भर होते हैं, या सिस्टम के वास्तविक व्यवहार को नहीं दिखाते। testcontainers-go लाइब्रेरी एक सुंदर समाधान प्रदान करती है: यह आपको Go टेस्ट कोड से सीधे अलग-थलग Docker कंटेनर चलाने की अनुमति देती है, जिससे हर टेस्ट रन के लिए एक साफ, दोहराने योग्य और प्रोडक्शन के करीब का वातावरण मिलता है।

testcontainers-go का मुख्य विचार Docker कंटेनरों के जीवनचक्र को प्रोग्रामेटिक रूप से प्रबंधित करना है। आप टेस्ट कोड में आवश्यक सर्विस (जैसे PostgreSQL, Redis, Kafka) का वर्णन करते हैं, लाइब्रेरी स्वचालित रूप से इमेज डाउनलोड करती है (यदि नहीं है), कंटेनर शुरू करती है, उसके तैयार होने की प्रतीक्षा करती है, और आपको कनेक्शन पैरामीटर (होस्ट, पोर्ट, क्रेडेंशियल) प्रदान करती है। टेस्ट पूरा होने के बाद, कंटेनर स्वचालित रूप से बंद और हटा दिया जाता है, सिस्टम पर कोई कचरा नहीं छोड़ता। यह टेस्ट को स्वतंत्र, तेज़ और सुरक्षित बनाता है।

testcontainers-go लोकप्रिय Testcontainers प्रोजेक्ट का Go कार्यान्वयन है, जो मूल रूप से Java में शुरू हुआ और बाद में अन्य भाषाओं में पोर्ट किया गया। यह लाइब्रेरी समुदाय द्वारा सक्रिय रूप से समर्थित है और अधिकांश लोकप्रिय सर्विसेज के लिए तैयार मॉड्यूल प्रदान करती है: PostgreSQL, MySQL, Redis, MongoDB, Kafka, RabbitMQ, Elasticsearch और कई अन्य। यह इंटीग्रेशन टेस्ट, एंड-टू-एंड टेस्ट और यहाँ तक कि लोकल डेवलपमेंट के लिए भी आदर्श है, जब आपको जल्दी से एनवायरनमेंट सेट करना हो।

स्थापना (Installation)

testcontainers-go को स्थापित करने के लिए मानक Go पैकेज मैनेजर का उपयोग करें। सुनिश्चित करें कि आपके पास Docker (या Podman) और Go संस्करण 1.19 या उच्चतर स्थापित है।

go get github.com/testcontainers/testcontainers-go

विशिष्ट सर्विसेज (जैसे PostgreSQL) के साथ काम करने के लिए, संबंधित मॉड्यूल स्थापित करना होगा:

go get github.com/testcontainers/testcontainers-go/modules/postgres
go get github.com/testcontainers/testcontainers-go/modules/redis
go get github.com/testcontainers/testcontainers-go/modules/mongodb
go get github.com/testcontainers/testcontainers-go/modules/kafka
# और अन्य

स्थापना के बाद, अपनी टेस्ट फ़ाइल में पैकेजों को इम्पोर्ट करें:

import (
    "context"
    "testing"
    
    "github.com/testcontainers/testcontainers-go"
    "github.com/testcontainers/testcontainers-go/wait"
    "github.com/testcontainers/testcontainers-go/modules/postgres"
)

त्वरित शुरुआत: न्यूनतम कार्यशील उदाहरण

आइए एक सरल टेस्ट लिखें जो PostgreSQL कंटेनर शुरू करता है, एक टेबल बनाता है, डेटा डालता है और उसकी जाँच करता है। यह आपको लाइब्रेरी के साथ काम करने के मूल सिद्धांत दिखाएगा।

package main

import (
    "context"
    "database/sql"
    "testing"
    "time"

    "github.com/testcontainers/testcontainers-go"
    "github.com/testcontainers/testcontainers-go/modules/postgres"
    "github.com/testcontainers/testcontainers-go/wait"
    _ "github.com/lib/pq" // PostgreSQL ड्राइवर
)

func TestPostgresIntegration(t *testing.T) {
    ctx := context.Background()

    // 1. PostgreSQL कंटेनर शुरू करें
    postgresContainer, err := postgres.RunContainer(ctx,
        testcontainers.WithImage("postgres:16-alpine"),
        postgres.WithDatabase("testdb"),
        postgres.WithUsername("testuser"),
        postgres.WithPassword("testpass"),
        testcontainers.WithWaitStrategy(
            wait.ForLog("database system is ready to accept connections").
                WithOccurrence(2).
                WithStartupTimeout(60*time.Second)),
    )
    if err != nil {
        t.Fatal(err)
    }
    defer postgres                    

अनुशंसाएँ