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

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

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

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

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

\n\n

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

\n\n

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

\n

पारंपरिक मॉक और स्टब अक्सर निर्भरताओं के वास्तविक व्यवहार को प्रतिबिंबित नहीं करते हैं। Docker इस समस्या को हल करता है:

\n
    \n
  • पृथक्करण: प्रत्येक परीक्षण एक साफ कंटेनर में चलता है।
  • \n
  • पुनरुत्पादनीयता: सभी डेवलपर मशीनों और CI में समान वातावरण।
  • \n
  • समानांतरता: एक साथ कई परीक्षण डेटाबेस चलाए जा सकते हैं।
  • \n
\n\n

1. बुनियादी सेटअप: PostgreSQL के साथ परीक्षण

\n

सरल से शुरू करें: PostgreSQL के साथ काम करने वाले फ़ंक्शन का परीक्षण करें। क्रेट testcontainers का उपयोग करें - Docker कंटेनरों के प्रबंधन के लिए Rust रैपर।

\n

Cargo.toml में निर्भरताएँ जोड़ें:

\n
[dev-dependencies]\ntestcontainers = "0.18"\ntokio = { version = "1", features = ["full"] }\nsqlx = { version = "0.8", features = ["runtime-tokio", "postgres"] }\n
\n\n

परीक्षण उदाहरण:

\n
use sqlx::PgPool;\nuse testcontainers::clients::Cli;\nuse testcontainers::images::postgres::Postgres;\n\n#[tokio::test]\nasync fn test_database_connection() {\n    let docker = Cli::default();\n    let postgres_instance = docker.run(Postgres::default());\n    let connection_string = &format!(\n        "postgres://postgres:postgres@127.0.0.1:{}/postgres",\n        postgres_instance.get_host_port_ipv4(5432)\n    );\n\n    let pool = PgPool::connect(connection_string).await.unwrap();\n\n    // SQL क्वेरी निष्पादित करें\n    let row: (i32,) = sqlx::query_as("SELECT 1 + 1")\n        .fetch_one(&pool)\n        .await\n        .unwrap();\n    assert_eq!(row.0, 2);\n}\n
\n

महत्वपूर्ण: परीक्षण पूरा होने के बाद कंटेनर स्वचालित रूप से हटा दिया जाता है (Drop कार्यान्वयन के कारण)।

\n\n

2. उन्नत कॉन्फ़िगरेशन: माइग्रेशन के साथ कस्टम इमेज

\n

अक्सर पहले से माइग्रेशन निष्पादित करने की आवश्यकता होती है। Dockerfile के आधार पर एक कस्टम इमेज बनाएँ:

\n
# Dockerfile.test\nFROM postgres:16-alpine\nCOPY migrations/ /docker-entrypoint-initdb.d/\n
\n\n

Rust परीक्षण में Image का उपयोग करें:

\n
use testcontainers::images::generic::GenericImage;\n\n#[tokio::test]\nasync fn test_with_migrations() {\n    let docker = Cli::default();\n    let image = GenericImage::new("my-app-test:latest")\n        .with_wait_for(testcontainers::core::WaitFor::message_on_stdout(\n            "database system is ready to accept connections"\n        ));\n    let instance = docker.run(image);\n    // ... instance का उपयोग करें\n}\n
\n

CI में इमेज बनाने के लिए docker build -f Dockerfile.test -t my-app-test:latest . का उपयोग किया जा सकता है।

\n\n

3. Docker Compose के साथ समानांतर परीक्षण निष्पादन

\n

यदि आपकी सेवा को कई निर्भरताओं (PostgreSQL + Redis) की आवश्यकता है, तो docker-compose का उपयोग करें। फ़ाइल docker-compose.test.yml बनाएँ:

\n
version: '3.8'\nservices:\n  postgres:\n    image: postgres:16-alpine\n    environment:\n      POSTGRES_PASSWORD: testpass\n    ports:\n      - "5432"\n  redis:\n    image: redis:7-alpine\n    ports:\n      - "6379"\n
\n\n

Rust परीक्षण में Compose वातावरण शुरू करें:

\n
use testcontainers::clients::Cli;\nuse testcontainers::images::compose::Compose;\n\n#[tokio::test]\nasync fn test_with_compose() {\n    let docker = Cli::default();\n    let compose = Compose::new("docker-compose.test.y                

ब्लॉग

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