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

۱۲ تمرین آتشین برای تبدیل شدن به توسعه‌دهنده حرفه‌ای

  1. یه پروژه کامل با pytest و پوشش بالای ۹۰٪ تست کن
  2. تست parametrize برای ۱۰ حالت مختلف بنویس
  3. یه API خارجی رو با mock تست کن
  4. یه fixture برای دیتابیس تست بساز
  5. عملکرد یه تابع رو با cProfile تحلیل کن و بهینه کن
  6. سیستم لاگ‌گیری کامل با ۵ سطح مختلف بساز
  7. یه decorator برای اندازه‌گیری زمان اجرا بنویس
  8. با pdb یه باگ پیچیده رو پیدا کن
  9. یه پروژه رو با Docker کانتینر کن
  10. Git workflow کامل (branch, pull request, merge) تمرین کن
  11. یه ابزار خط فرمان با argparse و تست کامل بساز
  12. کلاس کامل 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 آپلود کن و منتظر درس بعدی باش. تو دیگه فقط یه برنامه‌نویس نیستی – یه حرفه‌ای تمام‌عیار شدی!

ارسال نظر جدید

گزارش دیدگاه