एकीकरण परीक्षण वास्तविक अनुरोध करके और वास्तविक प्रतिक्रियाओं की जाँच करके सत्यापित करें कि आपके एपीआई के टुकड़े – मार्ग, डेटाबेस और व्यावसायिक तर्क – एक साथ सही ढंग से काम करते हैं। यूनिट परीक्षणों (जो हर चीज़ का मज़ाक उड़ाते हैं) के विपरीत, एकीकरण परीक्षण सीमाओं पर बग पकड़ते हैं। यह मार्गदर्शिका बताती है कि उन्हें अच्छे से कैसे लिखा जाए।
📋 Table of Contents
यूनिट बनाम एकीकरण परीक्षण
| पहलू | यूनिट टेस्ट | एकीकरण परीक्षण |
|---|---|---|
| दायरा | अलगाव में एक कार्य | एक साथ अनेक भाग (मार्ग + DB) |
| निर्भरताएँ | मज़ाक उड़ाया गया | वास्तविक (या परीक्षण) डेटाबेस |
| गति | बहुत तेज़ | धीमा (वास्तविक I/O) |
| कैच | तर्क बग | एकीकरण/वायरिंग बग |
आप दोनों चाहते हैं – तर्क के लिए इकाई परीक्षण, संपूर्ण अनुरोध-प्रतिक्रिया प्रवाह कार्यों को सत्यापित करने के लिए एकीकरण परीक्षण।
Node.js: सुपरटेस्ट के साथ परीक्षण
npm install --save-dev jest supertest
// Export your app WITHOUT calling listen() so tests can use it
// app.js
const express = require('express');
const app = express();
app.use(express.json());
app.get('/users/:id', getUser);
app.post('/users', createUser);
module.exports = app; // export the app
// server.js (separate) starts it
const app = require('./app');
app.listen(3000);
// users.test.js
const request = require('supertest');
const app = require('./app');
const db = require('./db');
describe('Users API', () => {
beforeEach(async () => {
await db.reset(); // clean database before each test
});
afterAll(async () => {
await db.close();
});
it('creates a user', async () => {
const res = await request(app)
.post('/users')
.send({ name: 'Alice', email: 'alice@example.com' });
expect(res.status).toBe(201);
expect(res.body).toMatchObject({ name: 'Alice' });
expect(res.body.id).toBeDefined();
});
it('returns 404 for missing user', async () => {
const res = await request(app).get('/users/999');
expect(res.status).toBe(404);
});
it('validates required fields', async () => {
const res = await request(app).post('/users').send({});
expect(res.status).toBe(400);
expect(res.body.error).toBeDefined();
});
});
पायथन: पाइटेस्ट और टेस्टक्लाइंट के साथ परीक्षण
pip install pytest httpx
# test_users.py (FastAPI example)
import pytest
from fastapi.testclient import TestClient
from app.main import app
from app.database import get_test_db
client = TestClient(app)
@pytest.fixture(autouse=True)
def reset_db():
db = get_test_db()
db.reset()
yield
db.close()
def test_create_user():
response = client.post("/users", json={
"name": "Alice", "email": "alice@example.com"
})
assert response.status_code == 201
data = response.json()
assert data["name"] == "Alice"
assert "id" in data
def test_get_missing_user():
response = client.get("/users/999")
assert response.status_code == 404
def test_validation_error():
response = client.post("/users", json={})
assert response.status_code == 422
टेस्ट डेटाबेस का उपयोग करना
एकीकरण परीक्षणों के लिए एक वास्तविक (परीक्षण) डेटाबेस की आवश्यकता होती है – विकास और उत्पादन से अलग:
# Spin up a test database with Docker
docker run -d --name test-db -p 5433:5432 \
-e POSTGRES_DB=testdb -e POSTGRES_PASSWORD=test \
postgres:15-alpine
# Point tests at it via environment
DATABASE_URL=postgresql://postgres:test@localhost:5433/testdb
// Fast reset using transactions (rollback after each test)
beforeEach(async () => {
await db.query('BEGIN');
});
afterEach(async () => {
await db.query('ROLLBACK'); // undo all changes — fast and clean
});
प्रमाणित समापन बिंदुओं का परीक्षण
describe('Protected routes', () => {
let token;
beforeAll(async () => {
const res = await request(app)
.post('/login')
.send({ email: 'test@example.com', password: 'password' });
token = res.body.accessToken;
});
it('allows access with valid token', async () => {
const res = await request(app)
.get('/protected')
.set('Authorization', `Bearer ${token}`);
expect(res.status).toBe(200);
});
it('rejects without token', async () => {
const res = await request(app).get('/protected');
expect(res.status).toBe(401);
});
});
सीआई में एकीकरण परीक्षण चलाना
# GitHub Actions with a service database
jobs:
test:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:15
env:
POSTGRES_DB: testdb
POSTGRES_PASSWORD: test
ports: ['5432:5432']
options: --health-cmd pg_isready --health-interval 10s
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '20' }
- run: npm ci
- run: npm run test:integration
env:
DATABASE_URL: postgresql://postgres:test@localhost:5432/testdb
सर्वोत्तम अभ्यास
- पृथक परीक्षण: प्रत्येक परीक्षण स्वतंत्र होना चाहिए – परीक्षणों के बीच डेटाबेस को रीसेट करें
- अनुबंध का परीक्षण करें: स्थिति कोड, प्रतिक्रिया आकार और त्रुटि मामलों को सत्यापित करें
- त्रुटि पथ कवर करें: 400, 401, 404 और सत्यापन विफलताओं का परीक्षण करें, न कि केवल सुखद पथ
- वास्तविक परीक्षण डेटाबेस का उपयोग करें: एकीकरण परीक्षणों में डेटाबेस का मज़ाक न उड़ाएँ
- उन्हें यथोचित तेज़ रखें: ट्रांजेक्शन रोलबैक ट्रंकेटिंग टेबल की तुलना में तेज़ है
- सीआई में चलाएँ: एकीकरण परीक्षण वायरिंग बग पकड़ते हैं जो यूनिट परीक्षण में छूट जाते हैं
अक्सर पूछे जाने वाले प्रश्न
प्रश्न: क्या मुझे एकीकरण परीक्षणों में डेटाबेस का अनुकरण करना चाहिए?
उत्तर: नहीं – मुद्दा डेटाबेस सहित वास्तविक इंटरैक्शन की पुष्टि करना है। एक अलग परीक्षण डेटाबेस का उपयोग करें. इसका मज़ाक उड़ाने से यह एक इकाई परीक्षण में बदल जाता है और वे एकीकरण बग छूट जाते हैं जिन्हें आप पकड़ने का प्रयास कर रहे हैं।
प्रश्न: मैं एकीकरण परीक्षणों को तेज़ कैसे रखूँ?
उ: तालिकाओं को छोटा करने/पुनः बनाने के बजाय परीक्षणों के बीच लेनदेन रोलबैक का उपयोग करें। जहां अलगाव की अनुमति हो वहां समानांतर में परीक्षण चलाएं। कंटेनरीकृत डेटाबेस का उपयोग करें और इसे छोटा रखें।
प्रश्न: मुझे कितने एकीकरण परीक्षणों की आवश्यकता है?
ए: प्रत्येक समापन बिंदु के महत्वपूर्ण पथों को कवर करें – सफलता, सत्यापन त्रुटियां, प्रमाणीकरण विफलताएं, और नहीं मिले मामले। यूनिट परीक्षण तर्क विवरण संभालते हैं; एकीकरण परीक्षण प्रत्येक समापन बिंदु के मुख्य व्यवहार को कवर करते हैं।
प्रश्न: एकीकरण परीक्षण या E2E परीक्षण?
ए: एकीकरण परीक्षण एपीआई परत (मार्ग + डेटाबेस) को सत्यापित करते हैं। E2E परीक्षण यूआई के माध्यम से पूर्ण उपयोगकर्ता प्रवाह को सत्यापित करते हैं। दोनों का महत्व है – E2E की तुलना में अधिक एकीकरण परीक्षण हैं क्योंकि वे तेज़ और अधिक केंद्रित हैं।
प्रश्न: मैं बाहरी एपीआई कॉल का परीक्षण कैसे करूं?
उत्तर: अपने डेटाबेस को वास्तविक बनाए रखते हुए उन विशिष्ट कॉलों का अनुकरण करें (आप नहीं चाहते कि परीक्षण तृतीय-पक्ष सेवाओं पर प्रभाव डालें)। केवल वास्तविक बाहरी निर्भरता का अनुकरण करें, अपने डेटाबेस का नहीं।
निष्कर्ष
एकीकरण परीक्षण आपके एपीआई के काम को शुरू से अंत तक सत्यापित करते हैं – मार्ग, डेटाबेस और तर्क एक साथ – वायरिंग बग को पकड़ते हैं जो यूनिट परीक्षण में छूट जाते हैं।का प्रयोग करें जेस्ट (नोड.जेएस) के साथ सुपरटेस्ट या टेस्टक्लाइंट (पायथन) के साथ पाइटेस्ट, उन्हें एक वास्तविक परीक्षण डेटाबेस पर इंगित करें (गति के लिए लेनदेन रोलबैक के माध्यम से परीक्षणों के बीच रीसेट करें), और सफलता के मामलों, सत्यापन त्रुटियों, प्रमाणीकरण, और नहीं मिले पथों को कवर करें। उन्हें सेवा डेटाबेस के साथ CI में चलाएँ। तर्क के लिए इकाई परीक्षणों के साथ, एकीकरण परीक्षण आपको विश्वास दिलाते हैं कि आपका एपीआई वास्तव में ग्राहकों की अपेक्षा के अनुरूप काम करता है।
🔗 Share this article
✍️ Leave a Comment