تست و دیباگ پروژههای توسعه وردپرس
راهنمای تست و دیباگ حرفهای وردپرس؛ از PHPUnit و WP-CLI تا Xdebug و لاگ.
تست و دیباگ، دو ستون پنهان پروژههای وردپرسی موفقاند. تجربهام: توسعهدهندگانی که این دو را جدی میگیرند، در شش ماه، بهرهوری دو برابری دارند؛ چون دیگر وقت خود را صرف حدس و آزمونوخطا در پشتیبانی نمیکنند. خبر خوب اینکه وردپرس، ابزارهای تست و دیباگ جامعی دارد که اکثر توسعهدهندگان از آنها غافلاند. این مقاله، چارچوب تست و دیباگ حرفهای را از پایه مرور میکند. اگر با مفاهیم پایه آشنا نیستید، توسعهٔ افزونه از صفر، شروع اصولی کدنویسی، و محیط لوکال را پیش از ادامه ببینید.
چرا تست و دیباگ؟
سه دلیل عملی: یک — اطمینان در تغییرات. وقتی تست دارید، میتوانید با اطمینان کد را تغییر دهید. دو — سرعت توسعه. در بلندمدت، تستها زمان میخرند. سه — کاهش باگ در Production. تجربهام: پروژهای که ۲۰٪ کدش تست داشته باشد، در شش ماه، ۵۰٪ کمتر باگ در Production دارد. اصول کلی در ساختاربندی پروژه و استانداردهای کدنویسی.
تست، بیمهنامهٔ توسعه است؛ بدون آن، هر تغییر، یک قمار است.
سطوح تست
پنج سطح تست در وردپرس: یک — Unit Test. تست یک تابع یا کلاس بهتنهایی. سریع، ولی نیاز به mock دارد. دو — Integration Test. تست تعامل کد با وردپرس. از WP_UnitTestCase. سه — Functional Test. تست تعامل کاربر با سایت. با Playwright، Cypress. چهار — Visual Regression. تست ظاهر بصری. پنج — Performance Test. تست سرعت و منابع. جدول انتخاب:
| سطح | مناسب برای | ابزار |
|---|---|---|
| Unit | توابع منطقی، بدون وابستگی به وردپرس | PHPUnit |
| Integration | تعامل با وردپرس، DB، هوکها | WP_UnitTestCase |
| Functional | جریانهای کاربری | Playwright, Cypress |
| Performance | سرعت و منابع | JMeter, k6 |
ابزارهای تست
چهار ابزار اصلی در پروژههای وردپرسی: یک — PHPUnit. استاندارد تست PHP. دو — WP_UnitTestCase. کلاس مخصوص وردپرس که Unit Test را با هستهٔ وردپرس ادغام میکند. سه — WP-CLI. خط فرمان برای تستهای سریع. چهار — Codeception. چارچوب تستهای Functional. نصب و پیکربندی اولیه، در مستندات رسمی وردپرس آمده است.
PHPUnit و WP_UnitTestCase
نمونهٔ یک تست ساده:
class My_Plugin_Test extends WP_UnitTestCase {
public function test_shortcode_output() {
$output = do_shortcode( '[my_shortcode]' );
$this->assertStringContainsString( '', $output );
}
public function test_meta_save() {
$post_id = $this->factory()->post->create();
update_post_meta( $post_id, '_my_key', 'value' );
$this->assertEquals( 'value', get_post_meta( $post_id, '_my_key', true ) );
}
}
سه نکته: یک — factory: برای ساخت دادههای تست. دو — assert: متنوع، برای انواع بررسی. سه — تنظیمات: در phpunit.xml.dist با اتصال به DB تست. راهنمای تفصیلی در ساختاربندی پروژه و CI/CD در وردپرس.
دیباگ با Xdebug
Xdebug، ابزار حرفهای دیباگ است. سه قابلیت: یک — Step Debugging: کد را خط به خط اجرا کنید، متغیرها را ببینید. دو — Stack Traces: مسیر خطا. سه — Profiling: زمان اجرای هر بخش کد. پیکربندی در php.ini:
xdebug.mode = debug,profile
xdebug.client_host = 127.0.0.1
xdebug.client_port = 9003
xdebug.start_with_request = yes
نکته: Xdebug روی Production غیرفعال باشد — بار اضافه دارد. تجربهام: در پروژهای با باگ پیچیده، Xdebug در چند دقیقه علت را نشان داد، در حالی که سه روز error_log و var_dump بینتیجه مانده بود. راهنما در محیط لوکال.
دیباگ با لاگ
سه سطح لاگ در وردپرس: یک — WP_DEBUG. نمایش خطاهای PHP:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
خطاها در wp-content/debug.log. دو — error_log سفارشی. با error_log( print_r( $data, true ) ). سه — Query Monitor. برای دیباگ کوئریها و هوکها. الگوی دقیق در دیباگ کد سفارشی، رفع Fatal Error، و رفع Warning PHP.
دیباگ front-end
سه ابزار: یک — کنسول مرورگر. برای خطاهای JS. راهنما در پیدا کردن خطاهای JS در کنسول. دو — تب Network. برای درخواستهای شبکه، حجم، ترتیب لود. سه — تب Performance. برای پروفایلینگ front-end و کشف گلوگاههای رندر. الگوی دقیق در ابزارهای تست سرعت و Core Web Vitals.
دیباگ عملکرد
سه ابزار: یک — Query Monitor: نشان میدهد کدام کوئری، کدام هوک، کدام افزونه، چقدر زمان میگیرد. دو — TTFB Monitoring: پایش زمان پاسخ سرور. سه — Slow Query Log در MySQL: کشف کوئریهای کند. الگوی دقیق در تأثیر TTFB بر سرعت و بهینهسازی کوئریهای MySQL.
تست در CI
اجرای تستها در CI، تفاوت بین «تست تشویقی» و «تست اجرایی» است. الگوی GitHub Actions:
name: Tests
on: [push, pull_request]
jobs:
phpunit:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:8
env:
MYSQL_ROOT_PASSWORD: root
steps:
- uses: actions/checkout@v3
- uses: shivammathur/setup-php@v2
with: { php-version: '8.1' }
- run: composer install
- run: ./vendor/bin/phpunit
الگو در استانداردها در CI و CI/CD در وردپرس.
دید مهندسی
برای توسعهدهندههای سطح بالا، سه الگوی تست حرفهای: یک — Test-Driven Development (TDD). ابتدا تست بنویسید، بعد کد. در وردپرس سختتر از سایر پلتفرمها، ولی مؤثر. دو — Fixtures و Factories. استفاده از factory وردپرس برای ساخت داده تست. سه — Mocking. برای تست کدی که به سرویس بیرونی وابسته است، از mock استفاده کنید. تجربهام: در پروژهای که endpointهای بیرونی داشت، mocking در تست، زمان CI را از ۱۵ دقیقه به ۲ دقیقه کاهش داد. الگوهای معماری در ساختاربندی پروژه و اتصال به سرویسهای خارجی. یک نکته: در پروژههای بسیار بزرگ، تست Performance (با k6 یا JMeter) بخشی از CI است تا افت کارایی در مراحل اولیه کشف شود.
اشتباهات رایج
- نبود تست Unit: تغییرات بعدی پر ریسک. ساختاربندی پروژه.
- Xdebug روی Production: بار اضافه، کاهش سرعت. باید خاموش باشد.
- نادیدهگرفتن لاگ: خطاها بیصدا میمانند. دیباگ.
- دیباگ با var_dump در Production: خطر افشا و شکست ظاهری.
- نبود تست در CI: تست بهصورت خودکار اجرا نمیشود. CI/CD.
- نبود تست Performance: افت کارایی در Production. ابزارهای تست سرعت.
- نادیدهگرفتن تست E2E: باگهای UI در Production.
- نبود محیط Staging برای دیباگ: کار روی Production، ریسک. محیط لوکال.
جمعبندی
تست و دیباگ در وردپرس، پنج سطح دارد: Unit، Integration، Functional، Visual، و Performance. ابزارها: PHPUnit، WP_UnitTestCase، Xdebug، Query Monitor، و Playwright. اگر امروز فقط یک کار میکنید: در پروژهٔ فعلی خود، یک Unit Test ساده برای یکی از توابع بنویسید و در CI اجرا کنید. همان اولین تجربه، درهای زیادی باز میکند. تجربهٔ خودتان از تست و دیباگ، در دیدگاهها ارزشمند است. 🧪