FastAPI: ଏକ ଟେଷ୍ଟ ମେଲବକ୍ସ ଯାହା ପୁନରାବୃତ୍ତି ହୁଏ ନାହିଁ

FastAPI: ଏକ ଟେଷ୍ଟ ମେଲବକ୍ସ ଯାହା ପୁନରାବୃତ୍ତି ହୁଏ ନାହିଁ

ସଫ୍ଟୱେର୍ ଟେଷ୍ଟିଂରେ ସ୍ଥିରତା ଅତ୍ୟନ୍ତ ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ, ବିଶେଷକରି ଯେତେବେଳେ ଭେରିଫିକେସନ୍ ଇମେଲ୍ ପଠାଇବାର କଥା ଆସେ। ଏହି ବିଷୟଟି ବର୍ତ୍ତମାନ ପୂର୍ବ ଅପେକ୍ଷା ଅଧିକ ପ୍ରାସଙ୍ଗିକ, କାରଣ ସ୍ୱୟଂଚାଳିତ ଟେଷ୍ଟଗୁଡ଼ିକ ଆଧୁନିକ ବିକାଶର ଏକ ଅତ୍ୟାବଶ୍ୟକ ଅଂଶ।

ଟେଷ୍ଟ ମେଲବକ୍ସ ପୁନଃବ୍ୟବହାର କରିବାର ସମସ୍ୟା

ଯେତେବେଳେ ଆମେ ଇମେଲ୍ ପଠାଉଥିବା ଟେଷ୍ଟଗୁଡ଼ିକ ପରିଚାଳନା କରୁ, ଏକ ସାଧାରଣ ସମସ୍ୟା ହେଉଛି ଟେଷ୍ଟ ମେଲବକ୍ସଗୁଡ଼ିକର ପୁନଃବ୍ୟବହାର। ଏହା ଫଳରେ ଏକ ଟେଷ୍ଟ ଥରେ ପାସ୍ ହୋଇପାରେ ଏବଂ ପରବର୍ତ୍ତୀ ରନରେ ଫେଲ୍ ହୋଇପାରେ। ଉପୁଜୁଥିବା କିଛି ସମସ୍ୟା ହେଲା:

  • ପୁରୁଣା ମେସେଜଗୁଡ଼ିକ: ପୂର୍ବ ଟେଷ୍ଟର ଏକ ଇମେଲ୍ ଏକ ନୂଆ ଟେଷ୍ଟରେ ବାଧା ସୃଷ୍ଟି କରିପାରେ, ଯାହା ଫଳରେ ଟେଷ୍ଟଟି ଅପ୍ରତ୍ୟାଶିତ ଭାବେ ଫେଲ୍ ହୋଇପାରେ।
  • କଣ୍ଟିନ୍ୟୁଅସ୍ ଇଣ୍ଟିଗ୍ରେସନ୍ (CI) ପରିବେଶରେ ଦ୍ୱନ୍ଦ୍ୱ: ଯଦି ଏକାଧିକ ପ୍ରୋସେସ୍ ଏକ ସମୟରେ ଗୋଟିଏ ମେଲବକ୍ସକୁ ଆକ୍ସେସ୍ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତି, ତେବେ ବିବାଦ କିମ୍ବା ସମସ୍ୟା ସୃଷ୍ଟି ହୋଇପାରେ।
  • ସମସ୍ୟାପୂର୍ଣ୍ଣ ପୁନଃପ୍ରୟାସ (Retries): ଯଦି ଏକ ଭେରିଫିକେସନ୍ ଲିଙ୍କ୍ ର ମିଆଦ ସରିଯାଏ କିମ୍ବା ତାହା ସଠିକ୍ ଭାବେ ବ୍ୟବହୃତ ନ ହୁଏ, ତେବେ ଏକ ପୁନଃପ୍ରୟାସ ସମାନ ଲିଙ୍କ୍ ବ୍ୟବହାର କରିପାରେ, ଯାହା ଟେଷ୍ଟର ବୈଧତାକୁ ପ୍ରଭାବିତ କରିଥାଏ।

ପ୍ରସ୍ତାବିତ ସମାଧାନ

