VamShop 3 построен на базе CakePHP 3.x, соответственно, есть встроенная поддержка автоматизированного тестирования PHPUnit.
Всё сделано в соответствии с официальной документацией, доступной по адресу — https://book.cakephp.org/3.0/en/development/testing.html
По умолчанию в VamShop 3 уже написаны тесты для некоторых Core модулей.
Данная статья будет пополняться постепенно.
В данной заметке расскажу как запустить автоматизированное тестирование.
Будем считать, что у Вас установлен VamShop 3.
Тестирование надо проводить при включённом режиме отладки, т.е. в файле config/app.php поменяйте:
filter_var(env('DEBUG', false)
на:
filter_var(env('DEBUG', true)
Теперь нужно установить пакет phpunit.
В корневой папке магазина выполните команду:
composer require phpunit/phpunit:"^6.0"
PHPUnit не должен быть самой свежей 7 версии, PHPUnit 7 версии не поддерживается в CakePHP 3.x на данный момент.
Затем надо настроить базу данных, которая будет использоваться для тестирования.
В /config/app.php есть такой блок:
/**
* The test connection is used during the test suite.
*/
'test' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => 'localhost',
//'port' => 'non_standard_port_number',
'username' => 'my_app',
'password' => 'secret',
'database' => 'test_myapp',
'encoding' => 'utf8mb4',
'timezone' => 'UTC',
'cacheMetadata' => true,
'quoteIdentifiers' => false,
'log' => false,
//'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
'url' => env('DATABASE_TEST_URL', null),
],
Это как раз база для тестирования.
т.е. у Вас должна быть создана пустая база данных для тестов.
У Вас будет две базы данных: основная vamshop3 и база для тестов: vamshop3-test
Всё, тестовую базу данных настроили, теперь просто можно запускать тесты.
Для начала можно запустить тесты, которые идут с приложением CakePHP по умолчанию, т.е. в корневой папке магазина.
Переходите в кореную папку магазина.
Как работает phpunit?!
При запуске команды, phpunit ищет в директории запуска файл phpunit.xml.dist.
Это файл настроек.
Если файл находит, то запускает то, что описано в файле настроек.
Запускаем из корневой папки:
vendor/bin/phpunit
Результат смотрите на скриншоте:
Видно, что тесты выполнились и появился отчёт.
Все тесты прошли успешно.
Сам код тестов в папке /tests/
К примеру, откройте файл /tests/TestCase/Controller/PagesControllerTest.php
Там есть код:
/** * testDisplay method * * @return void */ public function testDisplay() { $this->get('/pages/home'); $this->assertResponseOk(); $this->assertResponseContains('CakePHP'); $this->assertResponseContains('<html>'); }
Это тест для стартовой страницы CakePHP, которая доступна по адресу http://адрес/pages/home
Страница доступна только при включённом режиме отладки.
Вот небольшой тест этой страницы, вод, что проверяется:
1. Что б в коде страницы был текст «CakePHP».
2. Что б в коде страницы был тэг <html>
Вот так работает тестирование.
Это самый простой пример.
Более сложные примеры можно посмотреть в тестах Core модулей в /app/vendor/vamshop/vamshop/core
В папках tests внутри модулей.
Можно проверять что угодно:
1. Запускается ли Ваш проектс на php 5, php 6, php 7, т.е. совместимость на различные версии софта.
1. Проверять на действия внутри сайта, к примеру, регистрацию, что б ошибок не было при регистрации пользователей.
2. Любые действия на сайте (добавление товара в корзину, добавление страниц, меню блоков).
3. Коды ответов страниц, т.е. есть ли 404 ошибка при запросе несуществующей страницы, есть ли 500 ошибка и т.д.
4. В админке, к примеру, можно проверять блоки, поднимать их выше, ниже, проверять меню, есть ли в коде определённые меню.
Возможности очень широкие по написанию тестов.
Про запуск тестов VamShop читайте в отдельной заметке —
PHPUnit — очень мощный и нужный иснтрумент при разработке программного обеспечения.
Позволяет тестировать абсолютно всё.
Примеры будут позже добавляться.
Продолжение статьи — Vamshop 3 — Travis CI.
По умолчанию в VamShop 3 тесты написаны для модулей:
Blocks
Core
Nodes
Settings
Users
К примеру, можно запускать не сразу все тесты, а только для определённых модулей.
В папке /vendor/vamshop/vamshop-core выполните команду:
Выполнятся только тесты для модуля Settings.
Кроме того, можно запустить конкретный тест конкретного модуля, например:
Запустится только тест testHomeRoute из модуля Core.
namespace для тестов.
Если composer их не выгрузил в autoload файл.
т.е. в /vendor/composer/autoload_psr4.php должны быть такие строки:
'Vamshop\\Acl\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Acl/tests'),
'Vamshop\\Blocks\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Blocks/tests'),
'Vamshop\\Comments\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Comments/tests'),
'Vamshop\\Core\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Core/tests'),
'Vamshop\\Dashboards\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Dashboards/tests'),
'Vamshop\\Example\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Example/tests'),
'Vamshop\\Extensions\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Extensions/tests'),
'Vamshop\\FileManager\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/FileManager/tests'),
'Vamshop\\Install\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Install/tests'),
'Vamshop\\Menus\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Menus/tests'),
'Vamshop\\Meta\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Meta/tests'),
'Vamshop\\Nodes\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Nodes/tests'),
'Vamshop\\Settings\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Settings/tests'),
'Vamshop\\Taxonomy\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Taxonomy/tests'),
'Vamshop\\Translate\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Translate/tests'),
'Vamshop\\Users\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Users/tests'),
'Vamshop\\Wysiwyg\\Test\\' => array($vendorDir . '/vamshop/vamshop-core/Wysiwyg/tests'),
'App\\' => array($vendorDir . '/vamshop/vamshop-core/tests/test_app/src'),
'Nodes\\' => array($vendorDir . '/vamshop/vamshop-core/tests/test_app/plugins/Nodes/src'),
'Shops\\' => array($vendorDir . '/vamshop/vamshop-core/tests/test_app/plugins/Shops/src'),
'Suppliers\\' => array($vendorDir . '/vamshop/vamshop-core/tests/test_app/plugins/Suppliers/src'),
'TestPlugin\\' => array($vendorDir . '/vamshop/vamshop-core/tests/test_app/plugins/TestPlugin/src'),