हिन्दी

सुपरटेस्ट का उपयोग करके एपीआई टेस्टिंग पर केंद्रित इंटीग्रेशन टेस्टिंग के लिए एक व्यापक गाइड, जिसमें मजबूत एप्लिकेशन टेस्टिंग के लिए सेटअप, सर्वोत्तम प्रथाएं और उन्नत तकनीकें शामिल हैं।

इंटीग्रेशन टेस्टिंग: सुपरटेस्ट के साथ एपीआई टेस्टिंग में महारत हासिल करना

सॉफ्टवेयर डेवलपमेंट के क्षेत्र में, यह सुनिश्चित करना कि अलग-अलग कंपोनेंट अकेले (यूनिट टेस्टिंग) सही ढंग से काम करते हैं, महत्वपूर्ण है। हालाँकि, यह सत्यापित करना भी उतना ही महत्वपूर्ण है कि ये कंपोनेंट एक साथ सहजता से काम करते हैं। यहीं पर इंटीग्रेशन टेस्टिंग काम आती है। इंटीग्रेशन टेस्टिंग किसी एप्लिकेशन के भीतर विभिन्न मॉड्यूल या सेवाओं के बीच इंटरैक्शन को मान्य करने पर केंद्रित है। यह लेख इंटीग्रेशन टेस्टिंग की गहराई में जाता है, विशेष रूप से सुपरटेस्ट के साथ एपीआई टेस्टिंग पर ध्यान केंद्रित करता है, जो Node.js में HTTP दावों के परीक्षण के लिए एक शक्तिशाली और उपयोगकर्ता-अनुकूल लाइब्रेरी है।

इंटीग्रेशन टेस्टिंग क्या है?

इंटीग्रेशन टेस्टिंग एक प्रकार की सॉफ्टवेयर टेस्टिंग है जो अलग-अलग सॉफ्टवेयर मॉड्यूल को जोड़ती है और उन्हें एक समूह के रूप में टेस्ट करती है। इसका उद्देश्य एकीकृत यूनिट्स के बीच इंटरैक्शन में दोषों को उजागर करना है। यूनिट टेस्टिंग के विपरीत, जो अलग-अलग कंपोनेंट्स पर ध्यान केंद्रित करती है, इंटीग्रेशन टेस्टिंग मॉड्यूल के बीच डेटा प्रवाह और नियंत्रण प्रवाह को सत्यापित करती है। सामान्य इंटीग्रेशन टेस्टिंग दृष्टिकोणों में शामिल हैं:

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

एपीआई इंटीग्रेशन टेस्टिंग क्यों महत्वपूर्ण है?

एपीआई इंटीग्रेशन टेस्टिंग कई कारणों से महत्वपूर्ण है:

एक वैश्विक यात्रा बुकिंग प्लेटफॉर्म पर विचार करें। विभिन्न देशों से उड़ान आरक्षण, होटल बुकिंग और भुगतान गेटवे को संभालने वाले एपीआई के बीच सहज संचार सुनिश्चित करने के लिए एपीआई इंटीग्रेशन टेस्टिंग सर्वोपरि है। इन एपीआई को ठीक से एकीकृत करने में विफलता गलत बुकिंग, भुगतान विफलताओं और खराब उपयोगकर्ता अनुभव का कारण बन सकती है, जिससे प्लेटफॉर्म की प्रतिष्ठा और राजस्व पर नकारात्मक प्रभाव पड़ सकता है।

सुपरटेस्ट का परिचय: एपीआई टेस्टिंग के लिए एक शक्तिशाली उपकरण

सुपरटेस्ट एचटीटीपी अनुरोधों के परीक्षण के लिए एक उच्च-स्तरीय एब्स्ट्रैक्शन है। यह आपके एप्लिकेशन को अनुरोध भेजने और प्रतिक्रियाओं पर जोर देने के लिए एक सुविधाजनक और धाराप्रवाह एपीआई प्रदान करता है। Node.js के शीर्ष पर निर्मित, सुपरटेस्ट विशेष रूप से Node.js HTTP सर्वर के परीक्षण के लिए डिज़ाइन किया गया है। यह जेस्ट और मोका जैसे लोकप्रिय परीक्षण फ्रेमवर्क के साथ असाधारण रूप से अच्छी तरह से काम करता है।

सुपरटेस्ट की मुख्य विशेषताएं:

