کتابخانه nose در پایتون
کتابخانه nose یکی از ابزارهای محبوب در پایتون برای انجام تستهای خودکار (Automated Testing) است. این کتابخانه بر پایهی ماژول استاندارد unittest ساخته شده و قابلیتهای اضافی زیادی مانند کشف خودکار تستها، گزارشگیری پیشرفته، پشتیبانی از افزونهها (plugins) و ادغام با CI/CD را فراهم میکند.
هدف کتابخانه Nose چیست؟
در پروژههای بزرگ پایتون، اجرای تستها بهصورت دستی میتواند وقتگیر باشد. nose با سادهسازی فرآیند نوشتن، کشف و اجرای تستها به توسعهدهندگان کمک میکند تا مطمئن شوند کدها به درستی کار میکنند.
- کشف خودکار فایلهای تست بدون نیاز به ثبت دستی آنها
- گزارشدهی بهتر نسبت به unittest
- پشتیبانی از افزونهها برای توسعه قابلیتها
- سازگاری کامل با unittest و doctest
نصب کتابخانه Nose
برای نصب این کتابخانه کافی است از دستور زیر استفاده کنید:
pip install noseپس از نصب، دستور nosetests به محیط شما اضافه میشود که برای اجرای تستها به کار میرود.
ساخت اولین تست با Nose
بیایید با یک مثال ساده شروع کنیم. ابتدا فایل زیر را ایجاد کنید:
# file: test_example.py
def add(a, b):
return a + b
def test_add():
assert add(2, 3) == 5
در این مثال تابعی به نام add تعریف کردهایم و سپس تابع تست test_add را نوشتهایم که بررسی میکند آیا خروجی تابع صحیح است یا خیر.
برای اجرای تست کافی است دستور زیر را در ترمینال وارد کنید:
nosetestsکتابخانه Nose بهصورت خودکار فایلهایی را که با test_ شروع یا به آن ختم میشوند پیدا کرده و اجرا میکند.
الگوی نامگذاری در Nose
Nose برای کشف خودکار تستها از الگوی خاصی پیروی میکند:
- فایلهایی با نامی مشابه
test_*.py - کلاسهایی که با
Testشروع میشوند - توابعی که با
test_شروع میشوند
برای مثال اگر فایلهای زیر را داشته باشید، Nose آنها را بهصورت خودکار شناسایی میکند:
test_math.py
test_utils.py
example_test.py
تست کلاسها با Nose
# file: test_calculator.py
class Calculator:
def multiply(self, a, b):
return a * b
class TestCalculator:
def test_multiply(self):
calc = Calculator()
assert calc.multiply(2, 3) == 6
کلاس TestCalculator با پیشوند Test شروع میشود، بنابراین Nose آن را به عنوان کلاس تست شناسایی کرده و تمام توابعی که با test_ شروع میشوند را اجرا میکند.
اجرای تستها با جزئیات بیشتر
برای مشاهده جزئیات بیشتر از اجرای تستها، میتوانید از گزینه -v (verbose) استفاده کنید:
nosetests -vاین گزینه باعث میشود نام تستها و نتایج آنها در خروجی نمایش داده شود.
مدیریت خطاها و شکست تستها
اگر یکی از تستها شکست بخورد، Nose اطلاعات دقیقی از دلیل شکست ارائه میدهد:
AssertionError: Expected 5 but got 6برای دیباگ سریعتر میتوانید از گزینه --pdb استفاده کنید تا در زمان خطا وارد محیط دیباگر پایتون شوید:
nosetests --pdbافزونههای کتابخانه Nose
یکی از مزایای اصلی Nose پشتیبانی از plugins است. این افزونهها میتوانند برای تولید گزارش HTML، خروجی XML برای Jenkins یا اضافهکردن قابلیتهای دیگر به کار روند.
| افزونه | کاربرد |
|---|---|
| nose-htmloutput | تولید گزارشهای HTML برای تستها |
| nose-xunit | تولید گزارش XML برای سیستمهای CI مانند Jenkins |
| nose-progressive | نمایش زیباتر وضعیت تستها در ترمینال |
برای نصب یکی از افزونهها، کافی است از دستور زیر استفاده کنید:
pip install nose-htmloutputاجرای تستها در پوشه خاص
میتوانید با مشخص کردن مسیر، تنها تستهای موجود در یک فولدر خاص را اجرا کنید:
nosetests tests/Nose به صورت بازگشتی تمام فایلهای تست داخل پوشه tests را شناسایی و اجرا میکند.
مقایسه Nose با unittest و pytest
| ویژگی | unittest | nose | pytest |
|---|---|---|---|
| کشف خودکار تستها | محدود | بله | بله |
| پشتیبانی از افزونهها | خیر | بله | بله |
| سادگی در استفاده | متوسط | ساده | بسیار ساده |
| وضعیت توسعه | فعال | غیرفعال (deprecated) | فعال و بهروز |
نکته مهم: توقف توسعه Nose
توسعهی کتابخانه Nose از سال ۲۰۱۵ متوقف شده است و دیگر بهروزرسانی جدیدی دریافت نمیکند. به همین دلیل، برای پروژههای جدید پیشنهاد میشود از pytest بهجای Nose استفاده کنید. با این حال، اگر در پروژهای قدیمی با Nose مواجه شدید، دانستن ساختار و طرز کار آن هنوز مفید است.
نحوه مهاجرت از Nose به pytest
اگر پروژهی شما از Nose استفاده میکند، مهاجرت به pytest معمولاً ساده است زیرا pytest با ساختار Nose سازگار است. به عنوان مثال:
# فایل تست در Nose
def test_sum():
assert sum([1, 2, 3]) == 6
# همان تست در pytest بدون تغییر قابل اجراست
def test_sum():
assert sum([1, 2, 3]) == 6
اکثر تستهای Nose در pytest بدون هیچ تغییری اجرا میشوند، اما میتوانید از امکانات اضافی pytest مانند fixtures و parametrization برای بهبود ساختار تستها استفاده کنید.
بهترین روشها در استفاده از Nose
- نامگذاری دقیق توابع و کلاسهای تست برای خوانایی بیشتر
- تقسیم تستها به چند فایل برای مدیریت سادهتر
- استفاده از افزونهها برای گزارشدهی بهتر
- اجرای منظم تستها در فرآیند CI/CD
جمعبندی
کتابخانه nose ابزاری قدرتمند برای اجرای تستهای خودکار در پایتون است که با وجود توقف توسعه، هنوز در پروژههای قدیمی کاربرد دارد. این کتابخانه فرآیند نوشتن و اجرای تستها را بسیار سادهتر از unittest میکند و قابلیت کشف خودکار و پشتیبانی از افزونهها را دارد. با این حال، برای پروژههای جدید، توصیه میشود از pytest استفاده کنید که نسخهای مدرنتر و پشتیبانیشده از ایدههای Nose محسوب میشود.
آیا این مطلب برای شما مفید بود ؟




