تست: شروع به کار
معرفی
لاراول با آزمایش در ذهن ساخته شده است. در واقع، پشتیبانی از تست با
Pest
و
PHPUnit
خارج از جعبه گنجانده شده است و یک
phpunit.xml
فایل از قبل برای برنامه شما تنظیم شده است. این فریم ورک همچنین با روشهای کمکی راحت ارائه میشود که به شما امکان میدهد برنامههای خود را به طور واضح آزمایش کنید.
به طور پیش فرض، دایرکتوری برنامه شما
tests
شامل دو دایرکتوری است:
Feature
و
Unit
. تست های واحد تست هایی هستند که بر روی بخش بسیار کوچک و جدا شده از کد شما تمرکز می کنند. در واقع، اکثر آزمونهای واحد احتمالاً بر روی یک روش متمرکز هستند. تستهای موجود در دایرکتوری آزمایشی "Unit" شما برنامه لاراول شما را بوت نمیکنند و بنابراین نمیتوانند به پایگاه داده برنامه یا سایر خدمات فریمورک شما دسترسی داشته باشند.
آزمایشهای ویژگی ممکن است بخش بزرگتری از کد شما را آزمایش کنند، از جمله نحوه تعامل چندین شی با یکدیگر یا حتی یک درخواست HTTP کامل به نقطه پایانی JSON. به طور کلی، بیشتر تست های شما باید تست های ویژگی باشد. این نوع تستها بیشترین اطمینان را به وجود میآورند که سیستم شما بهعنوان یک کل آنطور که در نظر گرفته شده است کار میکند.
یک
ExampleTest.php
فایل در هر دو دایرکتوری
Feature
و
Unit
تست ارائه شده است. پس از نصب یک برنامه جدید لاراول، دستورات
vendor/bin/pest
،
vendor/bin/phpunit
یا را
php artisan test
برای اجرای آزمایشات خود اجرا کنید.
محیط
هنگام اجرای تست ها، لاراول
به
دلیل متغیرهای محیطی که در فایل تعریف شده است، به طور خودکار
محیط پیکربندی
را تنظیم می کند . لاراول همچنین به طور خودکار Session و Cache را برای
درایور پیکربندی میکند تا هیچ جلسه یا دادههای حافظه پنهان در هنگام آزمایش حفظ نشود.
testing
phpunit.xml
array
در صورت لزوم می توانید مقادیر پیکربندی محیط آزمایشی دیگر را تعریف کنید. متغیرهای
testing
محیط ممکن است در فایل برنامه شما پیکربندی شده باشند
phpunit.xml
، اما مطمئن شوید که کش پیکربندی خود را با استفاده از
config:clear
دستور Artisan قبل از اجرای آزمایشات پاک کنید!
فایل
.env.testing
محیطی
علاوه بر این، می توانید یک
.env.testing
فایل در ریشه پروژه خود ایجاد کنید.
.env
هنگام اجرای تست های Pest و PHPUnit یا اجرای دستورات Artisan با گزینه
، از این فایل به جای فایل استفاده می شود
--env=testing
.
ایجاد تست
برای ایجاد یک تست جدید، از
make:test
دستور Artisan استفاده کنید. به طور پیش فرض، تست ها در فهرست قرار می گیرند
tests/Feature
:
php artisan make:test UserTest
اگر می خواهید یک تست در
tests/Unit
دایرکتوری ایجاد کنید، می توانید
--unit
هنگام اجرای
make:test
دستور از این گزینه استفاده کنید:
php artisan make:test UserTest --unit
مقالات خرد آزمایشی ممکن است با استفاده از انتشار خرد سفارشی شوند .
هنگامی که تست تولید شد، می توانید تست را همانطور که معمولاً با استفاده از Pest یا PHPUnit تعریف می کنید، تعریف کنید. برای اجرای آزمایشات خود، دستور
vendor/bin/pest
،
vendor/bin/phpunit
یا را
php artisan test
از ترمینال خود اجرا کنید:
<?php test('basic', function () { expect(true)->toBeTrue();});
<?php namespace Tests\Unit; use PHPUnit\Framework\TestCase; class ExampleTest extends TestCase{ /** * A basic test example. */ public function test_basic_test(): void { $this->assertTrue(true); }}
setUp
اگر متدهای / خود راtearDown
در یک کلاس آزمایشی تعریف میکنید، حتماً متدهایparent::setUp()
/ مربوطهparent::tearDown()
را در کلاس والد فراخوانی کنید. به طور معمول، شما بایدparent::setUp()
در شروعsetUp
روش خود وparent::tearDown()
در پایانtearDown
متد خود فراخوانی کنید.
در حال اجرا تست ها
همانطور که قبلا ذکر شد، پس از نوشتن تست ها، می توانید آنها را با استفاده
pest
از یا اجرا کنید
phpunit
:
./vendor/bin/pest
./vendor/bin/phpunit
علاوه بر دستورات
pest
یا
phpunit
، می توانید از
test
دستور Artisan برای اجرای تست های خود استفاده کنید. Artisan test runner برای سهولت توسعه و اشکالزدایی، گزارشهای آزمایشی مفصل ارائه میکند:
php artisan test
هر آرگومان قابل انتقال به دستورات
pest
یا
phpunit
ممکن است به دستور Artisan نیز ارسال شود
test
:
php artisan test --testsuite=Feature --stop-on-failure
اجرای تست ها به صورت موازی
به طور پیش فرض، Laravel و Pest / PHPUnit تست های شما را به صورت متوالی در یک فرآیند واحد اجرا می کنند. با این حال، ممکن است با اجرای همزمان تستها در چندین فرآیند، مدت زمان اجرای تستهای خود را تا حد زیادی کاهش دهید. برای شروع، باید
brianium/paratest
بسته Composer را به عنوان یک وابستگی "dev" نصب کنید. سپس
--parallel
هنگام اجرای
test
دستور Artisan گزینه زیر را وارد کنید:
composer require brianium/paratest --dev php artisan test --parallel
بهطور پیشفرض، لاراول به تعداد هستههای CPU موجود در دستگاه شما، فرآیند ایجاد میکند. با این حال، می توانید تعداد فرآیندها را با استفاده از
--processes
گزینه تنظیم کنید:
php artisan test --parallel --processes=4
هنگام اجرای آزمایشها به صورت موازی، برخی از گزینههای Pest / 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;use PHPUnit\Framework\TestCase; class AppServiceProvider extends ServiceProvider{ /** * Bootstrap any application services. */ public function boot(): void { ParallelTesting::setUpProcess(function (int $token) { // ... }); ParallelTesting::setUpTestCase(function (int $token, TestCase $testCase) { // ... }); // Executed when a test database is created... ParallelTesting::setUpTestDatabase(function (string $database, int $token) { Artisan::call('db:seed'); }); ParallelTesting::tearDownTestCase(function (int $token, TestCase $testCase) { // ... }); ParallelTesting::tearDownProcess(function (int $token) { // ... }); }}
دسترسی به رمز تست موازی
اگر میخواهید از هر مکان دیگری در کد آزمایشی برنامه خود به «توکن» فرآیند موازی فعلی دسترسی داشته باشید، میتوانید از این
token
روش استفاده کنید. این توکن یک شناسه رشته منحصر به فرد برای یک فرآیند آزمایشی فردی است و ممکن است برای تقسیمبندی منابع در فرآیندهای آزمایشی موازی استفاده شود. به عنوان مثال، لاراول به طور خودکار این نشانه را به انتهای پایگاه داده های آزمایشی ایجاد شده توسط هر فرآیند آزمایش موازی اضافه می کند:
$token = ParallelTesting::token();
گزارش پوشش آزمون
هنگام اجرای آزمون های برنامه کاربردی، ممکن است بخواهید تعیین کنید که آیا موارد آزمایشی شما واقعاً کد برنامه را پوشش می دهد و چه مقدار از کد برنامه کاربردی هنگام اجرای آزمون های شما استفاده می شود. برای انجام این کار، میتوانید
--coverage
هنگام فراخوانی
test
دستور، این گزینه را ارائه دهید:
php artisan test --coverage
اجرای حداقل آستانه پوشش
می توانید از
--min
گزینه تعیین حداقل آستانه پوشش آزمون برای برنامه خود استفاده کنید. اگر این آستانه رعایت نشود، مجموعه آزمایشی با شکست مواجه خواهد شد:
php artisan test --coverage --min=80.3
تست های پروفایل
آزمون دونده Artisan همچنین دارای مکانیزمی مناسب برای فهرست کردن کندترین تستهای برنامه شما است.
test
فرمان را با گزینه ای
فراخوانی کنید
--profile
تا لیستی از ده تست کندتر شما ارائه شود، به شما این امکان را می دهد که به راحتی بررسی کنید که کدام تست می تواند برای افزایش سرعت مجموعه تست شما بهبود یابد:
php artisan test --profile