تست: شروع به کار
معرفی
لاراول با آزمایش در ذهن ساخته شده است. در واقع، پشتیبانی از آزمایش با
PHPUnit خارج از جعبه گنجانده شده است و یک
phpunit.xml
فایل از قبل برای برنامه شما تنظیم شده است. این فریم ورک همچنین با روشهای
کمکی راحت ارائه میشود که به شما امکان میدهد برنامههای خود را به طور واضح آزمایش کنید.
به طور پیش فرض، دایرکتوری برنامه شما
tests
شامل دو دایرکتوری است:
Feature
و
Unit
. تست های واحد تست هایی هستند که بر روی بخش بسیار کوچک و جدا شده از کد
شما تمرکز می کنند. در واقع، اکثر آزمونهای واحد احتمالاً بر روی یک روش متمرکز هستند. تستهای موجود در
دایرکتوری آزمایشی "Unit" برنامه لاراول شما را بوت نمیکنند و بنابراین نمیتوانند به پایگاه داده برنامه یا
سایر خدمات فریمورک شما دسترسی داشته باشند.
آزمایشهای ویژگی ممکن است بخش بزرگتری از کد شما را آزمایش کنند، از جمله نحوه تعامل چندین شی با یکدیگر یا حتی یک درخواست HTTP کامل به نقطه پایانی JSON. به طور کلی، بیشتر تست های شما باید تست های ویژگی باشد. این نوع تستها بیشترین اطمینان را به وجود میآورند که سیستم شما بهعنوان یک کل آنطور که در نظر گرفته شده است کار میکند.
یک
ExampleTest.php
فایل در هر دو دایرکتوری
Feature
و
Unit
تست ارائه شده است. پس از نصب یک برنامه جدید لاراول، دستورات
vendor/bin/phpunit
یا را
php artisan test
برای اجرای آزمایشات خود اجرا کنید.
محیط
هنگام اجرای تست ها، لاراول
به
دلیل متغیرهای محیطی که در فایل تعریف شده است، به طور خودکار
محیط پیکربندی
را تنظیم می کند . لاراول همچنین به طور خودکار جلسه و حافظه پنهان را
در هنگام آزمایش برای درایور پیکربندی میکند، به این معنی که هیچ جلسه یا
دادهای از حافظه پنهان در حین آزمایش باقی نمیماند.
testing
phpunit.xml
array
در صورت لزوم می توانید مقادیر پیکربندی محیط آزمایشی دیگر را تعریف کنید.
متغیرهای
testing
محیط ممکن است در فایل برنامه شما پیکربندی شده باشند
phpunit.xml
، اما مطمئن شوید که کش پیکربندی خود را با استفاده از
config:clear
دستور Artisan قبل از اجرای آزمایشات پاک کنید!
فایل
.env.testing
محیطی
علاوه بر این، می توانید یک
.env.testing
فایل در ریشه پروژه خود ایجاد کنید.
.env
هنگام اجرای تست های PHPUnit یا اجرای دستورات Artisan با گزینه
، از این فایل به جای فایل استفاده می شود
--env=testing
.
صفت
CreatesApplication
_
لاراول شامل یک
CreatesApplication
ویژگی است که به کلاس پایه برنامه شما اعمال می شود
TestCase
. این ویژگی حاوی
createApplication
روشی است که برنامه لاراول را قبل از اجرای تست های شما بوت استرپ می کند.
مهم است که این ویژگی را در محل اصلی خود رها کنید زیرا برخی از ویژگی ها، مانند ویژگی تست موازی لاراول، به آن
بستگی دارد.
ایجاد تست
برای ایجاد یک تست جدید، از
make:test
دستور Artisan استفاده کنید. به طور پیش فرض، تست ها در فهرست قرار می گیرند
tests/Feature
:
php artisan make:test UserTest
اگر می خواهید یک تست در
tests/Unit
دایرکتوری ایجاد کنید، می توانید
--unit
هنگام اجرای
make:test
دستور از این گزینه استفاده کنید:
php artisan make:test UserTest --unit
اگر می خواهید یک تست
Pest PHP
ایجاد کنید ، می توانید این
--pest
گزینه را برای
make:test
دستور ارائه دهید:
php artisan make:test UserTest --pestphp artisan make:test UserTest --unit --pest
مقالات خرد آزمایشی ممکن است با استفاده از انتشار خرد سفارشی شوند .
هنگامی که تست تولید شد، می توانید روش های تست را همانطور که معمولاً با
استفاده از
PHPUnit
تعریف می کنید، تعریف کنید . برای اجرای آزمایشات خود، دستور
vendor/bin/phpunit
یا
php artisan test
را از ترمینال خود اجرا کنید:
<?php namespace Tests\Unit; use PHPUnit\Framework\TestCase; class ExampleTest extends TestCase{ /** * A basic test example. * * @return void */ public function test_basic_test() { $this->assertTrue(true); }}
setUp
اگر متدهای / خود راtearDown
در یک کلاس آزمایشی تعریف میکنید، حتماً متدهایparent::setUp()
/ مربوطهparent::tearDown()
را در کلاس والد فراخوانی کنید.
در حال اجرا تست ها
همانطور که قبلا ذکر شد، پس از نوشتن تست ها، می توانید آنها را با استفاده
از
phpunit
:
./vendor/bin/phpunit
علاوه بر
phpunit
دستور، می توانید از
test
دستور Artisan برای اجرای تست های خود استفاده کنید. Artisan test runner
برای سهولت توسعه و اشکالزدایی، گزارشهای آزمایشی مفصل ارائه میکند:
php artisan test
هر آرگومان قابل انتقال به
phpunit
دستور ممکن است به دستور Artisan نیز منتقل شود
test
:
php artisan test --testsuite=Feature --stop-on-failure
اجرای تست ها به صورت موازی
به طور پیش فرض، لاراول و PHPUnit تست های شما را به صورت متوالی در یک
فرآیند واحد اجرا می کنند. با این حال، ممکن است با اجرای همزمان تستها در چندین فرآیند، مدت زمان اجرای
تستهای خود را تا حد زیادی کاهش دهید. برای شروع، مطمئن شوید که برنامه شما به نسخه
^5.3
یا نسخه بالاتر بسته بستگی دارد
nunomaduro/collision
. سپس
--parallel
هنگام اجرای
test
دستور Artisan گزینه زیر را وارد کنید:
php artisan test --parallel
بهطور پیشفرض، لاراول به تعداد هستههای CPU موجود در دستگاه شما، فرآیند
ایجاد میکند. با این حال، می توانید تعداد فرآیندها را با استفاده از
--processes
گزینه تنظیم کنید:
php artisan test --parallel --processes=4
هنگام اجرای آزمایشها به صورت موازی، برخی از گزینههای PHPUnit (مانند
--do-not-cache-result
) ممکن است در دسترس نباشند.
تست موازی و پایگاه داده
تا زمانی که یک اتصال پایگاه داده اولیه را پیکربندی کرده باشید، لاراول به
طور خودکار ایجاد و انتقال یک پایگاه داده آزمایشی را برای هر فرآیند موازی که آزمایش های شما را اجرا می کند،
مدیریت می کند. پایگاههای داده آزمایشی با یک رمز فرآیند که در هر فرآیند منحصربهفرد است، پسوند میشوند. به
عنوان مثال، اگر دو فرآیند تست موازی داشته باشید، لاراول پایگاه داده ایجاد و استفاده
your_db_test_1
و
your_db_test_2
آزمایش می کند.
بهطور پیشفرض، پایگاههای داده آزمایشی بین فراخوانیهای
test
دستور Artisan باقی میمانند تا بتوان با
test
فراخوانیهای بعدی دوباره از آنها استفاده کرد. با این حال، می توانید آنها
را با استفاده از این گزینه دوباره ایجاد کنید
--recreate-databases
:
php artisan test --parallel --recreate-databases
قلاب های تست موازی
گاهی اوقات، ممکن است لازم باشد منابع خاصی را که توسط تست های برنامه خود مورد استفاده قرار می گیرند، آماده کنید تا بتوانند به طور ایمن توسط چندین فرآیند آزمایشی مورد استفاده قرار گیرند.
با استفاده از
ParallelTesting
نما، میتوانید کدی را برای اجرا بر روی یک فرآیند یا مورد آزمایشی مشخص
setUp
کنید
tearDown
. بسته های داده شده به ترتیب، متغیرهای حاوی رمز فرآیند و مورد آزمایش فعلی
را دریافت می
$token
کنند
$testCase
:
<?php namespace App\Providers; use Illuminate\Support\Facades\Artisan;use Illuminate\Support\Facades\ParallelTesting;use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider{ /** * Bootstrap any application services. * * @return void */ public function boot() { ParallelTesting::setUpProcess(function ($token) { // ... }); ParallelTesting::setUpTestCase(function ($token, $testCase) { // ... }); // Executed when a test database is created... ParallelTesting::setUpTestDatabase(function ($database, $token) { Artisan::call('db:seed'); }); ParallelTesting::tearDownTestCase(function ($token, $testCase) { // ... }); ParallelTesting::tearDownProcess(function ($token) { // ... }); }}
دسترسی به رمز تست موازی
اگر میخواهید از هر مکان دیگری در کد آزمایشی برنامه خود به «توکن» فرآیند
موازی فعلی دسترسی داشته باشید، میتوانید از این
token
روش استفاده کنید. این توکن یک شناسه رشته منحصر به فرد برای یک فرآیند
آزمایشی فردی است و ممکن است برای تقسیمبندی منابع در فرآیندهای آزمایشی موازی استفاده شود. به عنوان مثال،
لاراول به طور خودکار این نشانه را به انتهای پایگاه داده های آزمایشی ایجاد شده توسط هر فرآیند آزمایش موازی
اضافه می کند:
$token = ParallelTesting::token();
گزارش پوشش آزمون
هنگام اجرای آزمونهای برنامه، ممکن است بخواهید تعیین کنید که آیا موارد
آزمایشی شما واقعاً کد برنامه را پوشش میدهند و چه مقدار از کد برنامه هنگام اجرای آزمایشهای شما استفاده
میشود. برای انجام این کار، میتوانید
--coverage
هنگام فراخوانی
test
دستور، این گزینه را ارائه دهید:
php artisan test --coverage
اجرای حداقل آستانه پوشش
می توانید از
--min
گزینه تعیین حداقل آستانه پوشش آزمون برای برنامه خود استفاده کنید. اگر این
آستانه رعایت نشود، مجموعه آزمایشی با شکست مواجه خواهد شد:
php artisan test --coverage --min=80.3