अपना टेस्टिंग वातावरण स्थापित करना

शुरू करने से पहले, आइए एक बुनियादी परीक्षण वातावरण स्थापित करें। हम मान लेंगे कि आपके पास Node.js और npm (या yarn) स्थापित है। हम अपने परीक्षण ढांचे के रूप में जेस्ट और एपीआई परीक्षण के लिए सुपरटेस्ट का उपयोग करेंगे।

  1. एक Node.js प्रोजेक्ट बनाएं:
mkdir api-testing-example
cd api-testing-example
npm init -y
  1. निर्भरताएँ स्थापित करें:
npm install --save-dev jest supertest
npm install express  # या एपीआई बनाने के लिए आपका पसंदीदा ढांचा
  1. जेस्ट को कॉन्फ़िगर करें: अपनी package.json फ़ाइल में निम्नलिखित जोड़ें:
{
  "scripts": {
    "test": "jest"
  }
}
  1. एक सरल एपीआई एंडपॉइंट बनाएं: निम्नलिखित कोड के साथ app.js (या इसी तरह) नामक एक फ़ाइल बनाएं:
const express = require('express');
const app = express();
const port = 3000;

app.get('/hello', (req, res) => {
  res.send('Hello, World!');
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});

module.exports = app; // परीक्षण के लिए निर्यात करें

अपना पहला सुपरटेस्ट टेस्ट लिखना

अब जब हमारा वातावरण स्थापित हो गया है, तो आइए अपने एपीआई एंडपॉइंट को सत्यापित करने के लिए एक सरल सुपरटेस्ट टेस्ट लिखें। अपने प्रोजेक्ट के रूट में app.test.js (या इसी तरह) नामक एक फ़ाइल बनाएं:

const request = require('supertest');
const app = require('./app');

describe('GET /hello', () => {
  it('responds with 200 OK and returns "Hello, World!"', async () => {
    const response = await request(app).get('/hello');
    expect(response.statusCode).toBe(200);
    expect(response.text).toBe('Hello, World!');
  });
});

व्याख्या:

परीक्षण चलाने के लिए, अपने टर्मिनल में निम्नलिखित कमांड निष्पादित करें:

npm test

यदि सब कुछ सही ढंग से स्थापित है, तो आपको परीक्षण पास होता हुआ दिखना चाहिए।

उन्नत सुपरटेस्ट तकनीकें

सुपरटेस्ट उन्नत एपीआई परीक्षण के लिए सुविधाओं की एक विस्तृत श्रृंखला प्रदान करता है। आइए उनमें से कुछ का पता लगाएं।

1. अनुरोध बॉडी भेजना

अनुरोध बॉडी में डेटा भेजने के लिए, आप .send() विधि का उपयोग कर सकते हैं। उदाहरण के लिए, आइए एक एंडपॉइंट बनाएं जो JSON डेटा स्वीकार करता है:

app.post('/users', express.json(), (req, res) => {
  const { name, email } = req.body;
  // डेटाबेस में एक उपयोगकर्ता बनाने का अनुकरण करें
  const user = { id: Date.now(), name, email };
  res.status(201).json(user);
});

यहां बताया गया है कि आप सुपरटेस्ट का उपयोग करके इस एंडपॉइंट का परीक्षण कैसे कर सकते हैं:

describe('POST /users', () => {
  it('creates a new user', async () => {
    const userData = {
      name: 'John Doe',
      email: 'john.doe@example.com',
    };

    const response = await request(app)
      .post('/users')
      .send(userData)
      .expect(201);

    expect(response.body).toHaveProperty('id');
    expect(response.body.name).toBe(userData.name);
    expect(response.body.email).toBe(userData.email);
  });
});

व्याख्या:

2. हेडर सेट करना

अपने अनुरोधों में कस्टम हेडर सेट करने के लिए, आप .set() विधि का उपयोग कर सकते हैं। यह प्रमाणीकरण टोकन, सामग्री प्रकार, या अन्य कस्टम हेडर सेट करने के लिए उपयोगी है।

describe('GET /protected', () => {
  it('requires authentication', async () => {
    const response = await request(app).get('/protected').expect(401);
  });

  it('returns 200 OK with a valid token', async () => {
    // एक वैध टोकन प्राप्त करने का अनुकरण करें
    const token = 'valid-token';

    const response = await request(app)
      .get('/protected')
      .set('Authorization', `Bearer ${token}`)
      .expect(200);

    expect(response.text).toBe('Protected Resource');
  });
});

