paint-brush
QA পরীক্ষকদের জন্য পাইথন-চালিত পারফরম্যান্স টেস্টিং: ক্লাউড API লোড পরীক্ষার জন্য একটি শিক্ষানবিস গাইডদ্বারা@shad0wpuppet
27,041 পড়া
27,041 পড়া

QA পরীক্ষকদের জন্য পাইথন-চালিত পারফরম্যান্স টেস্টিং: ক্লাউড API লোড পরীক্ষার জন্য একটি শিক্ষানবিস গাইড

দ্বারা Konstantin Sakhchinskiy8m2024/01/19
Read on Terminal Reader
Read this story w/o Javascript

অতিদীর্ঘ; পড়তে

ক্লাউড অ্যাপ API-এ লোড টেস্টিং পরিচালনাকারী QA পরীক্ষকদের জন্য পাইথন স্ক্রিপ্টগুলি অন্বেষণ করুন৷ নিবন্ধটি অসিঙ্ক্রোনাস এবং মাল্টিপ্রসেসিং পন্থাগুলিকে কভার করে, কাস্টমাইজেশন, পদ্ধতি নির্বাচন, এবং ব্যবহারিক পর্যবেক্ষণ টিপসের অন্তর্দৃষ্টি প্রদান করে। বিস্তৃত কর্মক্ষমতা বিশ্লেষণের জন্য পাইথনের প্রযুক্তিগত ক্ষমতা ব্যবহার করুন।
featured image - QA পরীক্ষকদের জন্য পাইথন-চালিত পারফরম্যান্স টেস্টিং: ক্লাউড API লোড পরীক্ষার জন্য একটি শিক্ষানবিস গাইড
Konstantin Sakhchinskiy HackerNoon profile picture
0-item
1-item


আপনি কি একজন QA পরীক্ষক বিস্তৃত প্রোগ্রামিং দক্ষতার প্রয়োজন ছাড়াই কর্মক্ষমতা পরীক্ষায় ডুব দিতে আগ্রহী? এই নিবন্ধে, আমরা পাইথন ব্যবহার করে ক্লাউড অ্যাপ এপিআই-এ লোড পরীক্ষা করার জন্য নন-প্রোগ্রামারদের জন্য একটি সহজ উপায় অন্বেষণ করব। জটিল কোডিংয়ের প্রয়োজন ছাড়াই পরীক্ষা লোড করুন - এমনকি নিয়মিত QA পরীক্ষকরা কীভাবে গুরুতর বাগ খুঁজে পেতে এবং সম্ভাব্য কর্মক্ষমতা বাধাগুলি উন্মোচন করতে পাইথন ব্যবহার করতে পারে তা আবিষ্কার করুন।


কর্মক্ষমতা পরীক্ষা আপনার অ্যাপ্লিকেশনগুলি বাস্তব-বিশ্বের চাহিদাগুলি পরিচালনা করতে পারে তা নিশ্চিত করার একটি গুরুত্বপূর্ণ দিক। আমি একটি ক্লাউড সার্ভিস ম্যানেজিং ব্রাউজার লোড পরীক্ষার জন্য ডিজাইন করা আমার পদ্ধতি এবং পাইথন স্ক্রিপ্টগুলি ব্যাখ্যা করার চেষ্টা করব।


লোড টেস্টিং দৃশ্যকল্প কল্পনা করুন একটি ক্লাউড পরিষেবা ব্রাউজার প্রোফাইল পরিচালনার জন্য দায়ী (ওয়েব স্ক্র্যাপিংয়ের জন্য ব্রাউজার)। ব্যবহারকারীরা প্রোফাইল তৈরি, শুরু, বন্ধ, মুছে ফেলা ইত্যাদি পরিষেবার সাথে API এর মাধ্যমে ইন্টারঅ্যাক্ট করে। আমার পাইথন স্ক্রিপ্ট এই দৃশ্যের অনুকরণ করে, বারবার এই ক্রিয়াগুলি সম্পাদন করে ক্লাউড পরিষেবাতে লোড প্রয়োগ করে।


 # Dependencies import asyncio import httpx # Configuration API_HOST = 'https://cloud.io' API_KEY = 'qatest' API_HEADERS = { "x-cloud-api-token": API_KEY, "Content-Type": "application/json" } CYCLES_COUNT = 3 # Browser profile configuration data_start = { "proxy": "http://127.0.0.1:8080", "browser_settings": {"inactive_kill_timeout": 120} }

