کتاب Python Testing with pytest یا آزمایش کدهای پایتون با pytest یک منبع بسیار جالب و خواندنی برای بررسی و امتحان کدهای پایتون با استفاده از کتابخانه pytest میباشد. این کتاب علاوه بر اصول آزمایش کد و خطایابی آن شما را با نحوه کار با این کتابخانه قدرتمند آشنا میکند.
در ادامه مقدمهای از کتاب Python Testing with pytest را از زبان نویسنده شرح خواهیم داد.
مقدمهای بر کتاب Python Testing with pytest:
استفاده از پایتون نه تنها در توسعه نرمافزار، بلکه در زمینههایی مانند علم داده، یادگیری ماشین، تجزیه و تحلیل دادهها، علوم تحقیقاتی، امور مالی و تقریباً تمام صنایع دیگر در حال افزایش است. رشد پایتون در بسیاری از زمینههای حیاتی نیز با تمایل به اجرای صحیح، مؤثر و کارآمد تستهای نرمافزاری برای اطمینان از اجرای صحیح برنامهها و تولید نتایج صحیح همراه است. علاوه بر این، پروژههای نرمافزاری بیشتر و بیشتری از یکپارچگی مداوم و شامل یک مرحله آزمایش خودکار استقبال میکنند.
هنوز جایی برای آزمایش دستی اکتشافی وجود دارد – اما آزمایش دستی کامل پروژههای پیچیدهتر غیرممکن است. تیمها باید بتوانند به تستهایی که توسط سرورهای یکپارچه سازی مداوم اجرا میشود اعتماد کنند تا به آنها بگویند که آیا میتوانند به اندازه کافی به نرمافزار خود برای انتشار آن اعتماد کنند یا خیر.
pytest را وارد کنید. pytest یک ابزار تست پایتون قوی است که میتواند برای انواع و سطوح تست نرمافزار استفاده شود. pytest میتواند توسط تیمهای توسعه، تیمهای تضمین کیفیت، گروههای تست مستقل، و افرادی که توسعه مبتنی بر آزمایش را تمرین میکنند، هم برای پروژههای تجاری و هم برای پروژههای منبع باز استفاده کنند. در واقع، پروژهها در سراسر اینترنت از unittest یا nose به pytest تغییر کردهاند، از جمله Mozilla و Dropbox. چرا؟ از آنجا که pytest ویژگیهای قدرتمندی مانند بازنویسی مجدد، یک مدل پلاگین شخص ثالث و یک مدل ثابت قدرتمند و در عین حال ساده را ارائه میکند که در هیچ چارچوب آزمایشی دیگری قابل مقایسه نیست.
چرا pytest؟
pytest یک چارچوب تست نرمافزار است، به این معنی که pytest یک ابزار خط فرمان است که به طور خودکار تستهایی را که شما نوشتهاید پیدا میکند، آزمایشها را اجرا میکند و نتایج را گزارش میکند. این دارای یک کتابخانه از موارد مفید است که میتوانید از آنها در تستهای خود استفاده کنید تا به شما کمک کند تا به طور مؤثرتری تست کنید. با نوشتن پلاگین یا نصب افزونههای شخص ثالث میتوان آن را گسترش داد. و به راحتی با ابزارهای دیگر مانند ادغام مداوم و اتوماسیون وب ادغام میشود.
در اینجا چند مورد از دلایل برجسته شدن pytest بالاتر از بسیاری از چارچوبهای آزمایشی دیگر آورده شده است:
- نوشتن تستهای ساده در pytest ساده است.
- نوشتن تستهای پیچیده هنوز ساده است.
- خواندن تستها آسان است.
- خواندن تستها آسان است. (بسیار مهم است که دو بار ذکر شده است.)
- میتوانید در عرض چند ثانیه شروع کنید.
- شما از assert در تستها برای تأیید استفاده میکنید، نه چیزهایی مانند self.assertEqual() یا self.assertLessThan(). فقط ادعا کن
- میتوانید از pytest برای اجرای تستهای نوشته شده برای unittest یا nose استفاده کنید.
pytest به طور فعال توسط یک جامعه پرشور و در حال رشد در حال توسعه و نگهداری است. آنقدر توسعهپذیر و انعطافپذیر است که به راحتی در جریان کار شما قرار میگیرد. و چون جدا از نسخه پایتون شما نصب شده است، میتوانید از همان نسخه پایتون در چندین نسخه پایتون استفاده کنید.
pytest را در حین آزمایش یک نمونه برنامه یاد بگیرید
در کتاب Python Testing with pytest، شما با نوشتن تستهایی در برابر یک پروژه نمونه، pytest را یاد خواهید گرفت که امیدوارم بسیاری از ویژگیهای کاربردی مشابهی را داشته باشد که پس از خواندن این کتاب آزمایش خواهید کرد.
نرمافزار نمونه کارت نام دارد. Cards یک برنامه ردیابی کار حداقلی با رابط کاربری خط فرمان است. به اندازه کافی با بسیاری از انواع دیگر برنامهها مشترک است که امیدوارم بتوانید به راحتی ببینید که چگونه مفاهیم آزمایشی که هنگام توسعه تستها در برابر کارتها یاد میگیرید در پروژههای شما در حال حاضر و آینده قابل اجرا هستند.
کارتها دارای یک رابط خط فرمان (CLI) هستند. CLI از طریق یک رابط برنامهنویسی کاربردی (API) با بقیه کدها تعامل دارد. API رابطی است که بیشتر آزمایشات خود را در آن هدایت خواهید کرد. API با یک لایه کنترل پایگاه داده، که با پایگاه داده سند، TinyDB، تعامل دارد.
این پیچیدهترین برنامه مدیریت کار نیست، اما به اندازه کافی پیچیده است که بتوان از آن برای کشف آزمایش استفاده کرد.
بیشتر بخوانید: کتاب Advanced Python Programming
نحوه تنظیم کتاب Python Testing with pytest
کتاب در سه بخش تنظیم شده است. در قسمت 1، Primary Power، pytest را نصب کرده و با استفاده از پروژه Cards در طول مسیر شروع به کشف ویژگیهای اصلی آن خواهید کرد. شما یاد خواهید گرفت که چگونه توابع آزمایشی ساده را در خط فرمان اجرا کنید.
سپس از فیکسچرهای pytest برای خارج کردن کد راهاندازی و حذف از توابع آزمایشی استفاده خواهید کرد. شما یاد خواهید گرفت که چگونه از بسیاری از فیکسچرهای داخلی pytest برای کمک به مشکلات رایج تست مانند دایرکتوریهای موقت استفاده کنید. همچنین یاد خواهید گرفت که چگونه یک تست را با پارامترسازی به چند مورد تست تبدیل کنید. و در نهایت، یاد خواهید گرفت که چگونه از نشانگرها برای اجرای زیرمجموعهای از تستها استفاده کنید.
در قسمت 2 از کتاب Python Testing with pytest، کار با پروژهها، به برخی مسائل دنیای واقعی در مورد پروژههای آزمایشی نگاه میکنید، و همچنین قدرت پایتست را بیشتر کشف خواهید کرد. شما با کاوش یک فرآیند استراتژی ساده تست و اعمال آن در پروژه Cards شروع خواهید کرد.
نگاهی به فایلهای پیکربندی و همه فایلهای غیرآزمایشی دیگری که در پروژههای آزمایشی دخیل هستند، بیندازید. از تجزیه و تحلیل پوشش استفاده میکنید تا ببینید حفرههای آزمایشی ما در مورد کارتها کجا هستند و از تمسخر برای کمک به آزمایش رابط کاربری و پر کردن برخی از شکافهای پوشش استفاده میکنید. واقعاً همه آزمایشها شامل اشکالزدایی کدها و تستها میشود، بنابراین شما نگاهی به برخی از ویژگیهای عالی pytest خواهید داشت تا به ما در رفع اشکالهای تست کمک کند.
بسیاری از پروژهها از یکپارچه سازی پیوسته (CI) استفاده میکنند. Tox یک چارچوب محبوب برای شبیه سازی یک سیستم CI محلی است. شما به استفاده از pytest با tox و با سیستمهای CI میزبانی شده نگاه خواهید کرد. قسمت دوم همچنین شامل نگاهی به مسیر جستجوی پایتون است. پروژه Cards یک بسته Python قابل نصب است. با این حال، همه پروژههای آزمایشی شامل بستههای نصب شده نیستند. این فصل از کتاب Python Testing with pytest در قسمت دوم به این موضوع میپردازد که چگونه میتوانید به pytest بگویید کد منبع شما را پیدا کند.
در قسمت 3، Booster Rockets، تستهای خود را به سطح بعدی خواهید برد. شما یاد خواهید گرفت که چگونه از پلاگینهای شخص ثالث برای گسترش قابلیتهای pytest استفاده کنید و یاد خواهید گرفت که چگونه پلاگینهای خود را بسازید. همچنین تکنیکهای پارامترسازی پیشرفته را یاد خواهید گرفت که بر اساس آنچه در قسمت اول آموختهاید، ساخته میشوند.
چه چیزی میخواهید بدانید؟
پایتون
کتاب Python Testing with pytest فرض میکند که شما با پایتون نسبتاً راحت هستید. شما نیازی به دانستن تعداد زیادی از Python ندارید – مثالها کار فوقالعاده عجیب و جالبی انجام نمیدهند – اما Python با جزئیات توضیح داده نشده است.
pip
برای نصب افزونههای pytest و pytest باید از pip استفاده کنید. اگر میخواهید در pip تجدید نظر کنید، پیوست 2، pip را بررسی کنید.
یک خط فرمان
من کتاب Python Testing with pytest را نوشتم و نمونه خروجی را با استفاده از zsh در لپتاپ مک گرفتم. با این حال، تنها دستوراتی که من در zsh استفاده میکنم، cd برای رفتن به یک فهرست خاص و البته pytest است. از آنجایی که دستور cd در cmd.exe ویندوز و تمام پوستههای یونیکس که من میشناسم وجود دارد، همه نمونهها باید روی هر برنامه ترمینال مانندی که انتخاب میکنید قابل اجرا باشند.
همین است، واقعا. برای شروع نوشتن تستهای نرمافزاری خودکار با pytest، نیازی نیست که یک متخصص برنامهنویسی باشید.
چرا نسخه دوم؟
هم پایتون و هم pytest از زمان انتشار اولین نسخه کتاب Python Testing with pytest در سال 2017 تغییر کردهاند. به روز رسانیهایی برای pytest وجود دارد که اکنون در کتاب منعکس شده است:
- وسایل جدید توکار
- پرچمهای جدید
- اضافه شدن وسایل بستهبندی
- همچنین به روز رسانیهایی برای پایتون وجود دارد که در کتاب منعکس شده است:
- پذیرش رشتههای f و pathlib
- اضافه شدن کلاسهای داده
همچنین، از زمان انتشار اولین ویرایش، به افراد بسیار زیادی در مورد pytest آموزش دادهام، و فکر میکنم یاد گرفتهام که چگونه معلم بهتری باشم. ویرایش دوم نه تنها آنچه را که در چاپ اول پوشش داده شده است گسترش میدهد – از 7 فصل به 16 فصل رسید! – بلکه مطالب را به شیوه ای تدریجی تر و قابل هضمتر ارائه میدهد.
بنابراین در تمام این فصلهای جدید چه چیزی وجود دارد؟
بیشتر در مورد پارامترسازی، نشانگرها، پوشش، تمسخر، ادغام سموم و پیوسته، و پلاگینهای شخص ثالث. همه این موضوعات در چاپ اول پوشش داده شد، اما در این ویرایش من این پوشش را گسترش دادم. من بحث پارامترسازی را به فصل خودش کشیدم و بحثی در مورد تکنیکهای پارامترسازی پیشرفته اضافه کردم. من عمیقتر به نشانگرها میپردازم و مثالی از نحوه انتقال دادهها از نشانگرها به فیکسچرها را اضافه میکنم (که بسیار جالب است). همچنین شما را به بررسی عمیقتر پوشش تست، تمسخر، و CI، و استفاده و ساخت پلاگینهای خود برای گسترش قابلیتهای pytest میبرم.
بحث در مورد استراتژی آزمون بازخورد چاپ اول این بود که کتاب برای مکانیک نحوه استفاده از pytest عالی بود، اما “چه تستی بنویسم؟” اطلاعات کمی کم بود فصل 7 جدید، استراتژی، فشاری است در جهت درست برای نوشتن چه تستهایی. درمان کامل استراتژی آزمون به خودی خود یک کتاب خواهد بود. با این حال، این فصل شما را شروع میکند.
اطلاعاتی در مورد مسیر جستجوی پایتون بسیاری از خوانندگان با من تماس گرفتند و از من پرسیدند که چگونه میتوان تستهایشان را برای دیدن کد تستشان دریافت کرد، و نسخه اول آن را پوشش نداد. پروژه موجود در این کتاب، Cards، این مشکل را ندارد زیرا یک بسته پایتون نصب شده است. با این حال، بسیاری از پروژههای کاربر، برنامهها یا اسکریپتها یا بسیاری چیزهای دیگر هستند که بستههای نصب نشدهاند. این فصل از کتاب Python Testing with pytest نگاهی متمرکز به مشکل ارائه میدهد و راه حلهایی را ارائه میدهد.
من اطلاعات مربوط به اشکالزدایی خطاهای تست را در فصلی ادغام کردم. در آخرین ویرایش، این اطلاعات در سراسر کتاب Python Testing with pytest پخش شد. امیدوارم وقتی با یک ضربالاجل و یک مجموعه آزمون مردود مواجه میشوید، گردآوری این اطلاعات در یک فصل به شما کمک میکند تا به سرعت پاسخ خود را پیدا کنید و استرس را کاهش دهید.
در نهایت پروژه نمونه تغییر کرد. اولین نسخه از پروژهای به نام Tasks برای نشان دادن نحوه استفاده از pytest استفاده کرد. اکنون به آن کارت میگویند. در اینجا دلیل آن است:
گفتن با صدای بلند راحتتر است. (آن را امتحان کنید. سه بار «وظایف» و سپس سهبار «کارت» بگویید. درست است؟)
خود پروژه جدید متفاوت است زیرا از Typer به جای Click برای عملکرد خط فرمان استفاده میکند. خواندن کد تایپ راحت تر است.
این پروژه همچنین از Rich برای قالببندی خروجی استفاده میکند. وقتی اولین نسخه نوشته شد، ریچ وجود نداشت (تایپر هم وجود نداشت).
نمونههای کد نیز ساده شدهاند. ساختار دایرکتوری نمونههای کد ویرایش اول از پیشرفت یک فهرست راهنمای آزمایشی احتمالی در یک پروژه پیروی میکند و اکثر پروژه حذف میشود. جدی، فکر میکنم در آن زمان برای من منطقی بود. در این نسخه، یک پروژه در دایرکتوری خودش، cards_proj، بدون تست وجود دارد. سپس، هر یک از فصلها دارای کد آزمایشی (در صورت لزوم) هستند که روی یک پروژه یا روی کد محلی کار میکنند. به من اعتماد کنید، فکر میکنم قبول خواهید کرد که در حال حاضر پیگیری آن بسیار آسانتر است.
سرفصلهای کتاب Python Testing with pytest:
- Acknowledgments
- Preface
- Part I. Primary Power
- 1. Getting Started with pytest
- 2. Writing Test Functions
- 3. pytest Fixtures
- 4. Builtin Fixtures
- 5. Parametrization
- 6. Markers
- Part II. Working with Projects
- 7. Strategy
- 8. Configuration Files
- 9. Coverage
- 10. Mocking
- 11. tox and Continuous Integration
- 12. Testing Scripts and Applications
- 13. Debugging Test Failures
- Part III. Booster Rockets
- 14. Third-Party Plugins
- 15. Building Plugins
- 16. Advanced Parametrization
- A1. Virtual Environments
- A2. pip
فایل کتاب Python Testing with pytest را میتوانید پس از پرداخت، دریافت کنید.
دیدگاهها
هیچ دیدگاهی برای این محصول نوشته نشده است.