FastAPI: एक टेस्ट मेलबॉक्स जो दोहराया नहीं जाता

FastAPI: एक टेस्ट मेलबॉक्स जो दोहराया नहीं जाता

सॉफ्टवेयर परीक्षण में स्थिरता अत्यंत महत्वपूर्ण है, विशेष रूप से तब जब सत्यापन ईमेल भेजने की बात आती है। यह विषय अब पहले से कहीं अधिक प्रासंगिक है, क्योंकि स्वचालित परीक्षण आधुनिक विकास का एक अनिवार्य हिस्सा हैं।

टेस्ट मेलबॉक्स को पुनः उपयोग करने की समस्या

जब हम ईमेल भेजने वाले परीक्षण करते हैं, तो एक सामान्य समस्या टेस्ट मेलबॉक्स का पुनः उपयोग करना होती है। इससे ऐसा हो सकता है कि कोई टेस्ट एक बार पास हो जाए और अगली बार फेल हो जाए। उत्पन्न होने वाली कुछ समस्याएं इस प्रकार हैं:

  • पुराने संदेश: पिछले परीक्षण का एक ईमेल नए परीक्षण में हस्तक्षेप कर सकता है, जिससे टेस्ट अप्रत्याशित रूप से विफल हो सकता है।
  • कंटीन्यूअस इंटीग्रेशन (CI) वातावरण में भ्रम: यदि कई प्रक्रियाएं एक ही समय में एक ही मेलबॉक्स तक पहुंचने का प्रयास करती हैं, तो टकराव उत्पन्न हो सकते हैं।
  • समस्याग्रस्त पुनः प्रयास: यदि कोई सत्यापन लिंक समाप्त हो जाता है या ठीक से उपयोग नहीं किया जाता है, तो पुनः प्रयास में उसी लिंक का उपयोग हो सकता है, जिससे परीक्षण की वैधता प्रभावित हो सकती है।

प्रस्तावित समाधान

इन समस्याओं को हल करने के लिए, प्रत्येक टेस्ट ईमेल को एक अस्थायी संसाधन के रूप में मानने का सुझाव दिया जाता है। इसका अर्थ है प्रत्येक परीक्षण निष्पादन के लिए एक अद्वितीय मेलबॉक्स बनाना। इस रणनीति को लागू करने के लिए, प्रति रन तीन मान परिभाषित किए जाने चाहिए:

  1. run_id: CI कार्य या स्थानीय निष्पादन के लिए एक पहचानकर्ता।
  2. mailbox_id: उस रन के लिए बनाए गए मेलबॉक्स का एक पहचानकर्ता।
  3. expected_token: एक टोकन जो प्राप्त लिंक को उस उपयोगकर्ता से जोड़ता है जिसका परीक्षण किया जा रहा है।

यह दृष्टिकोण सुनिश्चित करता है कि एक निष्पादन के संदेश दूसरों के साथ हस्तक्षेप न करें, जिससे परीक्षणों की स्थिरता और विश्वसनीयता में सुधार होता है।

FastAPI में कार्यान्वयन

FastAPI में इस रणनीति को लागू करने के लिए, हम एक ऐसा एंडपॉइंट बना सकते हैं जो प्रत्येक परीक्षण के लिए एक अद्वितीय ईमेल मेलबॉक्स उत्पन्न करता है। नीचे इसे करने का एक उदाहरण दिया गया है:

from dataclasses import dataclass
from uuid import uuid4
from fastapi import FastAPI

app = FastAPI()

dataclass(frozen=True)
class Mailbox:
    address: str
    mailbox_id: str


def create_test_mailbox(run_id: str) -> Mailbox:
    mailbox_id = f"{run_id}-{uuid4().hex[:8]}"
    return Mailbox(
        address=f"{mailbox_id}@test.invalid",
        mailbox_id=mailbox_id,
    )

