Docker के साथ Rust का एकीकरण परीक्षण: पूर्ण गाइड

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

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

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

Docker के साथ Rust का एकीकरण परीक्षण: सिद्धांत से व्यवहार तक



Rust में आधुनिक विकास के लिए न केवल अलग-अलग फ़ंक्शन (यूनिट टेस्ट) की जाँच की आवश्यकता होती है, बल्कि बाहरी सेवाओं — डेटाबेस, कैश, API के साथ घटकों की परस्पर क्रिया का परीक्षण भी आवश्यक है। Docker के साथ एकीकरण परीक्षण आपको वातावरण को अलग करने, पुनरुत्पादन की गारंटी देने और "मेरी मशीन पर काम करता है" समस्या से बचने की अनुमति देता है। इस लेख में, हम Docker का उपयोग करके Rust अनुप्रयोगों के लिए एकीकरण परीक्षण सेट अप करने का तरीका समझेंगे।



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

Docker तीन मुख्य समस्याओं का समाधान करता है:

  • वातावरण का अलगाव — परीक्षण एक साफ कंटेनर में चलते हैं, स्थानीय सेटिंग्स के प्रभाव के बिना
  • पुनरुत्पादन — सभी डेवलपर मशीनों और CI/CD में समान स्थितियाँ
  • निर्भरता प्रबंधन — PostgreSQL, Redis, Kafka और अन्य सेवाओं का स्वचालित प्रारंभ


प्रोजेक्ट सेट अप: संरचना और निर्भरताएँ

हम PostgreSQL के साथ काम करने वाले Actix-web पर वेब सर्वर के लिए एकीकरण परीक्षणों के साथ एक प्रोजेक्ट बनाएंगे।



# Cargo.toml[package]name = "rust-docker-testing"version = "0.1.0"edition = "2021"

[dependencies]actix-web = "4"serde = { version = "1", features = ["derive"] }tokio = { version = "1", features = ["full"] }sqlx = { version = "0.7", features = ["runtime-tokio", "postgres"] }dotenv = "0.15"

[dev-dependencies]testcontainers = "0.14"reqwest = { version = "0.11", features = ["json"] }


testcontainers पर ध्यान दें — यह परीक्षणों से सीधे Docker कंटेनरों को प्रबंधित करने के लिए Rust लाइब्रेरी है।



प्रोजेक्ट संरचना

एकीकरण परीक्षणों के लिए अनुशंसित संरचना:

.├── src/│   ├── main.rs│   ├── lib.rs│   ├── models.rs│   └── handlers.rs├── tests/│   ├── common/│   │   └── mod.rs          # परीक्षणों के लिए सामान्य उपयोगिताएँ│   ├── integration_tests.rs # मुख्य एकीकरण परीक्षण│   └── docker-compose.yml  # मैन्युअल प्रारंभ के लिए├── Dockerfile└── .env


चरण 1: Docker के साथ एकीकरण परीक्षण लिखना

हम एक परीक्षण बनाएंगे जो Docker में PostgreSQL को ऊपर उठाता है, माइग्रेशन चलाता है और API की जाँच करता है।



// tests/integration_tests.rsuse testcontainers::clients;use testcontainers::images::postgres::Postgres;use sqlx::postgres::PgPoolOptions;use std::net::TcpListener;

async fn setup_test_db() -> (String, testcontainers::Container) { let docker = clients::Cli::default(); let postgres_image = Postgres::default(); let container = docker.run(postgres_image); let host = container.get_host().unwrap(); let port = container.get_host_port_ipv4(5432).unwrap(); let database_url = format!("postgres://postgres:postgres@{}:{}/postgres", host, port); // माइग्रेशन निष्पादित करें let pool = PgPoolOptions::new() .max_connections(5) .connect(&database_url) .await .expect("Failed to connect to Postgres"); sqlx::query("CREATE TABLE IF NOT EXISTS users (id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL)") .execute(&pool) .await .expect("Migration failed"); (database_url, container)}

#[tokio::test]async fn test_create_user() { let (db_url, _container) = setup_test_db().await; // एप्लिकेशन को रैंडम पोर्ट पर चलाएँ let listener = TcpListener::bind("127.0.0.1:0").unwrap(); let port = listener.local_addr().unwrap().port(); let server = actix_web::HttpServer::new(move || { actix_web::App::new() .app_data(actix_web::web::Data::new(db_url.clone())) .route("/users", actix_web::web::post().to(handlers::create_user)) }) .listen(listener) .unwrap() .run(); tokio::spawn(server); // सर्वर के शुरू होने की प्रतीक्षा करें tokio::ti

ब्लॉग

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