ଏହି ସମସ୍ୟାଗୁଡ଼ିକର ସମାଧାନ ପାଇଁ, ପ୍ରତ୍ୟେକ ଟେଷ୍ଟ ଇମେଲକୁ ଏକ ଅସ୍ଥାୟୀ ରିସୋର୍ସ ଭାବରେ ଗ୍ରହଣ କରିବାକୁ ପରାମର୍ଶ ଦିଆଯାଇଛି। ଏହାର ଅର୍ଥ ହେଉଛି ପ୍ରତ୍ୟେକ ଟେଷ୍ଟ ରନ୍ ପାଇଁ ଏକ ଅନନ୍ୟ ମେଲବକ୍ସ ତିଆରି କରିବା। ଏହି ରଣନୀତି କାର୍ଯ୍ୟକାରୀ କରିବା ପାଇଁ, ପ୍ରତି ରନ୍ ପାଇଁ ତିନୋଟି ମୂଲ୍ୟ ନିର୍ଦ୍ଧାରଣ କରାଯିବା ଉଚିତ:

  1. run_id: CI ଜବ୍ କିମ୍ବା ଲୋକାଲ୍ ଏକ୍ସିକ୍ୟୁସନ୍ ପାଇଁ ଏକ ଆଇଡେଣ୍ଟିଫାୟର୍।
  2. mailbox_id: ସେହି ରନ୍ ପାଇଁ ତିଆରି ହୋଇଥିବା ମେଲବକ୍ସ ପାଇଁ ଏକ ଆଇଡେଣ୍ଟିଫାୟର୍।
  3. expected_token: ଏକ ଟୋକନ୍ ଯାହା ପ୍ରାପ୍ତ ଲିଙ୍କକୁ ପରୀକ୍ଷା କରାଯାଉଥିବା ୟୁଜର ସହିତ ଯୋଡ଼ିଥାଏ।

ଏହି ପଦ୍ଧତି ନିଶ୍ଚିତ କରେ ଯେ ଗୋଟିଏ ରନର ମେସେଜଗୁଡ଼ିକ ଅନ୍ୟ ରନ୍ ସହିତ ହସ୍ତକ୍ଷେପ କରିବ ନାହିଁ, ଯାହା ଟେଷ୍ଟଗୁଡ଼ିକର ସ୍ଥିରତା ଏବଂ ବିଶ୍ୱସନୀୟତାକୁ ଉନ୍ନତ କରିଥାଏ।

FastAPI ରେ କାର୍ଯ୍ୟକାରିତା

FastAPI ରେ ଏହି ରଣନୀତି କାର୍ଯ୍ୟକାରୀ କରିବା ପାଇଁ, ଆମେ ଏକ endpoint ତିଆରି କରିପାରିବା ଯାହା ପ୍ରତ୍ୟେକ ଟେଷ୍ଟ ପାଇଁ ଏକ ଅନନ୍ୟ ଇମେଲ୍ ମେଲବକ୍ସ ପ୍ରସ୍ତୁତ କରେ। ଏହା କିପରି କରାଯିବ ତାହାର ଏକ ଉଦାହରଣ ନିମ୍ନରେ ଦିଆଗଲା:

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 ନିର୍ଦ୍ଧାରଣ କରନ୍ତୁ: ଏହା ଇମେଲ୍ ପହଞ୍ଚି ନାହିଁ ବୋଲି ଧରିବା ପୂର୍ବରୁ କେତେ ସମୟ ଅପେକ୍ଷା କରିବାକୁ ହେବ ତାହା ପରିଚାଳନା କରିବାରେ ସାହାଯ୍ୟ କରେ।
  • ଟେଷ୍ଟ ପରେ ସଫା କରନ୍ତୁ: ପ୍ରତ୍ୟେକ ଟେଷ୍ଟ ଶେଷରେ ମେଲବକ୍ସଟିକୁ ଡିଲିଟ୍ କରିବା କିମ୍ବା ବନ୍ଦ ଭାବରେ ଚିହ୍ନିତ କରିବା ନିଶ୍ଚିତ କରନ୍ତୁ, ଯଦିଓ ତାହା ଫେଲ୍ ହୋଇଥାଏ।

ଉପସଂହାର