@app.post("/test-users")
def create_test_user(run_id: str):
    mailbox = create_test_mailbox(run_id)
    token = uuid4().hex  # Guarda mailbox.mailbox_id y token junto al usuario creado.
    return {
        "email": mailbox.address,
        "mailbox_id": mailbox.mailbox_id,
        "verification_token": token,
    }

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

परीक्षण के लिए सर्वोत्तम अभ्यास

अस्थायी मेलबॉक्स बनाने के अलावा, कुछ सर्वोत्तम अभ्यास हैं जिनका पालन किया जाना चाहिए:

  • परीक्षणों को अलग रखना: हस्तक्षेप से बचते हुए, प्रत्येक निष्पादन का अपना मेलबॉक्स होना चाहिए।
  • एक timeout निर्धारित करना: यह प्रबंधित करने में मदद करता है कि किसी ईमेल के न आने का निष्कर्ष निकालने से पहले उसके लिए कितना समय प्रतीक्षा करनी है।
  • परीक्षणों के बाद सफाई करना: सुनिश्चित करें कि प्रत्येक परीक्षण के अंत में मेलबॉक्स को हटा दिया जाए या उसे बंद के रूप में चिह्नित किया जाए, भले ही वह विफल हो जाए।

निष्कर्ष

एक अलग टेस्ट मेलबॉक्स बनाना प्रमाणीकरण की सभी समस्याओं को हल नहीं करता है, लेकिन यह निष्पादनों के बीच एक स्पष्ट सीमा स्थापित करता है। FastAPI एंडपॉइंट को संभाल सकता है जबकि एक टेस्ट एडेप्टर मेलबॉक्स और संदेश पढ़ने का प्रबंधन करता है। एक run_id, tokens, timeouts और सफाई के साथ, प्रत्येक निष्पादन जानता है कि उसने क्या बनाया और उसे क्या उपभोग करना चाहिए। इसका परिणाम CI में कम शोर और कुछ विफल होने पर अधिक उपयोगी संकेत होते हैं।

लाभ

  • परीक्षणों का अलगाव।
  • निदान में आसानी।
  • परीक्षणों की स्थिरता में सुधार।

कमियां

  • कार्यान्वयन के लिए शुरुआत में अधिक काम की आवश्यकता हो सकती है।
  • अस्थायी संसाधनों के अच्छे प्रबंधन की आवश्यकता होती है।

सावधानी

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

अक्सर पूछे जाने वाले प्रश्न

  • FastAPI क्या है? — FastAPI Python के साथ APIs बनाने के लिए एक आधुनिक और तेज़ फ्रेमवर्क है।
  • परीक्षणों में अलगाव क्यों महत्वपूर्ण है? — परीक्षणों को अलग रखने से हस्तक्षेप और असंगत परिणामों से बचाव होता है, जिससे विश्वसनीयता में सुधार होता है।
  • FastAPI में एक अस्थायी मेलबॉक्स कैसे लागू किया जाता है? — एक ऐसा एंडपॉइंट बनाया जा सकता है जो प्रत्येक परीक्षण निष्पादन के लिए एक अद्वितीय मेलबॉक्स उत्पन्न करता है।
  • run_id क्या है? — यह एक अद्वितीय पहचानकर्ता है जो विभिन्न परीक्षण निष्पादनों के बीच अंतर करने में मदद करता है।
  • टेस्ट मेलबॉक्स का पुनः उपयोग करने से क्या समस्याएं होती हैं? — यह रुक-रुक कर होने वाली विफलताओं, CI वातावरण में भ्रम और पुनः प्रयासों से जुड़ी समस्याओं का कारण बन सकता है।
  • mailbox_id क्या है? — यह एक पहचानकर्ता है जो किसी विशिष्ट मेलबॉक्स को एक परीक्षण निष्पादन से जोड़ता है।
Free field guide

API Security Testing Checklist

A practical workflow for testing authentication, authorization, input handling, business logic, and evidence without losing track of scope.