آزمون خودکار

در این بخش اطلاعاتی درباره آزمون خودکار جوملا، نحوه نوشتن تست‌ها و تنظیم آن‌ها خواهید یافت.

مفاهیم

جوملا از استراتژی‌های مختلفی برای آزمون برنامه استفاده می‌کند.

آزمون سیستم در مقابل آزمون واحد

آزمون‌های سیستم و آزمون‌های واحد استراتژی‌های مکملی هستند. در جوملا، آزمون واحد عمدتاً برای تست کلاس‌های فریم‌ورک (مثلاً کلاس‌های موجود در libraries/joomla) به کار می‌رود. این آزمون‌ها بررسی می‌کنند که یک متد (تابع) در کلاس به درستی کار می‌کند. برای مثال، آزمون واحد بررسی می‌کند متدهای کلاس JString درست عمل می‌کنند. این آزمون‌ها اعتماد به اینکه کلاس‌های فریم‌ورک درست عمل می‌کنند را افزایش داده و اجازه می‌دهند کدها بازفاکتور شده (کد بهبود یابد بدون تغییر در عملکرد) و باز هم اطمینان حاصل شود که عملکرد درست مانده است.

آزمون‌های سیستم بررسی می‌کنند که برنامه از دید کاربر به درستی کار می‌کند. برای مثال، یک آزمون سیستم می‌تواند بررسی کند که می‌توان یک آیتم منو جدید برای یک مقاله ایجاد کرد و آیتم منو روی سایت نمایش داده شود. یا آزمون می‌تواند جزئیاتی بیشتری چک کند مانند پارامترهای یک ماژول که به درستی عمل می‌کنند.

طراحی و ساخت تست‌های سیستم نیازمند دانش کاربردی از نحوه استفاده از برنامه است و نیازی به فهم عمیق برنامه‌نویسی یا کد جوملا ندارد. دانش کاربری اهمیت بیشتری نسبت به دانش برنامه‌نویسی دارد، به همین دلیل تست‌های سیستم را کاربران با دانش فنی کمتر هم می‌توانند طراحی و بنویسند.

جوملا از ابزار Cypress برای انجام آزمون‌های سیستم یا End-to-End استفاده می‌کند.

راه‌اندازی محیط آزمون

آماده‌سازی سیستم کاری (Workstation)

برای داشتن محیط تست مناسب به مجموعه‌ای از ابزارها نیاز دارید. ابزارهای ضروری:

- git 

- node (نسخه 16.16.0 که نسخه LTS فعلی است) 

- پایگاه داده (MySQL 5.6+، MariaDB 10.1+، PostgreSQL 11.0+) 

- PHP (ترجیحاً با توانایی استفاده از نسخه‌های مختلف و قابلیت سوییچ بین آن‌ها) 

- Composer (راهنمای نصب در مستندات جوملا) 

- وب‌سرور (Apache 2.4+ یا Nginx 1.18+) - اختیاری 

- ویرایشگر کد مثل PhpStorm یا Visual Studio Code 

توجه: این فهرست تقریباً همان ابزاری است که برای آزمون واحد نیاز دارید.

MAC OS

در مک‌اواس (macOS) روش‌های مختلفی برای نصب این ابزارها وجود دارد. یکی از روش‌ها استفاده از Valet همراه با Homebrew است.

مراحل بعد از نصب ابزارها:

1. ترمینال را باز کنید 

2. به یک پوشه دلخواه در سیستم خود بروید 

3. مخزن joomla-cms را کلون کنید: 

   `git clone https://github.com/joomla/joomla-cms.git` 

   — گزینه دیگر این است که ابتدا مخزن را فورک کنید و سپس فورک خود را کلون کنید؛ این روش توصیه می‌شود چون امکان ایجاد تغییرات و ارسال Pull Request مستقیم فراهم است. 

4. وارد پوشه joomla-cms شوید 

5. در صورت استفاده از Valet، دستور `valet link` را اجرا کنید 

6. دستور `composer install` را اجرا کنید تا وابستگی‌های PHP نصب شود 

7. دستور `npm ci` را اجرا کنید تا وابستگی‌های Node نصب شود 

8. فایل `cypress.env.json` را بسازید. این فایل امکان بازنویسی مقادیر تنظیمات فایل `cypress.config.js` را می‌دهد. 

نمونه فایل `cypress.env.json`:

 
{
 "sitename": "Joomla CMS Test Local",
 "name": "jane doe",
 "email": "این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید",
 "username": "local-admin",
 "password": "joomla-17082005",
 "db_type": "MySQLi",
 "db_host": "localhost",
 "db_name": "test_joomla",
 "db_user": "root",
 "db_password": "password",
 "db_prefix": "jos_"
}

تنها تنظیماتی که در محیط محلی شما متفاوت است را تغییر دهید.

9. دستور زیر را اجرا کنید تا Cypress باز شود و تست‌ها را اجرا کنید:

npx cypress open --e2e --browser=chrome --config baseUrl=http://joomla-cms.test

این دستور دو پنجره باز می‌کند: یک پنجره را می‌توانید نادیده بگیرید و پنجره دوم برای انتخاب و اجرای تست‌ها است.

 

Windows

در حال تکمیل شدن است.

آزمون‌های نوشتاری

در حال تکمیل شدن است.

آزمون واحد (Unit Testing)

مراحل راه‌اندازی محیط برای آزمون واحد تقریباً مشابه موارد بالا است:

1. ترمینال را باز کرده و به پوشه پروژه بروید 

2. اگر مخزن را کلون نکردید، کلون کنید 

3. وارد پوشه joomla-cms شوید 

4. نسخه‌ای از فایل `phpunit.xml.dist` را به نام `phpunit.xml` کپی کنید. این فایل تنظیمات لازم برای اجرای phpunit است.

نمونه فایل `phpunit.xml`: 

 
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="tests/Unit/bootstrap.php" colors="false">
    <testsuites>
        <testsuite name="Unit">
            <directory suffix="Test.php">./tests/Unit/Libraries</directory>
        </testsuite>
        <testsuite name="Integration">
            <directory suffix="Test.php">./tests/Integration/Libraries</directory>
        </testsuite>
    </testsuites>
    <php>
        <const name="JTEST_DB_ENGINE" value="mysqli" />
        <const name="JTEST_DB_HOST" value="mysql" />
        <const name="JTEST_DB_NAME" value="test_joomla" />
        <const name="JTEST_DB_USER" value="root" />
        <const name="JTEST_DB_PASSWORD" value="password" />
    </php>
</phpunit>

5. phpunit –testdox را اجرای کنید

آزمون‌های نوشتاری

در حال تکمیل است.