व्याख्या:

3. कुकीज़ संभालना

सुपरटेस्ट कुकीज़ को भी संभाल सकता है। आप .set('Cookie', ...) विधि का उपयोग करके कुकीज़ सेट कर सकते हैं, या आप कुकीज़ तक पहुंचने और उन्हें संशोधित करने के लिए .cookies गुण का उपयोग कर सकते हैं।

4. फ़ाइल अपलोड का परीक्षण

सुपरटेस्ट का उपयोग उन एपीआई एंडपॉइंट्स का परीक्षण करने के लिए किया जा सकता है जो फ़ाइल अपलोड को संभालते हैं। आप अनुरोध में फ़ाइलों को संलग्न करने के लिए .attach() विधि का उपयोग कर सकते हैं।

5. दावा पुस्तकालयों (Chai) का उपयोग करना

हालांकि जेस्ट की अंतर्निहित दावा लाइब्रेरी कई मामलों के लिए पर्याप्त है, आप सुपरटेस्ट के साथ चाई जैसी अधिक शक्तिशाली दावा पुस्तकालयों का भी उपयोग कर सकते हैं। चाई एक अधिक अभिव्यंजक और लचीला दावा सिंटैक्स प्रदान करता है। चाई का उपयोग करने के लिए, आपको इसे स्थापित करना होगा:

npm install --save-dev chai

फिर, आप अपनी परीक्षण फ़ाइल में चाई आयात कर सकते हैं और उसके दावों का उपयोग कर सकते हैं:

const request = require('supertest');
const app = require('./app');
const chai = require('chai');
const expect = chai.expect;

describe('GET /hello', () => {
  it('responds with 200 OK and returns "Hello, World!"', async () => {
    const response = await request(app).get('/hello');
    expect(response.statusCode).to.equal(200);
    expect(response.text).to.equal('Hello, World!');
  });
});

ध्यान दें: चाई के साथ सही ढंग से काम करने के लिए आपको जेस्ट को कॉन्फ़िगर करने की आवश्यकता हो सकती है। इसमें अक्सर एक सेटअप फ़ाइल जोड़ना शामिल होता है जो चाई आयात करता है और इसे जेस्ट के वैश्विक expect के साथ काम करने के लिए कॉन्फ़िगर करता है।

6. एजेंटों का पुन: उपयोग

उन परीक्षणों के लिए जिन्हें एक विशिष्ट वातावरण स्थापित करने की आवश्यकता होती है (उदाहरण के लिए, प्रमाणीकरण), सुपरटेस्ट एजेंट का पुन: उपयोग करना अक्सर फायदेमंद होता है। यह प्रत्येक परीक्षण मामले में अनावश्यक सेटअप कोड से बचाता है।

describe('Authenticated API Tests', () => {
  let agent;

  beforeAll(() => {
    agent = request.agent(app); // एक स्थायी एजेंट बनाएं
    // प्रमाणीकरण का अनुकरण करें
    return agent
      .post('/login')
      .send({ username: 'testuser', password: 'password123' });
  });

  it('can access a protected resource', async () => {
    const response = await agent.get('/protected').expect(200);
    expect(response.text).toBe('Protected Resource');
  });

  it('can perform other actions that require authentication', async () => {
    // यहां अन्य प्रमाणित क्रियाएं करें
  });
});

इस उदाहरण में, हम beforeAll हुक में एक सुपरटेस्ट एजेंट बनाते हैं और एजेंट को प्रमाणित करते हैं। describe ब्लॉक के भीतर बाद के परीक्षण फिर प्रत्येक परीक्षण के लिए फिर से प्रमाणित किए बिना इस प्रमाणित एजेंट का पुन: उपयोग कर सकते हैं।

सुपरटेस्ट के साथ एपीआई इंटीग्रेशन टेस्टिंग के लिए सर्वोत्तम प्रथाएं

प्रभावी एपीआई इंटीग्रेशन टेस्टिंग सुनिश्चित करने के लिए, निम्नलिखित सर्वोत्तम प्रथाओं पर विचार करें:

बचने के लिए सामान्य गलतियाँ

निष्कर्ष

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

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