برنامه نویسی

بهبود عملکرد در تست های ادغام با PHP/Laravel

با افزایش برنامه ما، تعداد مهاجرت ها نیز افزایش می یابد. در برخی موارد، در تست های یکپارچه سازی، کل ساختار پایگاه داده در حال آزمایش را انتخاب کردیم، بنابراین در هر آزمون پایگاه داده را ایجاد و حذف کردیم. با این حال، با گذشت زمان، این کار سخت می‌شود و شروع به تأثیرگذاری بر تأخیر طولانی فرآیند CI برنامه می‌کند و ناراحتی ایجاد می‌کند، به‌ویژه زمانی که ما یک Hotfix داریم که باید در سریع‌ترین زمان ممکن آپلود شود.

معمولاً برای آزمایش یک صفت استفاده می شود RefreshDatabase، بیایید ببینیم این ویژگی چه می کند.

توضیحات تصویر

ببینید که از دستور در صفت استفاده شده است migrate:fresh، این دستور کل بانک را لغو می کند و دوباره ایجاد می کند، این کار در هر پشته آزمایشی انجام می شود.
من یک پروژه ساده برای تجزیه و تحلیل زمان صرف شده با استفاده از این ویژگی ایجاد کردم RefreshDatabase

توضیحات تصویر

با اجرای 11 تست، 1.86 گرفتیم، به نظر خوب است، اما مهاجرت های ما تغییر نمی کند درست است؟ عمدتاً با پروژه ای که قبلاً در حال تولید است، پس چرا همیشه نیاز به ایجاد مجدد پایگاه داده در هر آزمایش داریم؟

بیایید روش دیگری را امتحان کنیم، در لاراول یک ویژگی دیگر به نام داریم DatabaseTransactions، بیایید نگاهی به آن بیندازیم.

توضیحات تصویر

توجه داشته باشید که در این ویژگی ما چیز متفاوتی داریم، در ابتدای تست یک تراکنش بانکی ایجاد می شود و پس از اتمام یک بازگشت داده می شود، بیایید آن را جایگزین کنیم و ببینیم چه می شود.

توضیحات تصویر

اوه، ما یک خطا داریم، برای حل این مشکل باید مهاجرت های خود را قبل از آزمایش اجرا کنیم، می توانیم از پیکربندی بوت استرپ phpunit برای آن استفاده کنیم، به طور پیش فرض این پیکربندی به فایل Autoload فروشنده ما اشاره می کند.

توضیحات تصویر

برای اطلاعات بیشتر در مورد phpunit bootstrap اینجا را کلیک کنید

بیایید یک فایل بوت استرپ سفارشی ایجاد کنیم.

توضیحات تصویر

در فایل بوت استرپ اپلیکیشن را مقداردهی اولیه می کنیم و در پایان دستور را داریم migrate:fresh، این دستور فقط یک بار در مقداردهی اولیه تست ها اجرا می شود، حال اجازه دهید مسیر بوت استرپ را در پیکربندی phpunit.xml تنظیم کنیم و به فایل جدید اشاره کنیم و دوباره تست ها را اجرا کنیم.

توضیحات تصویر

نتیجه

آنچه ما می بینیم یک تفاوت پوچ در عملکرد در تست های ما است. برای یک پروژه بسیار بزرگ با مهاجرت های زیاد از این ویژگی استفاده کنید DatabaseTransactions تست‌ها را بسیار کارآمدتر کنید، در اینجا چند نمونه از پروژه توسعه‌یافته در این نسخه نمایشی در Github من، با شعبه با استفاده از RefreshDatabase و با DatabaseTransaction آورده شده است، امیدوارم این پست مفید باشد.

نوشته های مشابه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا