test --- بسته آزمونهای رگرسیون برای پایتون¶
توجه
بستهی test فقط برای استفادهی داخلی توسط پایتون در نظر گرفته شده است. این بسته بهمنظور بهرهمندی توسعهدهندگان اصلی پایتون مستند شده است. هرگونه استفاده از این بسته خارج از کتابخانهی استاندارد پایتون توصیه نمیشود، زیرا کد ذکرشده در اینجا ممکن است بین نسخههای پایتون بدون اطلاع تغییر کند یا حذف شود.
بستهی test شامل تمام آزمونهای رگرسیون پایتون و همچنین ماژولهای test.support و test.regrtest است. از test.support برای بهبود آزمونهای شما استفاده میشود، در حالی که test.regrtest بدنهی آزمون را راهبری میکند.
هر ماژول در بستهی test که نام آن با test_ شروع میشود، یک بدنهی آزمون برای یک ماژول یا قابلیت مشخص است. همهی آزمونهای جدید باید با استفاده از ماژول unittest یا doctest نوشته شوند. برخی آزمونهای قدیمیتر با استفاده از شیوهی آزموننویسی «سنتی» نوشته شدهاند که خروجی چاپشده در sys.stdout را مقایسه میکند؛ این شیوه از آزمون، منسوخ محسوب میشود.
همچنین ملاحظه نمائید
نوشتن آزمون واحدها برای بسته test¶
ترجیح داده میشود آزمونهایی که از ماژول unittest استفاده میکنند، چند دستورالعمل را رعایت کنند. یکی از این دستورالعملها این است که نام ماژول آزمون با test_ شروع شود و با نام ماژولی که آزمون میشود پایان یابد. متدهای آزمون در ماژول آزمون باید با test_ شروع شوند و با توصیفی از آنچه متد آزمون میکند پایان یابند. این کار لازم است تا راهانداز آزمون متدها را بهعنوان متدهای آزمون شناسایی کند. همچنین نباید هیچ رشتهی مستندسازی برای متد درج شود. برای مستندسازی متدهای آزمون باید از یک کامنت (مانند # Tests function returns only True or False) استفاده شود. این کار به این دلیل انجام میشود که رشته مستندات در صورت وجود چاپ میشوند و بنابراین مشخص نمیشود چه آزمونی در حال اجرا است.
اغلب از یک کد پیشساخته (boilerplate) ساده استفاده میشود:
import unittest
from test import support
class MyTestCase1(unittest.TestCase):
# Only use setUp() and tearDown() if necessary
def setUp(self):
... code to execute in preparation for tests ...
def tearDown(self):
... code to execute to clean up after tests ...
def test_feature_one(self):
# Test feature one.
... testing code ...
def test_feature_two(self):
# Test feature two.
... testing code ...
... more test methods ...
class MyTestCase2(unittest.TestCase):
... same structure as MyTestCase1 ...
... more test classes ...
if __name__ == '__main__':
unittest.main()
این الگوی کد اجازه میدهد بدنهی آزمون توسط test.regrtest، بهتنهایی بهعنوان اسکریپتی که از رابط خط فرمان unittest پشتیبانی میکند، یا از طریق رابط خط فرمان python -m unittest اجرا شود.
هدف از آزمون رگرسیون این است که تلاش کنید کد را بشکنید. این امر به چند رهنمود منجر میشود که باید رعایت شوند:
بدنهی آزمون باید همه کلاسها، توابع و ثابتها را آزمایش کند. این شامل نهتنها API خارجیای است که به دنیای بیرون ارائه میشود، بلکه شامل کد «خصوصی» نیز میشود.
آزمون جعبهسفید (بررسی کدِ تحت آزمون هنگام نوشتن آزمونها) ترجیح داده میشود. آزمون جعبهسیاه (آزمون تنها رابط کاربری منتشرشده) به اندازه کافی کامل نیست تا اطمینان حاصل شود که همهی موارد مرزی و لبهای آزمایش شدهاند.
اطمینان حاصل کنید که همهی مقادیر ممکن، از جمله مقادیر نامعتبر، آزمایش شدهاند. این کار تضمین میکند که نهتنها همهی مقادیر معتبر قابلقبول هستند، بلکه مقادیر نامناسب نیز بهدرستی مدیریت میشوند.
تا حد ممکن مسیرهای کد را پیمایش کنید. محلهای وقوع شاخهبندی را آزمون کنید و بدینترتیب ورودی را بهگونهای تنظیم کنید که اطمینان حاصل شود تا حد ممکن مسیرهای متفاوتی از کد طی میشود.
برای هر اشکالی که در کد آزمونشده کشف میشود، یک آزمون صریح اضافه کنید. این کار اطمینان میدهد که اگر کد در آینده تغییر کند، خطا دوباره ظاهر نمیشود.
حتماً پس از آزمونهای خود پاکسازی کنید (مانند بستن و حذف همهی پروندههای موقت).
اگر آزمونی به شرط خاصی از سیستمعامل وابسته است، پیش از اقدام به اجرای آزمون، تأیید کنید که آن شرط از قبل وجود دارد.
تا حد امکان ماژولهای کمتری را ایمپورت کنید و این کار را در اسرع وقت انجام دهید. این کار هم وابستگیهای خارجی آزمونها و هم رفتار ناهنجار احتمالی ناشی از عوارض جانبی ایمپورت کردن یک ماژول را به حداقل میرساند.
سعی کنید بازاستفاده از کد را به حداکثر برسانید. گاهی ممکن است آزمونها تنها به اندازهی نوع ورودی استفادهشده متفاوت باشند. با ایجاد زیرکلاسی از یک کلاس آزمون پایه که ورودی را مشخص میکند، تکرار کد را به حداقل برسانید:
class TestFuncAcceptsSequencesMixin: func = mySuperWhammyFunction def test_func(self): self.func(self.arg) class AcceptLists(TestFuncAcceptsSequencesMixin, unittest.TestCase): arg = [1, 2, 3] class AcceptStrings(TestFuncAcceptsSequencesMixin, unittest.TestCase): arg = 'abc' class AcceptTuples(TestFuncAcceptsSequencesMixin, unittest.TestCase): arg = (1, 2, 3)
هنگام استفاده از این الگو، به یاد داشته باشید که همه کلاسهایی که از
unittest.TestCaseارث میبرند، بهعنوان آزمون اجرا میشوند. کلاسTestFuncAcceptsSequencesMixinدر مثال بالا هیچ دادهای ندارد و بنابراین نمیتواند بهتنهایی اجرا شود، از این رو ازunittest.TestCaseارث نمیبرد.
همچنین ملاحظه نمائید
- توسعه آزمونمحور
کتابی از کنت بک دربارهی نوشتن آزمونها پیش از کد.
اجرای آزمونها با استفاده از رابط خط فرمان¶
بستهی test را میتوان بهکمک گزینهی -m بهصورت یک اسکریپت برای اجرای بدنهی آزمونهای رگرسیون پایتون اجرا کرد: python -m test. در پشت صحنه، این بسته از test.regrtest استفاده میکند؛ فراخوانی python -m test.regrtest که در نسخههای پیشین پایتون استفاده میشد، همچنان کار میکند. اجرای اسکریپت بهتنهایی بهطور خودکار اجرای همهی آزمونهای رگرسیون موجود در بستهی test را آغاز میکند. این کار با یافتن همهی ماژولهای موجود در بسته که نامشان با test_ شروع میشود، ایمپورت کردن آنها، و اجرای تابع test_main() در صورت وجود، یا بارگذاری آزمونها از طریق unittest.TestLoader.loadTestsFromModule در صورت نبود test_main انجام میشود. نام آزمونهای مورد نظر برای اجرا نیز میتواند به اسکریپت داده شود. مشخص کردن یک آزمون رگرسیون بهصورت تکی (python -m test test_spam) خروجی را به حداقل میرساند و فقط چاپ میکند که آزمون موفقیتآمیز بوده یا شکست خورده است.
اجرای مستقیم test به شما امکان میدهد تعیین کنید چه منابعی برای استفاده در آزمونها در دسترس باشند. این کار را با استفاده از گزینه -u خط فرمان انجام میدهید. مشخص کردن all بهعنوان مقدار گزینه -u تمام منابع ممکن را فعال میکند: python -m test -uall. اگر همه منابع بهجز یک منبع مطلوب باشند (حالت رایجتر)، میتوانید فهرستی جداشده با ویرگول از منابعی که مطلوب نیستند را پس از all ذکر کنید. فرمان python -m test -uall,-audio,-largefile، test را با همه منابع بهجز منابع audio و largefile اجرا میکند. برای دریافت فهرستی از همه منابع و گزینههای بیشتر خط فرمان، python -m test -h را اجرا کنید.
برخی روشهای دیگر برای اجرای آزمونهای رگرسیون، به این بستگی دارند که آزمونها روی کدام سکو اجرا میشوند. در یونیکس، میتوانید make test را در پوشهی سطح بالایی که پایتون در آن ساخته شده است اجرا کنید. در ویندوز، اجرای rt.bat از پوشهی PCbuild خود، تمام آزمونهای رگرسیون را اجرا خواهد کرد.
اضافه شده در نسخهی 3.14: خروجی بهطور پیشفرض رنگی است و میتوان آن را با استفاده از متغیرهای محیطی کنترل کرد.
test.support --- ابزارهایی برای بدنهی آزمون پایتون¶
ماژول test.support از بدنهی آزمونهای رگرسیون پایتون پشتیبانی میکند.
توجه
test.support یک ماژول عمومی نیست. این ماژول در اینجا مستند شده است تا به توسعهدهندگان پایتون در نوشتن آزمونها کمک کند. API این ماژول در معرض تغییر است و ممکن است بین نسخهها بدون ملاحظات سازگاری با نسخههای پیشین تغییر کند.
این ماژول استثناهای زیر را تعریف میکند:
- exception test.support.TestFailed¶
استثنایی که هنگام شکست یک آزمون پرتاب میشود. این استثنا به نفع آزمونهای مبتنی بر
unittestو متدهای ادعا درunittest.TestCaseمنسوخ شده است.
- exception test.support.ResourceDenied¶
زیرکلاسی از
unittest.SkipTest. هنگامی که یک منبع (مانند اتصال شبکه) در دسترس نباشد، پرتاب میشود. توسط تابعrequires()پرتاب میشود.
ماژول test.support ثابتهای زیر را تعریف میکند:
- test.support.verbose¶
هنگامی که خروجی پرگو فعال باشد،
Trueاست. اگر اطلاعات دقیقتری درباره یک آزمون در حال اجرا مورد نیاز باشد، باید بررسی شود. verbose توسطtest.regrtestتنظیم میشود.
- test.support.is_jython¶
اگر مفسر در حال اجرا Jython باشد،
Trueاست.
- test.support.is_android¶
اگر
sys.platformبرابرandroidباشد،Trueاست.
- test.support.is_emscripten¶
Trueاگرsys.platformبرابرemscriptenباشد.
- test.support.is_wasi¶
Trueاگرsys.platformبرابرwasiباشد.
- test.support.is_apple_mobile¶
اگر
sys.platformبرابرios،tvosیاwatchosباشد،Trueاست.
- test.support.is_apple¶
اگر
sys.platformبرابرdarwinباشد یاis_apple_mobileبرابرTrueباشد،Trueاست.
- test.support.unix_shell¶
مسیر پوسته اگر در ویندوز نباشد؛ در غیر این صورت
None.
- test.support.LOOPBACK_TIMEOUT¶
مهلت به ثانیه برای آزمونهایی که از یک سرور شبکهای گوشدهنده به رابط حلقه برگشت محلی شبکه مانند
127.0.0.1استفاده میکنند.مهلت زمانی بهاندازه کافی طولانی است تا از شکست آزمون جلوگیری کند: در نظر گرفته شده است که کلاینت و سرور میتوانند در نخهای مختلف یا حتی فرآیندهای مختلف اجرا شوند.
مهلت زمانی باید برای متدهای
connect()،recv()وsend()درsocket.socketبهاندازه کافی طولانی باشد.Its default value is 10 seconds.
همچنین
INTERNET_TIMEOUTرا ببینید.
- test.support.INTERNET_TIMEOUT¶
مهلت زمانی بر حسب ثانیه برای درخواستهای شبکهای که به سمت اینترنت ارسال میشوند.
مهلت زمانی بهاندازه کافی کوتاه است تا از انتظار بیش از حد یک آزمون در صورت مسدود بودن درخواست اینترنتی به هر دلیلی جلوگیری کند.
معمولاً، یک مهلت زمانی با استفاده از
INTERNET_TIMEOUTنباید یک آزمون را بهعنوان شکستخورده علامتگذاری کند، بلکه باید در عوض آن آزمون را رد کند:transient_internet()را ببینید.مقدار پیشفرض آن ۱ دقیقه است.
همچنین
LOOPBACK_TIMEOUTرا ببینید.
- test.support.SHORT_TIMEOUT¶
مهلت به ثانیه برای علامتگذاری یک آزمون بهعنوان شکستخورده، اگر اجرای آن «بیش از حد طولانی» شود.
مقدار مهلت زمانی به گزینهی خط فرمان
--timeoutدر regrtest بستگی دارد.اگر آزمونی که از
SHORT_TIMEOUTاستفاده میکند، روی باتهای ساخت کند (buildbots) شروع به شکستهای تصادفی کرد، بهجای آن ازLONG_TIMEOUTاستفاده کنید.مقدار پیشفرض آن ۳۰ ثانیه است.
- test.support.LONG_TIMEOUT¶
مهلت بر حسب ثانیه برای تشخیص زمانی که یک آزمون آویزان میشود.
این مقدار بهاندازهی کافی طولانی است تا خطر شکست آزمون در کندترین باتهای ساخت پایتون (buildbots) را کاهش دهد. نباید از آن برای علامتگذاری یک آزمون بهعنوان شکستخورده استفاده شود، اگر آزمون «بیش از حد» طول بکشد. مقدار مهلت زمانی به گزینهی خط فرمان
--timeoutدر regrtest بستگی دارد.مقدار پیشفرض آن ۵ دقیقه است.
همچنین ببینید
LOOPBACK_TIMEOUT،INTERNET_TIMEOUTوSHORT_TIMEOUT.
- test.support.PGO¶
زمانی تنظیم میشود که بتوان آزمونها را در صورتی که برای PGO مفید نیستند، رد کرد.
- test.support.PIPE_MAX_SIZE¶
ثابتی که احتمالاً از اندازهی بافر پایپ سیستمعامل زیرین بزرگتر است، تا نوشتنها مسدودکننده شوند.
- test.support.Py_DEBUG¶
Trueاگر پایتون با تعریفشدن ماکرویPy_DEBUGساخته شده باشد، یعنی اگر پایتون در حالت اشکالزدایی ساخته شده باشد.اضافه شده در نسخهی 3.12.
- test.support.SOCK_MAX_SIZE¶
ثابتی که احتمالاً از اندازهی بافر سوکت سیستمعامل زیرین بزرگتر است، تا نوشتنها مسدودکننده شوند.
- test.support.TEST_SUPPORT_DIR¶
به پوشهی سطح بالایی که شامل
test.supportاست، تنظیم میشود.
- test.support.TEST_HOME_DIR¶
به پوشهی سطح بالا برای بستهی آزمون تنظیم شده است.
- test.support.TEST_DATA_DIR¶
روی پوشهی
dataدرون بستهی آزمون تنظیم شده است.
- test.support.MAX_Py_ssize_t¶
برای آزمونهای حافظهی بزرگ، آن را روی
sys.maxsizeتنظیم کنید.
- test.support.max_memuse¶
توسط
set_memlimit()بهعنوان محدودیت حافظه برای آزمونهای حافظهی بزرگ تنظیم میشود. باMAX_Py_ssize_tمحدود میشود.
- test.support.real_max_memuse¶
توسط
set_memlimit()بهعنوان محدودیت حافظه برای آزمایشهای با حافظهی زیاد تنظیم میشود. بهMAX_Py_ssize_tمحدود نیست.
- test.support.MISSING_C_DOCSTRINGS¶
اگر پایتون بدون رشتهمستندها ساخته شده باشد (ماکروی
WITH_DOC_STRINGSتعریفنشده باشد)، رویTrueتنظیم میشود. گزینهیconfigure --without-doc-stringsرا ببینید.همچنین متغیر
HAVE_DOCSTRINGSرا ببینید.
- test.support.HAVE_DOCSTRINGS¶
اگر رشته مستندات توابع در دسترس باشند، روی
Trueتنظیم میشود. گزینهیpython -OOرا ببینید، که رشته مستندات توابع پیادهسازیشده در پایتون را حذف میکند.همچنین متغیر
MISSING_C_DOCSTRINGSرا ببینید.
- test.support.TEST_HTTP_URL¶
URL یک سرور HTTP اختصاصی را برای آزمونهای شبکه تعریف کنید.
- test.support.ALWAYS_EQ¶
شیءای که با هر چیزی برابر است. برای آزمایش مقایسهی نوعهای مختلط استفاده میشود.
- test.support.NEVER_EQ¶
شیءای که با هیچ چیزی برابر نیست (حتی با
ALWAYS_EQ). برای آزمایش مقایسهی نوعهای مختلط استفاده میشود.
- test.support.LARGEST¶
شیءای که از هر چیزی (بهجز خودش) بزرگتر است. برای آزمایش مقایسهی نوعهای مختلط استفاده میشود.
- test.support.SMALLEST¶
شیءای که از هر چیزی (بهجز خودش) کوچکتر است. برای آزمایش مقایسهی نوعهای مختلط استفاده میشود.
ماژول test.support توابع زیر را تعریف میکند:
- test.support.busy_retry(timeout, err_msg=None, /, *, error=True)¶
بدنه حلقه را تا زمانی اجرا کنید که
breakحلقه را متوقف کند.پس از timeout ثانیه، اگر error درست باشد، استثنای
AssertionErrorپرتاب میشود، یا اگر error نادرست باشد، فقط حلقه متوقف میشود.مثال:
for _ in support.busy_retry(support.SHORT_TIMEOUT): if check(): break
مثالی از کاربرد error=False:
for _ in support.busy_retry(support.SHORT_TIMEOUT, error=False): if check(): break else: raise RuntimeError('my custom error')
- test.support.sleeping_retry(timeout, err_msg=None, /, *, init_delay=0.010, max_delay=1.0, error=True)¶
راهبرد انتظاری که عقبنشینی نمایی (exponential backoff) را اعمال میکند.
بدنه حلقه را تا زمانی که
breakحلقه را متوقف کند، اجرا کنید. در هر تکرار حلقه مکث کنید، اما نه در تکرار نخست. تأخیر مکث در هر تکرار دو برابر میشود (حداکثر تا max_delay ثانیه).برای استفاده از پارامترها، مستندات
busy_retry()را ببینید.مثالی از پرتاب استثنا پس از SHORT_TIMEOUT ثانیه:
for _ in support.sleeping_retry(support.SHORT_TIMEOUT): if check(): break
مثالی از کاربرد error=False:
for _ in support.sleeping_retry(support.SHORT_TIMEOUT, error=False): if check(): break else: raise RuntimeError('my custom error')
- test.support.is_resource_enabled(resource)¶
اگر resource فعال و در دسترس باشد،
Trueرا برمیگرداند. فهرست منابع در دسترس فقط زمانی تنظیم میشود کهtest.regrtestدر حال اجرای آزمونها باشد.
- test.support.get_resource_value(resource)¶
مقدار مشخصشده برای resource را برمیگرداند (بهصورت
-u resource=value). اگر resource غیرفعال باشد یا هیچ مقداری مشخص نشده باشد،Noneرا برمیگرداند.
- test.support.python_is_optimized()¶
اگر پایتون با
-O0یا-Ogساخته نشده باشد،Trueرا برمیگرداند.
- test.support.with_pymalloc()¶
_testcapi.WITH_PYMALLOCرا برمیگرداند.
- test.support.requires(resource, msg=None)¶
اگر resource در دسترس نباشد،
ResourceDeniedرا پرتاب میکند. اگر این استثنا پرتاب شود، msg آرگومانResourceDeniedخواهد بود. اگر توسط تابعی فراخوانی شود که__name__آن'__main__'است، همیشهTrueرا برمیگرداند. هنگامی که آزمونها توسطtest.regrtestاجرا میشوند، استفاده میشود.
- test.support.sortdict(dict)¶
یک بازنمایی (repr) از dict با کلیدهای مرتبشده برمیگرداند.
- test.support.findfile(filename, subdir=None)¶
مسیر پروندهای با نام filename را برمیگرداند. اگر هیچ مورد منطبقی یافت نشد، filename برگردانده میشود. این معادل شکست نیست، زیرا ممکن است مسیر پرونده باشد.
تنظیم subdir یک مسیر نسبی را برای استفاده در یافتن پرونده مشخص میکند، بهجای جستوجوی مستقیم در پوشههای مسیر.
- test.support.get_pagesize()¶
دریافت اندازهی یک صفحه بر حسب بایت.
اضافه شده در نسخهی 3.12.
- test.support.setswitchinterval(interval)¶
sys.setswitchinterval()را روی interval دادهشده تنظیم میکند. یک بازهی حداقلی برای سیستمهای اندروید تعریف میکند تا از هنگ کردن سیستم جلوگیری شود.
- test.support.check_impl_detail(**guards)¶
از این بررسی برای محافظت از آزمونهای مختص پیادهسازی CPython یا برای اجرای آنها فقط روی پیادهسازیهای محافظتشده توسط آرگومانها استفاده کنید. این تابع بسته به پلتفرم میزبان،
TrueیاFalseبرمیگرداند. نمونه کاربرد:check_impl_detail() # Only on CPython (default). check_impl_detail(jython=True) # Only on Jython. check_impl_detail(cpython=False) # Everywhere except CPython.
- test.support.set_memlimit(limit)¶
مقادیر
max_memuseوreal_max_memuseرا برای آزمونهای حافظه بزرگ تنظیم کنید.
- test.support.record_original_stdout(stdout)¶
مقدار را از stdout ذخیره کنید. این برای نگهداری stdout در لحظهای که regrtest آغاز شد، در نظر گرفته شده است.
- test.support.get_original_stdout()¶
stdout اصلی تنظیمشده توسط
record_original_stdout()را برمیگرداند، یا اگر تنظیم نشده باشد،sys.stdoutرا برمیگرداند.
- test.support.args_from_interpreter_flags()¶
فهرستی از آرگومانهای خط فرمان را برمیگرداند که تنظیمات فعلی را در
sys.flagsوsys.warnoptionsبازتولید میکنند.
- test.support.optim_args_from_interpreter_flags()¶
فهرستی از آرگومانهای خط فرمان را برمیگرداند که تنظیمات بهینهسازی فعلی را در
sys.flagsبازتولید میکنند.
- test.support.captured_stdin()¶
- test.support.captured_stdout()¶
- test.support.captured_stderr()¶
یک مدیر زمینه که بهطور موقت جریان نامبردهشده را با یک شیء
io.StringIOجایگزین میکند.مثال استفاده با جریانهای خروجی:
with captured_stdout() as stdout, captured_stderr() as stderr: print("hello") print("error", file=sys.stderr) assert stdout.getvalue() == "hello\n" assert stderr.getvalue() == "error\n"
نمونه کاربرد با جریان ورودی:
with captured_stdin() as stdin: stdin.write('hello\n') stdin.seek(0) # call test code that consumes from sys.stdin captured = input() self.assertEqual(captured, "hello")
- test.support.disable_faulthandler()¶
یک مدیر زمینه که
faulthandlerرا بهطور موقت غیرفعال میکند.
- test.support.gc_collect()¶
تا حد امکان، اشیاء را مجبور به جمعآوری شدن میکند. این کار لازم است، زیرا زبالهروبی آزادسازی بهموقع را تضمین نمیکند. این بدان معناست که ممکن است متدهای
__del__دیرتر از آنچه انتظار میرود فراخوانی شوند و ارجاعهای ضعیف برای مدت طولانیتری از آنچه انتظار میرود زنده بمانند.
- test.support.disable_gc()¶
یک مدیر زمینه که در هنگام ورود، زبالهروبی را غیرفعال میکند. در هنگام خروج، زبالهروبی به حالت پیشین خود بازمیگردد.
- test.support.swap_attr(obj, attr, new_val)¶
مدیر زمینه برای جایگزین کردن یک ویژگی با یک شیء جدید.
استفاده:
with swap_attr(obj, "attr", 5): ...
این دستور
obj.attrرا در طول بلوکwithروی ۵ تنظیم میکند و مقدار پیشین را در پایان بلوک بازمیگرداند. اگرattrرویobjوجود نداشته باشد، ایجاد میشود و سپس در پایان بلوک حذف میشود.مقدار قبلی (یا
Noneاگر وجود نداشته باشد) به هدف بند "as" انتساب داده میشود، اگر این بند وجود داشته باشد.
- test.support.swap_item(obj, attr, new_val)¶
مدیر زمینه برای جایگزینی یک آیتم با یک شیء جدید.
استفاده:
with swap_item(obj, "item", 5): ...
این کار
obj["item"]را در طول مدت بلوکwithروی ۵ تنظیم میکند و مقدار پیشین را در پایان بلوک بازمیگرداند. اگرitemدرobjوجود نداشته باشد، ایجاد میشود و سپس در پایان بلوک حذف میشود.مقدار قبلی (یا
Noneاگر وجود نداشته باشد) به هدف بند "as" انتساب داده میشود، اگر این بند وجود داشته باشد.
- test.support.flush_std_streams()¶
متد
flush()را رویsys.stdoutو سپس رویsys.stderrفراخوانی کنید. میتوان از آن برای اطمینان از سازگاری ترتیب گزارشها پیش از نوشتن در stderr استفاده کرد.اضافه شده در نسخهی 3.11.
- test.support.print_warning(msg)¶
هشداری را در
sys.__stderr__چاپ کنید. پیام را بهصورتf"Warning -- {msg}"قالببندی کنید. اگر msg از چند خط تشکیل شده باشد، پیشوند"Warning -- "را به هر خط اضافه کنید.اضافه شده در نسخهی 3.9.
- test.support.wait_process(pid, *, exitcode, timeout=None)¶
صبر کنید تا فرایند pid به پایان برسد و بررسی کنید که کد خروجی فرایند exitcode باشد.
اگر کد خروجی فرایند با exitcode برابر نباشد، یک
AssertionErrorپرتاب میشود.اگر فرایند بیش از timeout ثانیه طول بکشد (
SHORT_TIMEOUTبهطور پیشفرض)، فرایند را خاتمه دهید و یکAssertionErrorرا پرتاب کنید. قابلیت مهلت در ویندوز در دسترس نیست.اضافه شده در نسخهی 3.9.
- test.support.calcobjsize(fmt)¶
اندازهی
PyObjectکه اعضای ساختار آن توسط fmt تعریف شدهاند را برمیگرداند. مقدار بازگشتی شامل اندازهی سرآیند شیء پایتون و همترازی است.
- test.support.calcvobjsize(fmt)¶
اندازهی
PyVarObjectرا که اعضای ساختار آن توسط fmt تعریف شدهاند، برمیگرداند. مقدار برگرداندهشده شامل اندازهی سرآیند شیء پایتون و همترازی است.
- test.support.checksizeof(test, o, size)¶
برای مورد آزمون test، ادعا کنید که
sys.getsizeofبرای o بههمراه اندازهی سرآیندی GC برابر با size است.
- @test.support.anticipate_failure(condition)¶
دکوراتوری برای علامتگذاری مشروط آزمونها با
@unittest.expectedFailure. هر استفادهای از این دکوراتور باید دارای یک کامنت همراه باشد که موضوع مرتبط در سامانه پیگیری را مشخص کند.
- test.support.system_must_validate_cert(f)¶
دکوراتوری که در صورت شکست اعتبارسنجی گواهی TLS، آزمون دکوراتهشده را رد میکند.
- @test.support.run_with_locale(catstr, *locales)¶
یک دکوراتور برای اجرای یک تابع در یک locale متفاوت، که پس از پایان اجرا، locale را بهدرستی بازنشانی میکند. catstr دسته locale (locale category) بهصورت یک رشته است (برای مثال
"LC_ALL"). locales ارسالشده بهترتیب آزمایش میشوند و اولین locale معتبر استفاده میشود.
- @test.support.run_with_tz(tz)¶
دکوراتوری برای اجرای یک تابع در یک منطقهی زمانی مشخص، که پس از پایان آن، منطقهی زمانی را بهدرستی بازنشانی میکند.
- @test.support.requires_freebsd_version(*min_version)¶
دکوراتور برای حداقل نسخه هنگام اجرای آزمون روی FreeBSD. اگر نسخه FreeBSD کمتر از حداقل باشد، آزمون رد میشود.
- @test.support.requires_linux_version(*min_version)¶
دکوراتور برای حداقل نسخه هنگام اجرای آزمون در لینوکس. اگر نسخهی لینوکس کمتر از حداقل باشد، آزمون رد میشود.
- @test.support.requires_mac_version(*min_version)¶
دکوراتور برای حداقل نسخه هنگام اجرای آزمون روی macOS. اگر نسخه macOS کمتر از حداقل باشد، آزمون رد میشود.
- @test.support.requires_gil_enabled¶
دکوراتور برای رد کردن آزمونها در ساخت نخآزاد (free-threaded build). اگر GIL غیرفعال باشد، آزمون رد میشود.
- @test.support.requires_IEEE_754¶
دکوراتور برای رد کردن آزمونها روی سکوهای غیر IEEE 754.
- @test.support.requires_resource(resource)¶
دکوراتوری برای رد کردن آزمونها در صورتی که resource در دسترس نباشد.
- @test.support.requires_docstrings¶
دکوراتوری برای اجرای آزمون فقط در صورت
HAVE_DOCSTRINGS.
- @test.support.requires_limited_api¶
دکوراتوری برای اجرای آزمون تنها در صورتی که Limited C API در دسترس باشد.
- @test.support.cpython_only¶
دکوراتور برای آزمونهایی که فقط در CPython کاربرد دارند.
- @test.support.impl_detail(msg=None, **guards)¶
دکوراتوری برای فراخوانی
check_impl_detail()روی guards. اگر آنFalseبرگرداند، از msg بهعنوان دلیل پرش از آزمون استفاده میکند.
- @test.support.thread_unsafe(reason=None)¶
دکوراتوری برای علامتگذاری آزمونها بهعنوان ناامن برای نخها. این آزمون همیشه در یک نخ اجرا میشود، حتی زمانی که با
--parallel-threadsفراخوانی شود.
- @test.support.no_tracing¶
دکوراتوری برای خاموش کردن موقت ردگیری در طول مدت آزمون.
- @test.support.refcount_test¶
دکوراتوری برای آزمونهایی که با شمارش ارجاع سروکار دارند. این دکوراتور آزمون را اجرا نمیکند، مگر اینکه توسط CPython اجرا شود. هر تابع ردگیری در طول اجرای آزمون غیرفعال میشود تا از شمارشهای ارجاع غیرمنتظره ناشی از تابع ردگیری جلوگیری شود.
- @test.support.bigmemtest(size, memuse, dry_run=True)¶
دکوراتور برای آزمونهای bigmem.
size اندازهی درخواستی برای آزمون است (در واحدهای دلخواهی که آزمون آنها را تفسیر میکند). memuse تعداد بایتها به ازای هر واحد برای آزمون، یا برآورد خوبی از آن است. برای مثال، میتوان آزمونی را که به دو بافر بایتی، هر یک به اندازهی ۴ GiB نیاز دارد، با
@bigmemtest(size=_4G, memuse=2)آراست.آرگومان size معمولاً بهعنوان یک آرگومان اضافی به متد آزمون دکوریتشده ارسال میشود. اگر dry_run برابر
Trueباشد، مقدار ارسالشده به متد آزمون ممکن است کمتر از مقدار درخواستی باشد. اگر dry_run برابرFalseباشد، به این معناست که آزمون وقتی-Mمشخص نشده باشد از اجراهای ساختگی پشتیبانی نمیکند.
- @test.support.bigaddrspacetest¶
دکوراتوری برای آزمونهایی که فضای آدرس را پر میکنند.
- test.support.linked_to_musl()¶
اگر مدرکی مبنی بر کامپایل شدن مفسر با
muslوجود نداشته باشد،Falseبرمیگرداند؛ در غیر این صورت یک سهتایی نسخه برمیگرداند: اگر نسخه ناشناخته باشد(0, 0, 0)و اگر نسخه شناختهشده باشد، نسخه واقعی را. برای استفاده در دکوراتورهایskipدر نظر گرفته شده است. فرض میشودemscriptenوwasiباmuslکامپایل شده باشند؛ در غیر این صورتplatform.libc_verبررسی میشود.
- test.support.check_syntax_error(testcase, statement, errtext='', *, lineno=None, offset=None)¶
آزمون خطاهای سینتکسی در statement با تلاش برای کامپایل کردن statement انجام میشود. testcase نمونهی
unittestبرای آزمون است. errtext عبارت باقاعدهای است که باید با نمایش رشتهایSyntaxErrorپرتابشده مطابقت داشته باشد. اگر linenoNoneنباشد، با خط استثنا مقایسه میشود. اگر offsetNoneنباشد، با آفست استثنا مقایسه میشود.
- test.support.open_urlresource(url, *args, **kw)¶
url را باز میکند. اگر باز کردن ناموفق باشد،
TestFailedرا پرتاب میکند.
- test.support.reap_children()¶
هر زمان که زیرفرایندها آغاز میشوند، از این در پایان
test_mainاستفاده کنید. این کار کمک میکند تا اطمینان حاصل شود که هیچکدام از فرزندان اضافی (زامبیها) باقی نمیمانند که منابع را اشغال کنند و هنگام جستوجو برای نشتهای مرجع (refleaks) مشکل ایجاد کنند.
- test.support.get_attribute(obj, name)¶
یک ویژگی دریافت میکند؛ اگر
AttributeErrorپرتاب شد،unittest.SkipTestرا ایجاد میکند.
- test.support.catch_unraisable_exception()¶
مدیر زمینهای که استثنای غیرقابلپرتاب را با استفاده از
sys.unraisablehook()میگیرد.ذخیرهسازی مقدار استثنا (
cm.unraisable.exc_value) یک چرخهی ارجاع ایجاد میکند. این چرخهی ارجاع هنگامی که مدیر زمینه خارج میشود، بهصراحت شکسته میشود.ذخیرهکردن شیء (
cm.unraisable.object) میتواند باعث احیای آن شود، اگر روی شیءای تنظیم شده باشد که در حال نهاییسازی است. خروج از مدیر زمینه، شیء ذخیرهشده را پاک میکند.استفاده:
with support.catch_unraisable_exception() as cm: # code creating an "unraisable exception" ... # check the unraisable exception: use cm.unraisable ... # cm.unraisable attribute no longer exists at this point # (to break a reference cycle)
اضافه شده در نسخهی 3.8.
- test.support.load_package_tests(pkg_dir, loader, standard_tests, pattern)¶
پیادهسازی عام پروتکل
load_testsدرunittestبرای استفاده در بستههای آزمون. pkg_dir پوشهی ریشهی بسته است؛ loader، standard_tests و pattern آرگومانهای مورد انتظارload_testsهستند. در موارد ساده، پرونده__init__.pyبستهی آزمون میتواند بهصورت زیر باشد:import os from test.support import load_package_tests def load_tests(*args): return load_package_tests(os.path.dirname(__file__), *args)
- test.support.detect_api_mismatch(ref_api, other_api, *, ignore=())¶
مجموعهای از ویژگیها، توابع یا متدهای ref_api را برمیگرداند که در other_api یافت نمیشوند، بهجز فهرست تعریفشدهای از آیتمهایی که باید در این بررسی نادیده گرفته شوند و در ignore مشخص شدهاند.
بهطور پیشفرض، ویژگیهای خصوصیای که با '_' آغاز میشوند نادیده گرفته میشوند، اما همهی متدهای جادویی، یعنی آنهایی که با '__' آغاز میشوند و به آن ختم میشوند، شامل میشوند.
اضافه شده در نسخهی 3.5.
- test.support.patch(test_instance, object_to_patch, attr_name, new_value)¶
object_to_patch.attr_name را با new_value بازنویسی میکند. همچنین یک رویهی پاکسازی به test_instance اضافه میکند تا object_to_patch را برای attr_name به حالت پیشین بازگرداند. attr_name باید یک ویژگی معتبر برای object_to_patch باشد.
- test.support.run_in_subinterp(code)¶
code را در زیرمفسر اجرا میکند. اگر
tracemallocفعال باشد،unittest.SkipTestرا پرتاب میکند.
- @test.support.isolation.runInSubprocess(*, options=(), env=None, timeout=None)¶
دکوراتوری که آزمون دکوراتشده را در یک زیرفرایند تازهی مفسر و بهصورت ایزوله اجرا میکند، تا وضعیت سراسری یا وضعیت مفسر را با بقیهی اجرای آزمون به اشتراک نگذارد. این دکوراتور میتواند یک متد آزمون یا یک زیرکلاس کامل از
TestCaseرا دکورات کند. متدهای دکوراتشده نباید هیچ آرگومان اضافی بگیرند. یک شکست، خطا یا رد شدن در زیرفرایند برای آزمون مربوطه گزارش میشود، و هریک ازsubtestsکه شکست بخورند یا رد شوند، بهصورت جداگانه گزارش میشوند. یک شکست یا خطای گزارششده، ردگیری پشتهی اصلی زیرفرایند را بهعنوان علت استثنا نشان میدهد.هنگامی که یک متد با دکوراتور آراسته شود، تنها همان متد در یک زیرفرایند اجرا میشود؛ همهی ثابتهای آزمایشی (
setUp()/tearDown()،setUpClass()/tearDownClass()وsetUpModule()/tearDownModule()) هم در فرایند والد (مانند معمول) و هم در زیرفرایند، پیرامون متد اجرا میشوند.هنگامی که یک کلاس آراسته میشود، کل کلاس در یک زیرفرایند واحد اجرا میشود، و
setUpClass()،tearDownClass()،setUp()وtearDown()هرکدام یک بار در زیرفرایند اجرا میشوند و در فرایند والد رد میشوند. شکست یا رد شدنsetUpClass()در زیرفرایند، برای کل کلاس گزارش میشود.setUpModule()نمیتواند با دکوراتور کلاس کنترل شود، بنابراین همچنان در فرایند والد نیز اجرا میشود؛ در صورت نیاز آن را باrunningInSubprocessبیازمایید.زیرفرایند، منابع فعالشده (
-u)، محدودیت حافظه (-M) و سطح جزئیات (-v) را از اجرای آزمون والد به ارث میبرد، بهگونهای کهrequires_resource()،requires()،bigmemtest()و موارد مشابه در هر دو فرایند رفتار یکسانی داشته باشند.options is a sequence of interpreter command line options to run the subprocess with, and env is a mapping of environment variables to set in it, on top of the inherited environment. A value of
Nonein env unsets the variable. Note that-Eand-Imake the subprocess ignore thePYTHON*environment variables, includingPYTHONPATH.timeout is the number of seconds to wait for the subprocess; the test is reported as an error if it does not complete in time. By default there is no timeout, and a hung test is left to the timeout of the test runner.
این آزمون در سکوهای بدون پشتیبانی از subprocess نادیده گرفته میشود.
- test.support.isolation.runningInSubprocess¶
در حین اجرای کد در زیرفرایند ایزولهی ایجادشده توسط
runInSubprocess()،Trueو در غیر این صورتFalseاست (از جمله در فرایند والد و در یک اجرای آزمون عادی و غیرایزوله). ثابتهای آزمایشیی مانندsetUp()،tearDown()،setUpClass()،tearDownClass()،setUpModule()وtearDownModule()میتوانند آن را آزمایش کنند تا انتخاب کنند کدام کد در زیرفرایند اجرا شود.
- test.support.check_free_after_iterating(test, iter, cls, args=())¶
ادعا کنید که نمونههای cls پس از پیمایش، آزاد شدهاند.
- test.support.missing_compiler_executable(cmd_names=[])¶
وجود پروندههای اجرایی کامپایلر با نامهای فهرستشده در cmd_names، یا در صورت خالی بودن cmd_names وجود همهی پروندههای اجرایی کامپایلر را بررسی کنید و نخستین پرونده اجرایی مفقود را برگردانید؛ اگر هیچ مورد مفقودی یافت نشد،
Noneبرگردانید.
- test.support.check__all__(test_case, module, name_of_module=None, extra=(), not_exported=())¶
اطمینان حاصل کنید که متغیر
__all__در module شامل تمام نامهای عمومی است.نامهای عمومی ماژول (API آن) بهصورت خودکار بر اساس اینکه با قرارداد نام عمومی مطابقت داشته باشند و در module تعریف شده باشند، تشخیص داده میشوند.
آرگومان name_of_module میتواند (بهصورت یک رشته یا تاپلی از رشتهها) مشخص کند که یک API ممکن است در چه ماژولهایی تعریف شده باشد تا بهعنوان API عمومی تشخیص داده شود. یکی از موارد این حالت وقتی است که module بخشی از API عمومی خود را از ماژولهای دیگر ایمپورت میکند، احتمالاً از یک بکاند C (مانند
csvو_csvآن).آرگومان extra میتواند مجموعهای از نامها باشد که در غیر این صورت بهطور خودکار بهعنوان «عمومی» شناسایی نمیشدند، مانند اشیایی که ویژگی
__module__مناسب ندارند. در صورت ارائه، به موارد شناساییشده بهطور خودکار اضافه میشود.آرگومان not_exported میتواند مجموعهای از نامها باشد که نباید بهعنوان بخشی از API عمومی تلقی شوند، حتی اگر نامهایشان خلاف آن را نشان میدهند.
نمونه استفاده:
import bar import foo import unittest from test import support class MiscTestCase(unittest.TestCase): def test__all__(self): support.check__all__(self, foo) class OtherTestCase(unittest.TestCase): def test__all__(self): extra = {'BAR_CONST', 'FOO_CONST'} not_exported = {'baz'} # Undocumented name. # bar imports part of its API from _bar. support.check__all__(self, bar, ('bar', '_bar'), extra=extra, not_exported=not_exported)
اضافه شده در نسخهی 3.6.
- test.support.skip_if_broken_multiprocessing_synchronize()¶
در صورتی که ماژول
multiprocessing.synchronizeموجود نبود، هیچ پیادهسازی سمافور در دسترس نبود، یا ایجاد یک قفل باعث پرتابOSErrorشد، از آزمونها صرفنظر کنید.اضافه شده در نسخهی 3.10.
- test.support.check_disallow_instantiation(test_case, tp, *args, **kwds)¶
ادعا کنید که نوع tp نمیتواند با استفاده از args و kwds نمونهسازی شود.
اضافه شده در نسخهی 3.10.
- test.support.adjust_int_max_str_digits(max_digits)¶
این تابع یک مدیر زمینه برمیگرداند که تنظیم سراسری
sys.set_int_max_str_digits()را در طول عمر زمینه تغییر میدهد تا امکان اجرای کد آزمونی که به محدودیت متفاوتی در تعداد ارقام هنگام تبدیل بین عدد صحیح و رشته نیاز دارد، فراهم شود.اضافه شده در نسخهی 3.11.
ماژول test.support کلاسهای زیر را تعریف میکند:
- class test.support.SuppressCrashReport¶
یک مدیر زمینه که برای تلاش جهت جلوگیری از نمایش پنجرههای بازشوی محاورهای فروپاشی در آزمونهایی که انتظار میرود یک زیرفرایند را دچار خرابی کنند، به کار میرود.
در ویندوز، پنجرههای محاورهای گزارش خطای ویندوز (Windows Error Reporting) را با استفاده از SetErrorMode غیرفعال میکند.
در UNIX، از
resource.setrlimit()برای تنظیم حد نرمresource.RLIMIT_COREبر روی ۰ استفاده میشود تا از ایجاد پرونده coredump جلوگیری شود.در هر دو سکو، مقدار پیشین توسط
__exit__()بازیابی میشود.
test.support.socket_helper --- ابزارهایی برای آزمونهای سوکت¶
ماژول test.support.socket_helper برای آزمونهای سوکت پشتیبانی فراهم میکند.
اضافه شده در نسخهی 3.9.
- test.support.socket_helper.IPV6_ENABLED¶
اگر IPv6 روی این میزبان فعال باشد، روی
Trueتنظیم میشود، در غیر این صورت رویFalse.
- test.support.socket_helper.find_unused_port(family=socket.AF_INET, socktype=socket.SOCK_STREAM)¶
یک پورت استفادهنشده برمیگرداند که باید برای مقیدسازی مناسب باشد. این کار با ایجاد یک سوکت موقتی با خانواده و نوع مشابه پارامتر
sock(پیشفرضAF_INET،SOCK_STREAMاست) و مقیدسازی آن به نشانی میزبان مشخصشده (پیشفرض0.0.0.0) در حالی که پورت روی ۰ تنظیم شده است، انجام میشود تا یک پورت موقتی استفادهنشده از سیستمعامل دریافت شود. سپس سوکت موقتی بسته و حذف میشود و پورت موقتی برگردانده میشود.در هر آزمونی که در آن لازم است یک سوکت سرور در طول آزمون به یک درگاه خاص مقید شود، باید از این متد یا
bind_port()استفاده شود. انتخاب بین این دو به این بستگی دارد که کد فراخواننده در حال ایجاد یک سوکت پایتون باشد یا اینکه لازم باشد یک درگاه استفادهنشده در اختیار یک سازنده قرار گیرد یا به یک برنامهی خارجی داده شود (برای مثال، آرگومان-acceptدر حالت s_server مربوط به openssl). هرجا ممکن است، همیشهbind_port()را بهfind_unused_port()ترجیح دهید. استفاده از یک درگاه از پیش تعیینشده توصیه نمیشود، زیرا میتواند اجرای همزمان چند نمونه از آزمون را غیرممکن کند؛ این مسئله برای buildbotها مشکلساز است.
- test.support.socket_helper.bind_port(sock, host=HOST)¶
سوکت را به یک پورت آزاد مقید میکند و شمارهی پورت را برمیگرداند. برای اطمینان از اینکه از یک پورت مقیدنشده استفاده میشود، به پورتهای موقتی (ephemeral ports) متکی است. این موضوع مهم است، زیرا ممکن است آزمونهای بسیاری بهطور همزمان در حال اجرا باشند، بهویژه در محیط buildbot. این متد در صورتی استثنا پرتاب میکند که
sock.familyبرابرAF_INETوsock.typeبرابرSOCK_STREAMباشد، و گزینهیSO_REUSEADDRیاSO_REUSEPORTروی سوکت تنظیمشده باشد. آزمونها هرگز نباید این گزینههای سوکت را برای سوکتهای TCP/IP تنظیم کنند. تنها حالت برای تنظیم این گزینهها، آزمون کردن چندپخشی (multicasting) از طریق چند سوکت UDP است.علاوه بر این، اگر گزینهی سوکت
SO_EXCLUSIVEADDRUSEدر دسترس باشد (یعنی در ویندوز)، روی سوکت تنظیم میشود. این کار از مقید شدن هر کس دیگر به میزبان/پورت ما در طول مدت آزمون جلوگیری میکند.
- test.support.socket_helper.bind_unix_socket(sock, addr)¶
یک سوکت یونیکس را مقید میکند و در صورت پرتاب
PermissionError،unittest.SkipTestرا پرتاب میکند.
- @test.support.socket_helper.skip_unless_bind_unix_socket¶
دکوراتوری برای اجرای آزمونهایی که به یک
bind()کارا برای سوکتهای Unix نیاز دارند.
- test.support.socket_helper.transient_internet(resource_name, *, timeout=30.0, errnos=())¶
یک مدیر زمینه که
ResourceDeniedرا هنگامی که مشکلات گوناگون اتصال به اینترنت بهصورت استثناهایی آشکار میشوند، پرتاب میکند.
test.support.script_helper --- ابزارهایی برای آزمونهای اجرای پایتون¶
ماژول test.support.script_helper پشتیبانی برای آزمونهای اجرای اسکریپت پایتون را فراهم میکند.
- test.support.script_helper.interpreter_requires_environment()¶
اگر
sys.executable interpreterبرای اینکه اصلاً بتواند اجرا شود به متغیرهای محیطی نیاز داشته باشد،Trueرا برمیگرداند.این برای استفاده با
@unittest.skipIf()طراحی شده است تا آزمونهایی را علامتگذاری کند که نیاز دارند از یک تابعassert_python*()برای راهاندازی یک فرایند زیرمفسر در حالت ایزوله (-I) یا حالت بدون محیط (-E) استفاده کنند.یک ساخت و آزمون عادی با این موقعیت مواجه نمیشود، اما این حالت ممکن است هنگامی رخ دهد که تلاش میکنید بدنهی آزمونهای کتابخانه استاندارد را از مفسری اجرا کنید که با منطق فعلی پایتون در یافتن خانه (home)، خانهی مشخصی ندارد.
تنظیم
PYTHONHOMEیکی از راهها برای اجرای بیشتر مجموعهآزمون در آن شرایط است.PYTHONPATHیاPYTHONUSERSITEمتغیرهای محیطی رایج دیگری هستند که ممکن است بر اینکه مفسر بتواند آغاز شود یا نه تأثیر بگذارند.
- test.support.script_helper.run_python_until_end(*args, **env_vars)¶
محیط را بر اساس env_vars برای اجرای مفسر در یک زیرفرایند تنظیم کنید. مقادیر میتوانند شامل
__isolated،__cleanenv،__cwdوTERMباشند.تغییر یافته در نسخهی 3.9: این تابع دیگر نویسههای فاصله را از stderr حذف نمیکند.
- test.support.script_helper.assert_python_ok(*args, **env_vars)¶
ادعا میکند که اجرای مفسر با args و متغیرهای محیطی اختیاری env_vars با موفقیت انجام میشود (
rc == 0) و یک تاپل(return code, stdout, stderr)برمیگرداند.اگر پارامتر فقط کلیدواژهای __cleanenv تنظیم شده باشد، از env_vars بهعنوان یک محیط تازه استفاده میشود.
پایتون در حالت ایزوله اجرا میشود (گزینه خط فرمان
-I)، مگر اینکه پارامتر فقط کلیدواژهای __isolated رویFalseتنظیم شده باشد.تغییر یافته در نسخهی 3.9: این تابع دیگر نویسههای فاصله را از stderr حذف نمیکند.
- test.support.script_helper.assert_python_failure(*args, **env_vars)¶
ادعا میکند که اجرای مفسر با args و متغیرهای محیطی اختیاری env_vars شکست میخورد (
rc != 0) و یک تاپل(return code, stdout, stderr)را بازمیگرداند.برای گزینههای بیشتر،
assert_python_ok()را ببینید.تغییر یافته در نسخهی 3.9: این تابع دیگر نویسههای فاصله را از stderr حذف نمیکند.
- test.support.script_helper.spawn_python(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw)¶
یک زیرفرایند پایتون را با آرگومانهای دادهشده اجرا کنید.
kw آرگومانهای کلیدواژهای اضافی برای ارسال به
subprocess.Popen()هستند. یک شیءsubprocess.Popenبازمیگرداند.
- test.support.script_helper.kill_python(p)¶
فرآیند
subprocess.Popenدادهشده را تا پایان اجرا میکند و stdout را برمیگرداند.
- test.support.script_helper.make_script(script_dir, script_basename, source, omit_suffix=False)¶
اسکریپتی حاوی source در مسیر script_dir و script_basename ایجاد میکند. اگر omit_suffix برابر
Falseباشد،.pyبه نام افزوده میشود. مسیر کامل اسکریپت را برمیگرداند.
- test.support.script_helper.make_zip_script(zip_dir, zip_basename, script_name, name_in_zip=None)¶
یک پرونده zip در zip_dir و zip_basename با پسوند
zipایجاد میکند که شامل پروندههای موجود در script_name است. name_in_zip نام آرشیو است. یک تاپل شامل(full path, full path of archive name)برمیگرداند.
- test.support.script_helper.make_pkg(pkg_dir, init_source='')¶
پوشهای به نام pkg_dir ایجاد کنید که شامل یک پرونده
__init__با محتوای init_source باشد.
- test.support.script_helper.make_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename, source, depth=1, compiled=False)¶
یک پوشهی بستهی zip با مسیر zip_dir و zip_basename ایجاد کنید که شامل یک پرونده
__init__خالی و یک پرونده script_basename حاوی source باشد. اگر compiled برابرTrueباشد، هر دو پرونده منبع کامپایل میشوند و به بستهی zip اضافه میشوند. یک تاپل از مسیر کامل zip و نام بایگانی برای پرونده zip را برگردانید.
test.support.bytecode_helper --- ابزارهای پشتیبانی برای آزمون تولید صحیح بایتکد¶
ماژول test.support.bytecode_helper پشتیبانی برای آزمون و بازرسی تولید بایتکد را فراهم میکند.
اضافه شده در نسخهی 3.9.
این ماژول کلاس زیر را تعریف میکند:
- class test.support.bytecode_helper.BytecodeTestCase(unittest.TestCase)¶
این کلاس دارای متدهای ادعای سفارشی برای بازرسی بایتکد است.
- BytecodeTestCase.get_disassembly_as_string(co)¶
واسازی (disassembly) co را بهصورت رشته برمیگرداند.
- BytecodeTestCase.assertInBytecode(x, opname, argval=_UNSPECIFIED)¶
اگر opname یافت شود، instr را برمیگرداند، در غیر این صورت
AssertionErrorرا پرتاب میکند.
- BytecodeTestCase.assertNotInBytecode(x, opname, argval=_UNSPECIFIED)¶
اگر opname پیدا شود،
AssertionErrorرا پرتاب میکند.
test.support.threading_helper --- ابزارهایی برای آزمونهای نخبندی¶
ماژول test.support.threading_helper پشتیبانی از آزمونهای نخبندی (threading) را فراهم میکند.
اضافه شده در نسخهی 3.10.
- test.support.threading_helper.join_thread(thread, timeout=None)¶
به یک نخ در بازهی timeout ملحق شوید. اگر نخ پس از timeout ثانیه هنوز زنده بود، یک
AssertionErrorپرتاب میشود.
- @test.support.threading_helper.reap_threads¶
دکوراتوری برای اطمینان از پاکسازی نخها حتی در صورت شکست آزمون.
- test.support.threading_helper.start_threads(threads, unlock=None)¶
مدیر زمینه برای شروع threads، که دنبالهای از نخها است. unlock تابعی است که پس از شروع نخها فراخوانی میشود، حتی اگر استثنایی پرتاب شده باشد؛ یک نمونه
threading.Event.set()است.start_threadsتلاش میکند نخهای شروعشده را هنگام خروج join کند.
- test.support.threading_helper.threading_cleanup(*original_values)¶
پاکسازی نخهایی که در original_values مشخص نشدهاند. برای صدور هشدار در صورتی طراحی شده است که یک آزمون، نخهای در حال اجرا را در پسزمینه باقی بگذارد.
- test.support.threading_helper.threading_setup()¶
تعداد نخهای فعلی و رونوشتی از نخهای معلق را برمیگرداند.
- test.support.threading_helper.wait_threads_exit(timeout=None)¶
مدیر زمینه برای انتظار تا خروج همهی نخهای ایجادشده در دستور
with.
- test.support.threading_helper.catch_threading_exception()¶
مدیر زمینهای که استثنای
threading.Threadرا با استفاده ازthreading.excepthook()میگیرد.ویژگیهایی که هنگام گرفته شدن یک استثنا تنظیم میشوند:
exc_typeexc_valueexc_tracebackthread
مستندات
threading.excepthook()را ببینید.این ویژگیها در زمان خروج مدیر زمینه حذف میشوند.
استفاده:
with threading_helper.catch_threading_exception() as cm: # code spawning a thread which raises an exception ... # check the thread exception, use cm attributes: # exc_type, exc_value, exc_traceback, thread ... # exc_type, exc_value, exc_traceback, thread attributes of cm no longer # exists at this point # (to avoid reference cycles)
اضافه شده در نسخهی 3.8.
- test.support.threading_helper.run_concurrently(worker_func, nthreads, args=(), kwargs={})¶
تابع کارگر را بهصورت همزمان در چندین نخ اجرا میکند. اگر هر نخی استثنا پرتاب کند، پس از پایان همه نخها، آن استثنا را دوباره پرتاب میکند.
test.support.os_helper --- ابزارهایی برای آزمونهای os¶
ماژول test.support.os_helper برای آزمونهای os پشتیبانی فراهم میکند.
اضافه شده در نسخهی 3.10.
- test.support.os_helper.FS_NONASCII¶
یک نویسهی غیر ASCII قابل کدگذاری با
os.fsencode().
- test.support.os_helper.SAVEDCWD¶
روی
os.getcwd()تنظیم شده است.
- test.support.os_helper.TESTFN¶
به نامی تنظیم شود که برای استفاده بهعنوان نام یک پرونده موقت امن باشد. هر پرونده موقتی که ایجاد میشود، باید بسته و حذف (unlink) شود.
- test.support.os_helper.TESTFN_NONASCII¶
به یک نام پرونده حاوی نویسهی
FS_NONASCIIتنظیم میشود، اگر این نویسه وجود داشته باشد. این تضمین میکند که اگر نام پرونده وجود داشته باشد، میتوان آن را با کدگذاری پیشفرض سامانه فایلبندی کدگذاری و کدگشایی کرد. این امکان را میدهد که آزمونهایی که به یک نام پرونده غیر ASCII نیاز دارند، بهراحتی روی سکوهایی که امکان اجرای آنها وجود ندارد، رد شوند.
- test.support.os_helper.TESTFN_UNENCODABLE¶
به یک نام پرونده (از نوع str) تنظیم میشود که نباید بتوان آن را با کدگذاری سامانه فایلبندی در حالت سختگیرانه کدگذاری کرد. اگر امکان تولید چنین نام پروندهای وجود نداشته باشد، ممکن است
Noneباشد.
- test.support.os_helper.TESTFN_UNDECODABLE¶
به یک نام پرونده (نوع bytes) تنظیم شود که نباید بتوان آن را با کدگذاری سیستم پرونده در حالت سختگیرانه کدگشایی کرد. اگر ایجاد چنین نام پروندهای ممکن نباشد، ممکن است
Noneباشد.
- test.support.os_helper.TESTFN_UNICODE¶
روی نامی غیر ASCII برای یک پرونده موقت تنظیم شده است.
- class test.support.os_helper.EnvironmentVarGuard¶
کلاسی که برای تنظیم یا لغو تنظیم موقت متغیرهای محیطی به کار میرود. نمونهها میتوانند بهعنوان یک مدیر زمینه استفاده شوند و یک رابط کامل دیکشنری برای پرسوجو/تغییر
os.environزیربنایی دارند. پس از خروج از مدیر زمینه، تمام تغییرات اعمالشده بر متغیرهای محیطی از طریق این نمونه بازگردانده میشوند.تغییر یافته در نسخهی 3.1: رابط دیکشنری افزوده شد.
- class test.support.os_helper.FakePath(path)¶
یک path-like object ساده. این شیء متد
__fspath__()را پیادهسازی میکند که فقط آرگومان path را بازمیگرداند. اگر path یک استثنا باشد، در__fspath__()پرتاب میشود.
- EnvironmentVarGuard.set(envvar, value)¶
بهطور موقت متغیر محیطی
envvarرا به مقدارvalueتنظیم میکند.
- EnvironmentVarGuard.unset(envvar, *others)¶
بهطور موقت یک یا چند متغیر محیطی را حذف کنید.
تغییر یافته در نسخهی 3.14: میتوان بیش از یک متغیر محیطی را لغو تنظیم کرد.
- test.support.os_helper.can_symlink()¶
اگر سیستمعامل از پیوندهای نمادین پشتیبانی کند،
Trueو در غیر این صورتFalseرا برمیگرداند.
- test.support.os_helper.can_xattr()¶
اگر سیستمعامل از xattr پشتیبانی کند،
Trueو در غیر این صورتFalseرا برمیگرداند.
- test.support.os_helper.change_cwd(path, quiet=False)¶
یک مدیر زمینه که پوشه کاری جاری را بهطور موقت به path تغییر میدهد و پوشه را برمیگرداند.
اگر quiet برابر
Falseباشد، مدیر زمینه در صورت خطا استثنایی را پرتاب میکند. در غیر این صورت، تنها یک هشدار پرتاب میکند و پوشه کاری فعلی را بدون تغییر نگه میدارد.
- test.support.os_helper.create_empty_file(filename)¶
یک پرونده خالی با filename ایجاد کنید. اگر از قبل وجود دارد، آن را کوتاه کنید .
- test.support.os_helper.fd_count()¶
تعداد توصیفگرهای پرونده باز را بشمارید.
- test.support.os_helper.fs_is_case_insensitive(directory)¶
اگر سامانه فایلبندی برای directory به بزرگی و کوچکی حروف حساس نباشد،
Trueرا برمیگرداند.
- test.support.os_helper.make_bad_fd()¶
با باز کردن و بستن یک پرونده موقت و برگرداندن توصیفگر آن، یک توصیفگر پرونده نامعتبر ایجاد کنید.
- test.support.os_helper.rmdir(filename)¶
os.rmdir()را روی filename فراخوانی میکند. در پلتفرمهای ویندوزی، این فراخوانی با یک حلقه انتظار پوشش داده شده است که وجود پرونده را بررسی میکند؛ این کار به دلیل برنامههای ضدویروس لازم است، برنامههایی که میتوانند پروندهها را باز نگه دارند و از حذف آنها جلوگیری کنند.
- test.support.os_helper.rmtree(path)¶
برای حذف یک مسیر و محتویات آن،
shutil.rmtree()را روی path فراخوانی کنید یاos.lstat()وos.rmdir()را فراخوانی کنید. مانندrmdir()، در پلتفرمهای ویندوز این عمل با یک حلقه انتظار که وجود پروندهها را بررسی میکند، احاطه شده است.
- @test.support.os_helper.skip_unless_symlink¶
یک دکوراتور برای اجرای آزمونهایی که به پشتیبانی از پیوندهای نمادین نیاز دارند.
- @test.support.os_helper.skip_unless_xattr¶
دکوراتوری برای اجرای آزمونهایی که به پشتیبانی از xattr نیاز دارند.
- test.support.os_helper.temp_cwd(name='tempcwd', quiet=False)¶
یک مدیریتکنندهی زمینه که بهطور موقت یک پوشهی جدید ایجاد میکند و پوشهی کاری جاری (CWD) را تغییر میدهد.
مدیر زمینه پیش از تغییر موقت پوشه کاری جاری، یک پوشه موقت با نام name در پوشه جاری ایجاد میکند. اگر name برابر
Noneباشد، پوشه موقت با استفاده ازtempfile.mkdtemp()ایجاد میشود.اگر quiet برابر
Falseباشد و امکان ایجاد یا تغییر CWD وجود نداشته باشد، خطایی پرتاب میشود. در غیر این صورت، تنها هشداری پرتاب میشود و از CWD اصلی استفاده میشود.
- test.support.os_helper.temp_dir(path=None, quiet=False)¶
یک مدیر زمینه که پوشهای موقت در path ایجاد میکند و پوشه را برمیگرداند.
اگر path برابر
Noneباشد، پوشهی موقت با استفاده ازtempfile.mkdtemp()ایجاد میشود. اگر quiet برابرFalseباشد، مدیر زمینه در صورت بروز خطا یک استثنا پرتاب میکند. در غیر این صورت، اگر path مشخص شده باشد و ایجاد آن ممکن نباشد، فقط یک هشدار نشان داده میشود.
- test.support.os_helper.temp_umask(umask)¶
یک مدیر زمینه که بهطور موقت umask فرایند را تنظیم میکند.
- test.support.os_helper.unlink(filename)¶
os.unlink()را روی filename فراخوانی کنید. مانندrmdir()، در پلتفرمهای ویندوزی، این فراخوانی با یک حلقه انتظار که وجود پرونده را بررسی میکند، دربرگرفته شده است.
test.support.import_helper --- ابزارهای کمکی برای آزمونهای ایمپورت¶
ماژول test.support.import_helper پشتیبانی برای آزمونهای ایمپورت را فراهم میکند.
اضافه شده در نسخهی 3.10.
- test.support.import_helper.forget(module_name)¶
ماژول با نام module_name را از
sys.modulesحذف کنید و هرگونه پرونده کامپایلشده به بایت آن ماژول را پاک کنید.
- test.support.import_helper.import_fresh_module(name, fresh=(), blocked=(), deprecated=False)¶
این تابع با حذف ماژول نامبردهشده از
sys.modulesپیش از انجام ایمپورت، یک نسخهی تازه از ماژول پایتون نامبردهشده را ایمپورت میکند و برمیگرداند. توجه داشته باشید که برخلافreload()، ماژول اصلی تحت تأثیر این عملیات قرار نمیگیرد.fresh یک پیمایشپذیر از نامهای ماژول اضافی است که همچنین پیش از انجام ایمپورت از نهانگاه
sys.modulesحذف میشوند.blocked یک پیمایشپذیر از نامهای ماژول است که در حین ایمپورت، در نهانگاه ماژول با
Noneجایگزین میشوند تا اطمینان حاصل شود که تلاشها برای ایمپورت آنها باعث پرتابImportErrorمیشوند.ماژول نامبردهشده و هر ماژولی که در پارامترهای fresh و blocked نامبردهشده باشد، پیش از آغاز ایمپورت ذخیره میشوند و سپس هنگامی که ایمپورت تازه کامل میشود، دوباره در
sys.modulesدرج میشوند.اگر deprecated برابر
Trueباشد، پیامهای منسوخشدن ماژولها و بستهها در جریان این ایمپورت سرکوب میشوند.این تابع در صورتی که ماژول نامبرده نتواند ایمپورت شود،
ImportErrorرا پرتاب میکند.نمونه استفاده:
# Get copies of the warnings module for testing without affecting the # version being used by the rest of the test suite. One copy uses the # C implementation, the other is forced to use the pure Python fallback # implementation py_warnings = import_fresh_module('warnings', blocked=['_warnings']) c_warnings = import_fresh_module('warnings', fresh=['_warnings'])
اضافه شده در نسخهی 3.1.
- test.support.import_helper.import_module(name, deprecated=False, *, required_on=())¶
این تابع، ماژول نامبردهشده را ایمپورت کرده و برمیگرداند. برخلاف ایمپورت معمولی، این تابع در صورتی که ماژول نتواند ایمپورت شود،
unittest.SkipTestرا پرتاب میکند.در صورتی که deprecated برابر
Trueباشد، پیامهای منسوخشدگی ماژول و بسته در جریان این ایمپورت سرکوب میشوند. اگر ماژولی در یک پلتفرم ضروری باشد اما در پلتفرمهای دیگر اختیاری باشد، required_on را روی یک پیمایشپذیر از پیشوندهای پلتفرم تنظیم کنید که باsys.platformمقایسه میشوند.اضافه شده در نسخهی 3.1.
- test.support.import_helper.modules_setup()¶
یک کپی از
sys.modulesبرمیگرداند.
- test.support.import_helper.modules_cleanup(oldmodules)¶
ماژولها را به جز oldmodules و
encodingsحذف کنید تا نهانگاه داخلی حفظ شود.
- test.support.import_helper.unload(name)¶
name را از
sys.modulesحذف میکند.
- test.support.import_helper.make_legacy_pyc(source)¶
یک پرونده pyc مربوط به PEP 3147/PEP 488 را به محل pyc قدیمی آن منتقل میکند و مسیر سامانه فایلبندیای برای پرونده pyc قدیمی را برمیگرداند. مقدار source، مسیر سامانه فایلبندیای برای پرونده منبع است. لازم نیست پرونده منبع وجود داشته باشد، اما پرونده pyc مربوط به PEP 3147/488 باید وجود داشته باشد.
- class test.support.import_helper.CleanImport(*module_names)¶
یک مدیریتکننده زمینه برای وادار کردن ایمپورت به بازگرداندن مرجع جدیدی از ماژول. این برای آزمایش رفتارهای سطح ماژول، مانند صدور یک
DeprecationWarningهنگام ایمپورت، مفید است. نمونه کاربرد:with CleanImport('foo'): importlib.import_module('foo') # New reference.
- class test.support.import_helper.DirsOnSysPath(*paths)¶
یک مدیریتکنندهی زمینه برای افزودن موقت پوشهها به
sys.path.این یک رونوشت از
sys.pathمیسازد، هر پوشهای را که بهعنوان آرگومان جایگاهی داده شده باشد به آن میافزاید، سپس هنگامی که زمینه به پایان میرسد،sys.pathرا به تنظیمات رونوشتشده بازمیگرداند.توجه داشته باشید که تمام تغییرات
sys.pathدر بدنه مدیر زمینه، از جمله جایگزینی شیء، در پایان بلوک به حالت پیشین بازگردانده خواهند شد.
test.support.warnings_helper --- ابزارهایی برای آزمونهای هشدارها¶
ماژول test.support.warnings_helper پشتیبانی از آزمونهای هشدارها را فراهم میکند.
اضافه شده در نسخهی 3.10.
- test.support.warnings_helper.ignore_warnings(*, category)¶
هشدارهایی را که نمونههایی از category هستند، سرکوب میکند؛ category باید
Warningیا زیرکلاسی از آن باشد. تقریباً معادلwarnings.catch_warnings()باwarnings.simplefilter('ignore', category=category)است. برای مثال:@warning_helper.ignore_warnings(category=DeprecationWarning) def test_suppress_warning(): # do something
اضافه شده در نسخهی 3.8.
- test.support.warnings_helper.check_no_resource_warning(testcase)¶
مدیریتکنندهی زمینه برای بررسی اینکه هیچ
ResourceWarningپرتاب نشده باشد. شما باید شیءای را که ممکن استResourceWarningپرتاب کند، پیش از پایان مدیریتکنندهی زمینه حذف کنید.
- test.support.warnings_helper.check_syntax_warning(testcase, statement, errtext='', *, lineno=1, offset=None)¶
با تلاش برای کامپایل کردن statement، وجود هشدار سینتکسی در statement را آزمایش میکند. همچنین آزمایش میکند که
SyntaxWarningتنها یک بار نشان داده میشود، و این که در صورت تبدیل شدن به خطا، به یکSyntaxErrorتبدیل خواهد شد. testcase نمونهیunittestبرای آزمون است. errtext عبارت باقاعدهای است که باید با نمایش رشتهایSyntaxWarningاکسپورتشده وSyntaxErrorپرتابشده مطابقت کند. اگر lineno برابرNoneنباشد، با خط هشدار و استثنا مقایسه میشود. اگر offset برابرNoneنباشد، با آفست استثنا مقایسه میشود.اضافه شده در نسخهی 3.8.
- test.support.warnings_helper.check_warnings(*filters, quiet=True)¶
پوششی مناسب برای
warnings.catch_warnings()که آزمون اینکه یک هشدار بهدرستی پرتاب شده است را آسانتر میکند. این تقریباً معادل فراخوانیwarnings.catch_warnings(record=True)است، باwarnings.simplefilter()که رویalwaysتنظیم شده است و با گزینهای برای اعتبارسنجی خودکار نتایجی که ثبت میشوند.check_warningsتاپلهای دوتایی به شکل("message regexp", WarningCategory)را بهعنوان آرگومانهای جایگاهی میپذیرد. اگر یک یا چند filters ارائه شود، یا آرگومان کلیدواژهای اختیاری quiet برابرFalseباشد، بررسی میکند تا اطمینان حاصل شود که هشدارها مطابق انتظار هستند: هر فیلتر مشخصشده باید با حداقل یکی از هشدارهای نشان داده شده توسط کد محصورشده مطابقت داشته باشد، در غیر این صورت آزمون شکست میخورد، و اگر هشدارهایی نشان داده شوند که با هیچیک از فیلترهای مشخصشده مطابقت نداشته باشند، آزمون شکست میخورد. برای غیرفعال کردن اولین مورد از این بررسیها، quiet را رویTrueتنظیم کنید.اگر هیچ آرگومانی مشخص نشده باشد، بهطور پیشفرض برابر است با:
check_warnings(("", Warning), quiet=True)
در این حالت، همهی هشدارها گرفته میشوند و هیچ خطایی پرتاب نمیشود.
در هنگام ورود به مدیر زمینه، یک نمونه از
WarningRecorderبازگردانده میشود. فهرست هشدارهای زیربنایی حاصل ازcatch_warnings()از طریق ویژگیwarningsشیء ضبطکننده در دسترس است. برای سهولت، میتوان به ویژگیهای شیء نمایانگر آخرین هشدار نیز مستقیماً از طریق شیء ضبطکننده دسترسی پیدا کرد (مثال زیر را ببینید). اگر هیچ هشداری پرتاب نشده باشد، هر یک از ویژگیهایی که در حالت عادی انتظار میرود در شیء نمایانگر هشدار وجود داشته باشد،Noneرا برمیگرداند.شیء ضبطکننده همچنین یک متد
reset()دارد که فهرست هشدارها را پاک میکند.این مدیر زمینه بهگونهای طراحی شده است که به این شکل استفاده شود:
with check_warnings(("assertion is always true", SyntaxWarning), ("", UserWarning)): exec('assert(False, "Hey!")') warnings.warn(UserWarning("Hide me!"))
در این حالت، اگر هر یک از هشدارها پرتاب نشده باشد، یا هشدار دیگری پرتاب شده باشد،
check_warnings()خطایی پرتاب میکند.هنگامی که یک آزمون نیاز دارد بهجای بررسی صرف اینکه هشدارها رخ دادهاند یا خیر، آنها را عمیقتر بررسی کند، میتوان از کدی مانند این استفاده کرد:
with check_warnings(quiet=True) as w: warnings.warn("foo") assert str(w.args[0]) == "foo" warnings.warn("bar") assert str(w.args[0]) == "bar" assert str(w.warnings[0].args[0]) == "foo" assert str(w.warnings[1].args[0]) == "bar" w.reset() assert len(w.warnings) == 0
در اینجا تمام هشدارها گرفته خواهند شد و کد آزمون، هشدارهای گرفتهشده را مستقیماً آزمون میکند.
تغییر یافته در نسخهی 3.2: آرگومانهای اختیاری جدید filters و quiet.
- class test.support.warnings_helper.WarningsRecorder¶
کلاسی که برای ثبت هشدارها در آزمون واحدها استفاده میشود. برای جزئیات بیشتر، مستندات
check_warnings()در بالا را ببینید.