অ্যাসিঙ্ক্রোনাস ফাংশন: আমার লোড পরীক্ষার হৃদয়

  • ব্রাউজার প্রোফাইলগুলি আনা: get_profiles ফাংশন পরিষেবা থেকে বিদ্যমান ব্রাউজার প্রোফাইলগুলি পুনরুদ্ধার করে, এমন একটি দৃশ্যের অনুকরণ করে যেখানে ব্যবহারকারীরা তথ্যের জন্য অনুরোধ করে৷
 async def get_profiles(cl: httpx.AsyncClient): resp = await cl.get(f'{API_HOST}/profiles', params={'page_len': 10, 'page': 0}, headers=API_HEADERS) return resp.json()


  • ব্রাউজার শুরু করা: স্ক্রিপ্টটি চক্র শুরু করে, প্রতিটিতে অ্যাসিঙ্ক্রোনাসভাবে ব্রাউজার প্রোফাইল শুরু করা জড়িত। এটি এমন একটি দৃশ্যের অনুকরণ করে যেখানে একজন ব্যবহারকারী একসাথে একাধিক ব্রাউজার তৈরি করে এবং ব্রাউজার প্রোফাইল ব্যবহার করে।
 async def start_profile(cl: httpx.AsyncClient, uuid): resp = await cl.post(f'{API_HOST}/profiles/{id}/start', json=data_start, headers=API_HEADERS) if error := resp.json().get('error'): print(f'Profile {id} not started with error {error}')


  • ব্রাউজার বন্ধ করা এবং প্রোফাইল মুছে ফেলা: প্রোফাইল শুরু করার পরে, স্ক্রিপ্ট সক্রিয় প্রোফাইলগুলি নিয়ে আসে এবং সেগুলি বন্ধ করে, তারপরে সমস্ত প্রোফাইল মুছে ফেলা হয়। এই লোড দৃশ্যকল্পটি গতিশীল পরিবর্তনের প্রতি ক্লাউড পরিষেবার প্রতিক্রিয়াশীলতা এবং সংস্থান পরিষ্কারের ক্ষেত্রে এর দক্ষতা মূল্যায়ন করে।
 async def stop_profile(cl: httpx.AsyncClient, uuid): resp = await cl.post(f'{API_HOST}/profiles/{id}/stop', headers=API_HEADERS) if error := resp.json().get('error'): print(f'Profile {id} not stopped with error {error}') async def delete_profile(cl: httpx.AsyncClient, uuid): resp = await cl.delete(f'{API_HOST}/profiles/{id}', headers=API_HEADERS) if error := resp.json().get('error'): print(f'Profile {id} not stopped with error {error}')


  • সংযোগগুলি পর্যবেক্ষণ করা: লোডের প্রভাব বোঝা স্ক্রিপ্টটি সক্রিয় সংযোগগুলি পরীক্ষা করে রিপোর্ট করার মাধ্যমে শেষ হয়৷ এই পদক্ষেপটি লোডের প্রভাব বোঝার জন্য এবং পর্যবেক্ষণ সম্পর্কিত সম্ভাব্য সমস্যাগুলি চিহ্নিত করার জন্য অত্যন্ত গুরুত্বপূর্ণ।
 for conn in cl._transport._pool.connections: if conn._connection._state.value != 1: continue print(f'Connection in progress: {conn}')

কর্মে লোড পরীক্ষা

