تست و دیباگینگ در پایتون

ایجاد شده توسط دکتر مصطفی جلیلی در آموزش برنامه نویسی پایتون 23 مارس 2025
اشتراک گذاری

در برنامه‌نویسی، خطا بخش اجتناب‌ناپذیر کار ماست. اما هنر یک توسعه‌دهنده حرفه‌ای اینه که بتونه به‌درستی باگ‌ها رو شناسایی و رفع کنه و قبل از تحویل پروژه مطمئن باشه کدها درست کار می‌کنن. در این مقاله به سه ابزار و تکنیک مهم در دیباگ و تست کدهای پایتون می‌پردازیم:


1 - دیباگ کردن با pdb


pdb مخفف Python Debugger هست و ابزار داخلی پایتونه برای دیباگ کردن کدها به‌صورت خط به خط.


مثال ساده:


import pdb
def divide(a, b):
pdb.set_trace()
result = a / b
return result
print(divide(10, 0))

در اینجا برنامه با اجرای pdb.set_trace() متوقف می‌شه و می‌تونید دستورات دیباگر مثل n (رفتن به خط بعدی)، c (ادامه اجرا) یا p variable (چاپ مقدار متغیر) رو اجرا کنید.


دستورات کاربردی در pdb:



  • n: اجرای خط بعدی

  • c: ادامه اجرا تا breakpoint بعدی

  • q: خروج از pdb

  • p: چاپ مقدار متغیر

  • l: لیست کردن خطوط کد

  • s: ورود به تابع


نکته: pdb.set_trace() رو فقط برای دیباگ استفاده کنید و بعد از رفع باگ‌ها از کد حذفش کنید.




2 -  نوشتن تست‌های واحد با unittest و pytest


نوشتن تست یونیت باعث می‌شه قبل از اجرای واقعی برنامه، مطمئن بشیم توابع و کلاس‌ها درست کار می‌کنن.


unittest (کتابخانه پیش‌فرض پایتون)


import unittest
def add(a, b):
return a + b
class TestMath(unittest.TestCase):
def test_add(self):
self.assertEqual(add(2, 3), 5)
self.assertEqual(add(-1, 1), 0)
if __name__ == '__main__':
unittest.main()

اجرای تست:


python test_file.py

pytest (ساده‌تر و محبوب‌تر)


def multiply(a, b):
return a * b
def test_multiply():
assert multiply(3, 4) == 12
assert multiply(-1, 5) == -5

اجرای تست:


pytest test_file.py

چرا pytest بهتره؟



  • سینتکس ساده‌تر

  • خروجی خواناتر

  • قابلیت اضافه کردن پلاگین‌های حرفه‌ای




3 -  مدیریت لاگ‌ها با logging


چاپ ساده با print() توی پروژه‌های بزرگ جواب نمی‌ده! با ماژول logging می‌تونید لاگ‌هایی با سطح‌بندی و تنظیمات مختلف ایجاد کنید.


مثال:


import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def divide(a, b):
try:
result = a / b
logging.info(f"Division successful: {result}")
return result
except ZeroDivisionError as e:
logging.error("Cannot divide by zero!")
return None
divide(10, 2)
divide(10, 0)

خروجی لاگ:


2025-03-23 12:00:00 - INFO - Division successful: 5.0
2025-03-23 12:00:00 - ERROR - Cannot divide by zero!

سطوح مختلف لاگ:



  • DEBUG: برای جزئیات بیشتر دیباگ

  • INFO: برای اطلاعات کلی روند اجرا

  • WARNING: برای هشدارها

  • ERROR: برای خطاها

  • CRITICAL: برای خطاهای بحرانی


نکته: می‌تونید لاگ‌ها رو به فایل هم ارسال کنید:


logging.basicConfig(filename='app.log', level=logging.INFO)



جمع‌بندی


🔹 با pdb می‌تونید کد رو خط به خط بررسی کنید.
🔹 با unittest و pytest می‌تونید مطمئن بشید که توابع، همونطوری که باید کار می‌کنن.
🔹 با logging لاگ‌های حرفه‌ای برای بررسی مشکلات واقعی در محیط production می‌نویسید.





تجربه شما چیه؟ از کدوم ابزار برای دیباگ یا تست بیشتر استفاده می‌کنید؟


نظرات (0)

اشتراک گذاری

این پست را با دیگران به اشتراک بگذارید

تنظیمات GDPR

When you visit any of our websites, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and manage your preferences. Please note, that blocking some types of cookies may impact your experience of the site and the services we are able to offer.