Docker के साथ Go का एकीकरण परीक्षण: उन्नत स्तर

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

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

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

Docker के साथ Go का एकीकरण परीक्षण: उन्नत स्तर

\n\n

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

\n\n

Go में एकीकरण परीक्षणों के लिए Docker क्यों महत्वपूर्ण है?

\n

मॉक और स्टब (mocks/stubs) वाला पारंपरिक दृष्टिकोण केवल आपके कोड के तर्क की जाँच करता है, न कि वास्तविक DBMS या ब्रोकर के साथ संयोजन में व्यवहार की। Docker इस समस्या का समाधान करता है:

\n
    \n
  • पर्यावरण की पुनरुत्पादकता: परीक्षण स्थानीय और CI/CD में समान परिस्थितियों में चलते हैं।
  • \n
  • पृथक्करण: प्रत्येक परीक्षण सेट की अपनी सेवा का उदाहरण हो सकता है।
  • \n
  • कोई "जादू" नहीं: आप ठीक उसी ड्राइवर/क्लाइंट का परीक्षण कर रहे हैं जिसका उपयोग आप production में करते हैं।
  • \n
\n

हालाँकि, os/exec या शेल स्क्रिप्ट के माध्यम से कंटेनरों का मैन्युअल प्रबंधन जल्दी ही अस्थिर हो जाता है। testcontainers-go जैसी लाइब्रेरीज़ बचाव में आती हैं।

\n\n

Go के लिए Testcontainers लाइब्रेरी: स्थापना और बुनियादी उदाहरण

\n

testcontainers-go एक Go रैपर है जो प्रोग्रामेटिक रूप से Docker कंटेनरों के जीवनचक्र का प्रबंधन करता है। यह स्वचालित रूप से इमेज डाउनलोड करता है, चलाता है, तैयार होने की प्रतीक्षा करता है और परीक्षण के बाद कंटेनरों को साफ करता है।

\n\n

स्थापना

\n
go get github.com/testcontainers/testcontainers-go\ngo get github.com/testcontainers/testcontainers-go/modules/postgres
\n\n

बुनियादी उदाहरण: PostgreSQL के साथ परीक्षण

\n
package integration\n\nimport (\n    "context"\n    "database/sql"\n    "testing"\n    "time"\n\n    "github.com/testcontainers/testcontainers-go"\n    "github.com/testcontainers/testcontainers-go/modules/postgres"\n    "github.com/testcontainers/testcontainers-go/wait"\n    _ "github.com/lib/pq"\n)\n\nfunc TestPostgresConnection(t *testing.T) {\n    ctx := context.Background()\n\n    // 1. PostgreSQL कंटेनर चलाएँ\n    pgContainer, err := postgres.RunContainer(ctx,\n        testcontainers.WithImage("postgres:15"),\n        postgres.WithDatabase("testdb"),\n        postgres.WithUsername("user"),\n        postgres.WithPassword("password"),\n        testcontainers.WithWaitStrategy(\n            wait.ForLog("database system is ready to accept connections").\n                WithOccurrence(2).\n                WithStartupTimeout(30*time.Second)),\n    )\n    if err != nil {\n        t.Fatal(err)\n    }\n    defer pgContainer.Terminate(ctx) // स्वचालित सफाई\n\n    // 2. कनेक्शन स्ट्रिंग प्राप्त करें\n    connStr, err := pgContainer.ConnectionString(ctx, "sslmode=disable")\n    if err != nil {\n        t.Fatal(err)\n    }\n\n    // 3. कनेक्ट करें और क्वेरी निष्पादित करें\n    db, err := sql.Open("postgres", connStr)\n    if err != nil {\n        t.Fatal(err)\n    }\n    defer db.Close()\n\n    if err := db.Ping(); err != nil {\n        t.Fatal("डेटाबेस से कनेक्ट करने में विफल:", err)\n    }\n\n    // जाँचें कि हम एक तालिका बना सकते हैं और डेटा सम्मिलित कर सकते हैं\n    _, err = db.Exec(`CREATE TABLE IF NOT EXISTS users (id SERIAL PRIMARY KEY, name TEXT)`)\n    if err != nil {\n        t.Fatal(err)\n    }\n    t.Log("PostgreSQL के साथ एकीकरण परीक्षण सफलतापूर्वक पूर्ण हुआ!")\n}
\n\n

उन्नत तकनीकें: समानांतर निष्पादन और कस्टम प्रतीक्षाएँ

\n

जब कई परीक्षण होते हैं, तो प्रत्येक परीक्षण के लिए कंटेनरों का क्रमिक रन चलाना धीमा हो जाता है। हम Go की समानांतरता और साझा कंटेनरों का उपयोग करते हैं।

\n\n

साझा कंटेनर के साथ समानांतर परीक्षण

\n

TestMain के माध्यम से पूरे पैकेज के लिए एक कंटेनर बनाएँ:

\n
package integrat                

ब्लॉग

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