প্রধান ফাংশন লোড টেস্টিং চক্রকে সাজায়, প্রোফাইলের মাধ্যমে পুনরাবৃত্তি করে এবং অ্যাসিঙ্ক্রোনাস কাজগুলি সম্পাদন করে। প্রতিটি চক্র একটি সিমুলেটেড ব্যবহারকারীর ইন্টারঅ্যাকশন উপস্থাপন করে, ব্রাউজার প্রোফাইল তৈরি, ব্যবহার এবং মুছে ফেলা।


 async def main(): async with httpx.AsyncClient(timeout=httpx.Timeout(timeout=300)) as cl: for _ in range(CYCLES_COUNT): profiles = await get_profiles(cl) start_tasks = [asyncio.create_task(start_profile(cl, profile['id'])) for profile in profiles] await asyncio.gather(*start_tasks) active_browsers = await get_active_profiles(cl) stop_tasks = [asyncio.create_task(stop_profile(cl, active_browser['id'])) for active_browser in active_browsers['data']] await asyncio.gather(*stop_tasks) profiles = await get_profiles(cl) del_tasks = [asyncio.create_task(delete_profile(cl, profile['id'])) for profile in profiles] await asyncio.gather(*del_tasks) # Monitor active connections for insights into load impact

আপনার প্রয়োজন অনুযায়ী লোড পরীক্ষা

এই স্ক্রিপ্টটি তাদের অ্যাপ্লিকেশনের সাথে লোড-পরীক্ষার পরিস্থিতি তৈরি করার জন্য QA-এর একটি ভিত্তি দেখায়। চক্রের সংখ্যা কাস্টমাইজ করে, ব্যবহারকারীর ইন্টারঅ্যাকশন সামঞ্জস্য করে, এবং নির্দিষ্ট API এন্ডপয়েন্টে ফিট করার জন্য স্ক্রিপ্ট পরিবর্তন করে, পরীক্ষকরা বিভিন্ন লোডের অধীনে তাদের অ্যাপ্লিকেশনের কর্মক্ষমতা সম্পর্কে মূল্যবান অন্তর্দৃষ্টি অর্জন করতে পারে। এখানে, সার্ভারের অবস্থা সম্পর্কে তথ্য পেতে, সার্ভারের লোড মূল্যায়ন করতে এবং সম্পদের ব্যবহার এবং লগগুলি ট্র্যাক করতে আপনার প্রয়োজনীয় পর্যবেক্ষণ সরঞ্জামগুলির প্রয়োজন হবে৷ ব্যাপক পর্যবেক্ষণের জন্য Grafana, Kibana, Prometheus, ইত্যাদির মতো টুল ব্যবহার করুন। অতিরিক্তভাবে, আপনার স্ক্রিপ্ট যে প্রতিক্রিয়াগুলি পায় তার উপর ঘনিষ্ঠ নজর রাখুন, আপনার অ্যাপ্লিকেশনের কর্মক্ষমতার পুঙ্খানুপুঙ্খ মূল্যায়ন নিশ্চিত করুন৷ এই পদ্ধতিটি আপনার কার্যকর লোড পরীক্ষা এবং কর্মক্ষমতা বিশ্লেষণে অমূল্য।


উপরন্তু, আরো বাস্তবসম্মত লোড সিমুলেশনের জন্য, আপনার ব্রাউজারে নির্দিষ্ট পৃষ্ঠা খোলার কথা বিবেচনা করুন। যদিও আমি ব্যক্তিগতভাবে আমার ব্রাউজারে একটি স্টার্ট পেজ ব্যবহার করেছি, আপনি একাধিক ট্যাব খুলতে এবং বিভিন্ন পৃষ্ঠায় নেভিগেট করার জন্য Pyppeteer বা Playwright এর মত বিকল্পগুলিও অন্বেষণ করতে পারেন। এই পদ্ধতিটি আপনার লোড-পরীক্ষার দৃশ্যকল্পের সত্যতা বাড়ায়, আপনার অ্যাপ্লিকেশনের সাথে ব্যবহারকারীর মিথস্ক্রিয়া ঘনিষ্ঠভাবে সাদৃশ্যপূর্ণ।


 # Attempt to connect to the browser using the provided profile URL try: browser = await connect({'browserWSEndpoint': browser_url, 'defaultViewport': None}) except Exception as e: # Handle connection errors and print a message print(f'Error occurred when connecting to the browser: {str(e)}') return # Create a new page in the connected browser page = await browser.newPage() # Introduce a brief delay to ensure the page is ready await asyncio.sleep(2) # Set the viewport dimensions for the page width, height = 1920, 1080 await page.setViewport({'width': width, 'height': height}) # Try to navigate to a specific URL try: await page.goto('https://{your_website}') # Wait for 10 seconds to simulate user interaction await page.waitFor(10000) # Introduce another delay for additional stability await asyncio.sleep(5) except pyppeteer.errors.PageError as e: # Handle page navigation errors and print a message print(f'Error occurred during page navigation: {str(e)}') # Attempt to take a screenshot of the page try: await page.screenshot(path='screen.png', fullPage=True) # Print a success message if the screenshot is captured successfully print('Screenshot taken successfully.') except Exception as e: # Handle screenshot capture errors and print a message print(f'Error occurred during taking a screenshot: {str(e)}')

