Docker के साथ Go का एकीकरण परीक्षण: चरण-दर-चरण मार्गदर्शिका

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

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

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

Docker के साथ Go का एकीकरण परीक्षण: पूर्ण मार्गदर्शिका



एकीकरण परीक्षण विश्वसनीय Go अनुप्रयोगों के विकास में एक महत्वपूर्ण चरण है। यूनिट परीक्षणों के विपरीत, एकीकरण परीक्षण घटकों की परस्पर क्रिया की जाँच करते हैं: डेटाबेस, कैश, बाहरी API। Docker परीक्षण वातावरण को अलग करने की अनुमति देता है, जिससे परीक्षण प्रतिलिपि प्रस्तुत करने योग्य और होस्ट मशीन से स्वतंत्र हो जाते हैं। इस लेख में, हम सीखेंगे कि Docker के साथ Go अनुप्रयोगों का एकीकरण परीक्षण कैसे सेट अप करें - सरल कंटेनरों से लेकर Testcontainers और CI/CD के साथ उन्नत परिदृश्यों तक।



1. Go के एकीकरण परीक्षण के लिए Docker क्यों?



Go अनुप्रयोग अक्सर PostgreSQL, Redis, MongoDB या अन्य सेवाओं के साथ काम करते हैं। प्रत्येक डेवलपर मशीन और CI सर्वर पर इन निर्भरताओं को मैन्युअल रूप से सेट करना त्रुटियों का मार्ग है। Docker इस समस्या को हल करता है:

  • प्रतिलिपि प्रस्तुतीकरण — स्थानीय और CI में समान वातावरण।
  • अलगाव — परीक्षण होस्ट सिस्टम को दूषित नहीं करते।
  • गति — कंटेनर सेकंड में शुरू हो जाते हैं।
  • समानांतरता — एक साथ कई पृथक परीक्षण चलाए जा सकते हैं।


एक बुनियादी उदाहरण पर विचार करें: एक फ़ंक्शन का परीक्षण करना जो PostgreSQL में डेटा सहेजता है।



2. Docker Compose के साथ परीक्षण वातावरण सेट करना



परीक्षण डेटाबेस के लिए docker-compose.test.yml बनाएँ:



version: '3.8'services:  postgres_test:    image: postgres:16-alpine    environment:      POSTGRES_USER: test      POSTGRES_PASSWORD: test      POSTGRES_DB: testdb    ports:      - "5433:5432"  # स्थानीय DB में हस्तक्षेप से बचने के लिए गैर-मानक पोर्ट का उपयोग करें    tmpfs: /var/lib/postgresql/data  # गति के लिए मेमोरी में डेटा


Go परीक्षण में, हम os/exec के माध्यम से कंटेनर शुरू करते हैं या testcontainers-go लाइब्रेरी का उपयोग करते हैं। हम दोनों दृष्टिकोण दिखाएंगे।



2.1. परीक्षण से मैन्युअल Docker Compose लॉन्च



// main_test.gopackage main

import ( "context" "fmt" "os/exec" "testing" "time")

func setupTestDB(t *testing.T) string { t.Helper() // कंटेनर शुरू करें cmd := exec.Command("docker-compose", "-f", "docker-compose.test.yml", "up", "-d") if err := cmd.Run(); err != nil { t.Fatalf("docker-compose शुरू करने में विफल: %v", err) } // PostgreSQL के तैयार होने की प्रतीक्षा करें time.Sleep(3 * time.Second) return "postgres://test:test@localhost:5433/testdb?sslmode=disable"}

func TestSaveUser(t *testing.T) { dsn := setupTestDB(t) db, err := sql.Open("postgres", dsn) if err != nil { t.Fatal(err) } defer db.Close() // ... परीक्षण कोड}


कमियाँ: मैन्युअल sleep, समानांतर परीक्षणों में जटिलता। Testcontainers का उपयोग करना बेहतर है।



2.2. Go के लिए Testcontainers



लाइब्रेरी स्थापित करें:

go get github.com/testcontainers/testcontainers-go


स्वचालित कंटेनर प्रबंधन के साथ उदाहरण:



// repository_test.gopackage repository

import ( "context" "testing" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/wait" "github.com/jackc/pgx/v5/pgxpool")

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

// PostgreSQL कंटेनर का अनुरोध करें req := testcontainers.ContainerRequest{ Image: "postgres:16-alpine", ExposedPorts: []string{"5432/tcp"}, Env: map[string]string{ "POSTGRES_USER": "test", "POSTGRES_PASSWORD": "test", "POSTGRES_DB": "testdb", }, WaitingFor: wait.ForLog("database system is ready to accept connections"), }

postgres, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ ContainerRequest: req

ब्लॉग

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