ଏକ ପୃଥକ ଟେଷ୍ଟ ମେଲବକ୍ସ ତିଆରି କରିବା ସମସ୍ତ authentication ସମସ୍ୟାର ସମାଧାନ କରେ ନାହିଁ, କିନ୍ତୁ ଏହା ଏକ୍ସିକ୍ୟୁସନ୍ ମଧ୍ୟରେ ଏକ ସ୍ପଷ୍ଟ ସୀମା ନିର୍ଦ୍ଧାରଣ କରେ। FastAPI endpoint କୁ ପରିଚାଳନା କରିପାରିବ ଯେତେବେଳେ କି ଏକ ଟେଷ୍ଟ ଆଡାପ୍ଟର ମେଲବକ୍ସ ଏବଂ ମେସେଜ୍ ପଢ଼ିବା କାର୍ଯ୍ୟ ପରିଚାଳନା କରେ। ଏକ run_id, tokens, timeouts ଏବଂ ସଫେଇ (cleanup) ସହିତ, ପ୍ରତ୍ୟେକ ଏକ୍ସିକ୍ୟୁସନ୍ ଜାଣିଥାଏ ଯେ ଏହା କ’ଣ ସୃଷ୍ଟି କରିଛି ଏବଂ କ’ଣ ବ୍ୟବହାର କରିବା ଉଚିତ। ଏହା CI ରେ କମ୍ ଅଦରକାରୀ ଶବ୍ଦ (noise) ଏବଂ କିଛି ଫେଲ୍ ହେବା ସମୟରେ ଅଧିକ ଉପଯୋଗୀ ସଙ୍କେତ ପ୍ରଦାନ କରେ।

ଲାଭ

  • ଟେଷ୍ଟଗୁଡ଼ିକର ପୃଥକୀକରଣ।
  • ସହଜରେ ତ୍ରୁଟି ନିର୍ଣ୍ଣୟ।
  • ଟେଷ୍ଟଗୁଡ଼ିକର ସ୍ଥିରତାରେ ଉନ୍ନତି।

ସୀମାବଦ୍ଧତା

  • କାର୍ଯ୍ୟକାରୀ କରିବା ପାଇଁ ପ୍ରାରମ୍ଭରେ ଅଧିକ କାମ କରିବାକୁ ପଡ଼ିପାରେ।
  • ଅସ୍ଥାୟୀ ରିସୋର୍ସଗୁଡ଼ିକର ଉତ୍ତମ ପରିଚାଳନା ଆବଶ୍ୟକ।

ସତର୍କତା

ଏହି ଆର୍ଟିକିଲ୍‌ଟି ଶିକ୍ଷଣୀୟ ଅଟେ। ଉଦାହରଣ ମୂଲ୍ୟଗୁଡ଼ିକୁ ଆପଣଙ୍କ କାର୍ଯ୍ୟକାରିତାରେ ପ୍ରକୃତ ତଥ୍ୟ ସହିତ ବଦଳାଇବା ଉଚିତ। ଏହା ଉପରେ ନିର୍ଭର କରିବା ପୂର୍ବରୁ ମୂଳ ଉତ୍ସ ସହିତ ଯେକୌଣସି ଦାବିକୁ ଯାଞ୍ଚ କରିବା ନିଶ୍ଚିତ କରନ୍ତୁ।

ବାରମ୍ବାର ପଚରାଯାଉଥିବା ପ୍ରଶ୍ନ

  • FastAPI କ’ଣ? — FastAPI ହେଉଛି Python ସହିତ APIs ତିଆରି କରିବା ପାଇଁ ଏକ ଆଧୁନିକ ଏବଂ ଦ୍ରୁତ ଫ୍ରେମୱାର୍କ।
  • ଟେଷ୍ଟଗୁଡ଼ିକରେ ପୃଥକୀକରଣ କାହିଁକି ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ? — ଟେଷ୍ଟଗୁଡ଼ିକୁ ପୃଥକ ରଖିବା ଦ୍ୱାରା ବାଧା ଏବଂ ଅସଙ୍ଗତ ଫଳାଫଳ ଏଡ଼ାଇ ହୁଏ, ଯାହା ବିଶ୍ୱସନୀୟତାକୁ ଉନ୍ନତ କରିଥାଏ।
  • FastAPI ରେ ଏକ ଅସ୍ଥାୟୀ ମେଲବକ୍ସ କିପରି କାର୍ଯ୍ୟକାରୀ କରାଯାଏ? — ଏକ endpoint ତିଆରି କରାଯାଇପାରିବ ଯାହା ପ୍ରତ୍ୟେକ ଟେଷ୍ଟ ଏକ୍ସିକ୍ୟୁସନ୍ ପାଇଁ ଏକ ଅନନ୍ୟ ମେଲବକ୍ସ ପ୍ରସ୍ତୁତ କରେ।
  • 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.