পাইথনের অ্যাসিঙ্ক্রোনাস ক্ষমতা, HTTP লাইব্রেরির সাথে মিলিত, এটিকে লোড-টেস্টিং ক্লাউড-ভিত্তিক সিস্টেমের জন্য একটি বহুমুখী হাতিয়ার করে তোলে। এই উদাহরণটি QA ইঞ্জিনিয়ারদের জন্য একটি সূচনা বিন্দু হিসাবে কাজ করে যারা তাদের লোড-পরীক্ষার প্রচেষ্টায় পাইথনের শক্তি শিখতে চায়।


বিঃদ্রঃ

আমার দৃশ্যে, বর্ণিত স্ক্রিপ্ট শক্তিশালী এবং প্রভাবশালী হতে প্রমাণিত. এটি অসংখ্য সমস্যা সনাক্তকরণ এবং সমাধানে একটি দরকারী টুল হিসেবে কাজ করেছে। স্ক্রিপ্টের আক্রমনাত্মক প্রকৃতি সমালোচনামূলক সমস্যাগুলি চিহ্নিত করতে, কার্যকর ডিবাগিং সহজতর করতে এবং একটি নিরবচ্ছিন্ন এবং উন্নত ব্যবহারকারীর অভিজ্ঞতার জন্য নেতৃত্ব দেওয়ার ক্ষেত্রে ঠিক ছিল, যা একটি QA-এর জন্য বেশ ভাল৷



ধারাবাহিকতায়, আমি পাইথনের মাল্টিপ্রসেসিং মডিউল ব্যবহার করে আরেকটি স্ক্রিপ্ট নিয়ে সংক্ষেপে আলোচনা করব। এই পদ্ধতির লক্ষ্য হচ্ছে টেস্টিং স্ক্রিপ্টের একাধিক দৃষ্টান্ত একযোগে কার্যকর করার মাধ্যমে লোড জেনারেশন বাড়ানো। মাল্টিপ্রসেসিংয়ের প্রাথমিক লক্ষ্য হল একটি স্ক্রিপ্টের কার্য সম্পাদনকে সমান্তরাল করা, পরিষেবার সাথে একযোগে মিথস্ক্রিয়া সক্ষম করা। এই পদ্ধতিটি পূর্বে আলোচনা করা অ্যাসিঙ্ক্রোনাস পদ্ধতির সাথে বৈপরীত্য, যেখানে কাজগুলি ক্রমানুসারে চালানো হয় কিন্তু একই সাথে পরিচালিত হয়। এটি একই অনুরোধের সাথে স্প্যাম/ডিডিওর মতো, তবে এটি খুব দরকারীও হতে পারে।

মূল উপাদান

  • প্রোফাইল পুনরুদ্ধার করার ফাংশন: অ্যাসিঙ্ক্রোনাস স্ক্রিপ্টের মতো, আমাদের এখনও ক্লাউড পরিষেবা থেকে বিদ্যমান ব্রাউজার প্রোফাইলগুলি আনতে হবে।
 def get_profiles(): response = requests.get(url=f"{api}", params=PARAMS, headers=headers) return response


  • ফাংশন: স্ক্রিপ্টের মূল দুটি ফাংশনের চারপাশে ঘোরে: start_profiles এবং stop_profiles। এই ফাংশনগুলি যথাক্রমে ব্রাউজার প্রোফাইলগুলি শুরু এবং শেষ করে।
 def start_profiles(list_of_profiles_uuids): for uuid in list_of_profiles_uuids: # ... (API request to start profile) def stop_profiles(internal_uuids): for uuid in internal_uuids: # ... (API request to stop profile) def run_script(): start_profiles(get_profile_ids()) stop_profiles(list_of_ids)


  • মাল্টিপ্রসেসিং এক্সিকিউশন: স্ক্রিপ্টটি লোড টেস্টিং চক্রকে একাধিকবার সমান্তরালভাবে চালানোর জন্য মাল্টিপ্রসেসিং মডিউল ব্যবহার করে। প্রতিটি চক্রের জন্য, একটি নতুন প্রক্রিয়া তৈরি করা হয়, এবং রান_স্ক্রিপ্ট ফাংশন একই সাথে কার্যকর করা হয়।
 if __name__ == "__main__": for runs in range(0, 5): processes = [] for i in range(20): p = multiprocessing.Process(target=run_script) processes.append(p) p.start() for p in processes: p.join()


