خانه / درس ۷ سطح متوسط: تست پیشرفته، پروفایلینگ، دیباگ و ابزارهای توسعه حرفهای در پایتون درس ۷ سطح متوسط: تست پیشرفته، پروفایلینگ، دیباگ و ابزارهای توسعه حرفهای در پایتون 📅 ۱۴۰۴/۰۹/۰۷ ✍️ سجاد ⌛ 4 دقیقه مطالعه 👁️ 27 پایتون | Python متوسط 🗨️ 🤍 0 📤 0% ‹ بستن لیست دروس بازکردن لیست دروس پایتون | Python متوسط ▾ سلام مهندس حرفهای پایتون! تبریک میگم که تا درس هفتم سطح متوسط رسیدی. الان دیگه فقط یه برنامهنویس نیستی – یه توسعهدهنده واقعی شدی که کدش تمیز، سریع، قابل اعتماد و کاملاً تستشده است. تو این درس قراره با ابزارها و تکنیکهایی آشنا بشی که برنامهنویسهای حرفهای در شرکتهای بزرگ هر روز ازشون استفاده میکنن: تست پیشرفته پایتون با pytest، پروفایلینگ عملکرد، دیباگ هوشمند، لاگگیری حرفهای و ابزارهای توسعه مثل Git، محیط مجازی و Docker. وقتی این درس تموم بشه، تو دیگه هیچوقت کد بدون تست نمینویسی، باگها قبل از اینکه مشتری ببینه پیدا میشن و عملکرد برنامهات همیشه بهینه است. اگه درسهای قبلی رو خوب بلدی، الان بهترین زمانه که به یه توسعهدهنده تمامعیار تبدیل بشی. آمادهای؟ بریم که آخرین لایه حرفهایگری رو به مهارتهات اضافه کنیم! چرا تست پیشرفته در پایتون اینقدر حیاتیه؟ یه خطای کوچک توی کد میتونه میلیونها تومان ضرر بزنه. توی شرکتهای بزرگ، قبل از هر آپدیت، هزاران تست خودکار اجرا میشه. تست پیشرفته یعنی: Unit Test – تست توابع کوچک Integration Test – تست ارتباط ماژولها End-to-End Test – تست کل سیستم Code Coverage – چند درصد کد تست شده؟ pytest – قدرتمندترین ابزار تست پایتون فراموش کن unittest قدیمی رو! pytest سادهتر، قویتر و حرفهایتره. کپی# نصب pip install pytest pytest-cov کپی# calculator.py def add(a, b): return a + b def divide(a, b): if b == 0: raise ValueError("تقسیم بر صفر!") return a / b # test_calculator.py import pytest from calculator import add, divide def test_add(): assert add(2, 3) == 5 assert add(-1, 1) == 0 def test_divide(): assert divide(10, 2) == 5 def test_divide_by_zero(): with pytest.raises(ValueError): divide(10, 0) کپی# اجرا با پوشش کد pytest --cov=calculator تست پیشرفته: Mock، Fixture و Parametrize کپی# تست API خارجی بدون اتصال واقعی from unittest.mock import patch @patch('requests.get') def test_api(mock_get): mock_get.return_value.json.return_value = {"name": "علی"} result = get_user_name() assert result == "علی" کپی# استفاده از fixture برای دیتابیس تست @pytest.fixture def temp_db(): db = create_test_database() yield db db.drop() def test_with_db(temp_db): temp_db.insert({"name": "سارا"}) assert temp_db.count() == 1 پروفایلینگ – پیدا کردن گلوگاههای عملکرد کپیimport cProfile import time def slow_function(): total = 0 for i in range(1000000): total += i ** 2 return total # پروفایل کردن cProfile.run('slow_function()') # یا با decorator def profile(func): def wrapper(*args, **kwargs): import cProfile, pstats pr = cProfile.Profile() pr.enable() result = func(*args, **kwargs) pr.disable() ps = pstats.Stats(pr).sort_stats('cumulative') ps.print_stats(10) return result return wrapper دیباگ حرفهای با pdb و VS Code کپی# دیباگ تعاملی import pdb def buggy_function(n): result = 0 for i in range(n): pdb.set_trace() # اینجا متوقف میشه result += i return result لاگگیری حرفهای با logging کپیimport logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler("app.log", encoding='utf-8'), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) def process_user(user_id): logger.info(f"شروع پردازش کاربر {user_id}") try: # کد اصلی logger.debug("در حال اتصال به دیتابیس...") except Exception as e: logger.error(f"خطا در پردازش کاربر {user_id}: {e}") raise محیط مجازی، Git و Docker – ابزارهای حرفهای کپی# محیط مجازی python -m venv myenv source myenv/bin/activate # لینوکس/مک myenv\Scripts\activate # ویندوز # Git حرفهای git init git add . git commit -m "feat: اضافه کردن تست پیشرفته" git branch feature/new-ui git push origin main ۱۲ تمرین آتشین برای تبدیل شدن به توسعهدهنده حرفهای یه پروژه کامل با pytest و پوشش بالای ۹۰٪ تست کن تست parametrize برای ۱۰ حالت مختلف بنویس یه API خارجی رو با mock تست کن یه fixture برای دیتابیس تست بساز عملکرد یه تابع رو با cProfile تحلیل کن و بهینه کن سیستم لاگگیری کامل با ۵ سطح مختلف بساز یه decorator برای اندازهگیری زمان اجرا بنویس با pdb یه باگ پیچیده رو پیدا کن یه پروژه رو با Docker کانتینر کن Git workflow کامل (branch, pull request, merge) تمرین کن یه ابزار خط فرمان با argparse و تست کامل بساز کلاس کامل TestRunner بساز که همه تستها رو خودکار اجرا کنه پروژه نهایی درس: سیستم تست و مانیتورینگ کامل کپیimport pytest import logging from datetime import datetime # logger.py import logging logger = logging.getLogger("MyApp") handler = logging.FileHandler("app.log") formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(logging.INFO) # monitor.py class PerformanceMonitor: def __init__(self): self.start_time = None def start(self): self.start_time = datetime.now() logger.info("شروع مانیتورینگ عملکرد") def stop(self): if self.start_time: elapsed = (datetime.now() - self.start_time).total_seconds() logger.info(f"زمان اجرا: {elapsed:.2f} ثانیه") # تست نهایی monitor = PerformanceMonitor() monitor.start() # کد اصلی اینجا اجرا میشه time.sleep(2) monitor.stop() جمعبندی و قدم بعدی تبریک میگم مهندس واقعی! تو الان یه توسعهدهنده کامل هستی که کدش تستشده، بهینه، قابل نگهداری و کاملاً حرفهای است. این دانش دقیقاً همون چیزیه که شرکتهای بزرگ از یه برنامهنویس ارشد انتظار دارن. درس بعدی قراره درباره امنیت، رمزنگاری و بهترین روشهای نوشتن کد امن باشه. تمرینها رو انجام بده، پروژه رو توی GitHub آپلود کن و منتظر درس بعدی باش. تو دیگه فقط یه برنامهنویس نیستی – یه حرفهای تمامعیار شدی! ← درس قبلی: درس ۶ سطح متوسط: طراحی الگوریتم و پیچیدگی زمانی/فضایی + تکنیکهای بهینهسازی در پایتون درس بعدی: درس ۸ سطح متوسط: امنیت در پایتون – رمزنگاری، اعتبارسنجی، جلوگیری از حملات و نوشتن کد امن → برچسبها: code coveragecProfiledevopsDockerfixtureGitloggingmockpdbpytestunit testآموزش متوسط پایتونپایتونپروژه پایتونپروفایلینگتست پیشرفتهتست خودکارتوسعه حرفهایتوسعه نرمافزاردیباگمحیط مجازی ارسال نظر جدید لغو پاسخ ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم.
سلام مهندس حرفهای پایتون! تبریک میگم که تا درس هفتم سطح متوسط رسیدی. الان دیگه فقط یه برنامهنویس نیستی – یه توسعهدهنده واقعی شدی که کدش تمیز، سریع، قابل اعتماد و کاملاً تستشده است. تو این درس قراره با ابزارها و تکنیکهایی آشنا بشی که برنامهنویسهای حرفهای در شرکتهای بزرگ هر روز ازشون استفاده میکنن: تست پیشرفته پایتون با pytest، پروفایلینگ عملکرد، دیباگ هوشمند، لاگگیری حرفهای و ابزارهای توسعه مثل Git، محیط مجازی و Docker. وقتی این درس تموم بشه، تو دیگه هیچوقت کد بدون تست نمینویسی، باگها قبل از اینکه مشتری ببینه پیدا میشن و عملکرد برنامهات همیشه بهینه است. اگه درسهای قبلی رو خوب بلدی، الان بهترین زمانه که به یه توسعهدهنده تمامعیار تبدیل بشی. آمادهای؟ بریم که آخرین لایه حرفهایگری رو به مهارتهات اضافه کنیم! چرا تست پیشرفته در پایتون اینقدر حیاتیه؟ یه خطای کوچک توی کد میتونه میلیونها تومان ضرر بزنه. توی شرکتهای بزرگ، قبل از هر آپدیت، هزاران تست خودکار اجرا میشه. تست پیشرفته یعنی: Unit Test – تست توابع کوچک Integration Test – تست ارتباط ماژولها End-to-End Test – تست کل سیستم Code Coverage – چند درصد کد تست شده؟ pytest – قدرتمندترین ابزار تست پایتون فراموش کن unittest قدیمی رو! pytest سادهتر، قویتر و حرفهایتره. کپی# نصب pip install pytest pytest-cov کپی# calculator.py def add(a, b): return a + b def divide(a, b): if b == 0: raise ValueError("تقسیم بر صفر!") return a / b # test_calculator.py import pytest from calculator import add, divide def test_add(): assert add(2, 3) == 5 assert add(-1, 1) == 0 def test_divide(): assert divide(10, 2) == 5 def test_divide_by_zero(): with pytest.raises(ValueError): divide(10, 0) کپی# اجرا با پوشش کد pytest --cov=calculator تست پیشرفته: Mock، Fixture و Parametrize کپی# تست API خارجی بدون اتصال واقعی from unittest.mock import patch @patch('requests.get') def test_api(mock_get): mock_get.return_value.json.return_value = {"name": "علی"} result = get_user_name() assert result == "علی" کپی# استفاده از fixture برای دیتابیس تست @pytest.fixture def temp_db(): db = create_test_database() yield db db.drop() def test_with_db(temp_db): temp_db.insert({"name": "سارا"}) assert temp_db.count() == 1 پروفایلینگ – پیدا کردن گلوگاههای عملکرد کپیimport cProfile import time def slow_function(): total = 0 for i in range(1000000): total += i ** 2 return total # پروفایل کردن cProfile.run('slow_function()') # یا با decorator def profile(func): def wrapper(*args, **kwargs): import cProfile, pstats pr = cProfile.Profile() pr.enable() result = func(*args, **kwargs) pr.disable() ps = pstats.Stats(pr).sort_stats('cumulative') ps.print_stats(10) return result return wrapper دیباگ حرفهای با pdb و VS Code کپی# دیباگ تعاملی import pdb def buggy_function(n): result = 0 for i in range(n): pdb.set_trace() # اینجا متوقف میشه result += i return result لاگگیری حرفهای با logging کپیimport logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler("app.log", encoding='utf-8'), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) def process_user(user_id): logger.info(f"شروع پردازش کاربر {user_id}") try: # کد اصلی logger.debug("در حال اتصال به دیتابیس...") except Exception as e: logger.error(f"خطا در پردازش کاربر {user_id}: {e}") raise محیط مجازی، Git و Docker – ابزارهای حرفهای کپی# محیط مجازی python -m venv myenv source myenv/bin/activate # لینوکس/مک myenv\Scripts\activate # ویندوز # Git حرفهای git init git add . git commit -m "feat: اضافه کردن تست پیشرفته" git branch feature/new-ui git push origin main ۱۲ تمرین آتشین برای تبدیل شدن به توسعهدهنده حرفهای یه پروژه کامل با pytest و پوشش بالای ۹۰٪ تست کن تست parametrize برای ۱۰ حالت مختلف بنویس یه API خارجی رو با mock تست کن یه fixture برای دیتابیس تست بساز عملکرد یه تابع رو با cProfile تحلیل کن و بهینه کن سیستم لاگگیری کامل با ۵ سطح مختلف بساز یه decorator برای اندازهگیری زمان اجرا بنویس با pdb یه باگ پیچیده رو پیدا کن یه پروژه رو با Docker کانتینر کن Git workflow کامل (branch, pull request, merge) تمرین کن یه ابزار خط فرمان با argparse و تست کامل بساز کلاس کامل TestRunner بساز که همه تستها رو خودکار اجرا کنه پروژه نهایی درس: سیستم تست و مانیتورینگ کامل کپیimport pytest import logging from datetime import datetime # logger.py import logging logger = logging.getLogger("MyApp") handler = logging.FileHandler("app.log") formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(logging.INFO) # monitor.py class PerformanceMonitor: def __init__(self): self.start_time = None def start(self): self.start_time = datetime.now() logger.info("شروع مانیتورینگ عملکرد") def stop(self): if self.start_time: elapsed = (datetime.now() - self.start_time).total_seconds() logger.info(f"زمان اجرا: {elapsed:.2f} ثانیه") # تست نهایی monitor = PerformanceMonitor() monitor.start() # کد اصلی اینجا اجرا میشه time.sleep(2) monitor.stop() جمعبندی و قدم بعدی تبریک میگم مهندس واقعی! تو الان یه توسعهدهنده کامل هستی که کدش تستشده، بهینه، قابل نگهداری و کاملاً حرفهای است. این دانش دقیقاً همون چیزیه که شرکتهای بزرگ از یه برنامهنویس ارشد انتظار دارن. درس بعدی قراره درباره امنیت، رمزنگاری و بهترین روشهای نوشتن کد امن باشه. تمرینها رو انجام بده، پروژه رو توی GitHub آپلود کن و منتظر درس بعدی باش. تو دیگه فقط یه برنامهنویس نیستی – یه حرفهای تمامعیار شدی! ← درس قبلی: درس ۶ سطح متوسط: طراحی الگوریتم و پیچیدگی زمانی/فضایی + تکنیکهای بهینهسازی در پایتون درس بعدی: درس ۸ سطح متوسط: امنیت در پایتون – رمزنگاری، اعتبارسنجی، جلوگیری از حملات و نوشتن کد امن → برچسبها: code coveragecProfiledevopsDockerfixtureGitloggingmockpdbpytestunit testآموزش متوسط پایتونپایتونپروژه پایتونپروفایلینگتست پیشرفتهتست خودکارتوسعه حرفهایتوسعه نرمافزاردیباگمحیط مجازی