মাল্টিপ্রসেসিং দিয়ে কিভাবে লোড জেনারেট করা যায়

  1. সমান্তরাল এক্সিকিউশন: মাল্টিপ্রসেসিং মডিউল দ্বারা উদ্ভূত প্রতিটি প্রক্রিয়া স্বাধীনভাবে কাজ করে, একই সাথে রান_স্ক্রিপ্ট ফাংশন সম্পাদন করে। এই সমান্তরালকরণ একই সাথে পরিষেবাতে পাঠানো অনুরোধের সংখ্যা উল্লেখযোগ্যভাবে বৃদ্ধি করে।
  2. ব্যবহারকারীর মিথস্ক্রিয়া অনুকরণ: সমান্তরালভাবে স্ক্রিপ্টের একাধিক দৃষ্টান্ত চালানোর মাধ্যমে, আমরা একযোগে ক্লাউড পরিষেবার সাথে ইন্টারঅ্যাক্টকারী ব্যবহারকারীদের একটি উচ্চ ভলিউম অনুকরণ করি। এই পদ্ধতিটি এমন পরিস্থিতিতে বিশেষভাবে উপযোগী যেখানে বাস্তব-বিশ্বের ব্যবহারে একযোগে বিপুল সংখ্যক ব্যবহারকারী জড়িত।

সঠিক পদ্ধতি নির্বাচন

মাল্টিপ্রসেসিং লোড-টেস্টিং অ্যাপ্লিকেশনের জন্য একটি কৌশল প্রদান করে। এটি QA ইঞ্জিনিয়ারদের তাদের অ্যাপ্লিকেশনের অনন্য বৈশিষ্ট্যের উপর ভিত্তি করে বিভিন্ন পদ্ধতি নিয়ে পরীক্ষা করার অনুমতি দেয়। যদিও অ্যাসিঙ্ক্রোনাস টেস্টিং সমসাময়িক কাজগুলি পরিচালনায় দক্ষতা প্রদান করে, মাল্টিপ্রসেসিং সমগ্র পরীক্ষার প্রক্রিয়াকে সমান্তরাল করার ক্ষেত্রে দক্ষতা অর্জন করে। আপনি তাদের নির্দিষ্ট লোড-পরীক্ষার লক্ষ্য এবং আবেদনের প্রয়োজনীয়তার সাথে সর্বোত্তমভাবে সারিবদ্ধ পদ্ধতি বেছে নিতে পারেন।


একটি দ্রুত অনুস্মারক:

এই ডেমোটির লক্ষ্য হল প্রাথমিক ধারণাগুলিকে একটি শিক্ষানবিস-বান্ধব বিন্যাসে প্রবর্তন করা, QA পরীক্ষকদের পারফরম্যান্স পরীক্ষায় অংশ নেওয়ার জন্য পাইথনের সরলতা তুলে ধরা।

আপনার যদি প্রোগ্রামিং চ্যালেঞ্জ থাকে, তাহলে গুগল স্টাফ করতে দ্বিধা করবেন না এবং সহকর্মীদের জিজ্ঞাসা করুন, ChatGPT বা অনুরূপ সরঞ্জামগুলি ব্যবহার করুন এবং আপনার লোড-টেস্টিং স্ক্রিপ্টগুলি লিখতে অতিরিক্ত সহায়তার জন্য GitHub Copilot ব্যবহার করুন৷


এছাড়াও এখানে প্রকাশিত.