Рубрики
vam shop Заметки Новости Обучение

VamShop 3 — Автоматизированное тестирование PHPUnit

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

Результат смотрите на скриншоте:

Screenshot from 2018-11-26 09-57-13.png

Видно, что тесты выполнились и появился отчёт.

Все тесты прошли успешно.

 

Сам код тестов в папке /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 читайте в отдельной заметке —

https://forum.vamshop.ru/topic/15904-vamshop-3-%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B0%D0%B5%D0%BC-%D1%82%D0%B5%D1%81%D1%82%D1%8B-phpunit/

 

PHPUnit — очень мощный и нужный иснтрумент при разработке программного обеспечения.

Позволяет тестировать абсолютно всё.

Примеры будут позже добавляться.

 

Продолжение статьи — Vamshop 3 — Travis CI.

 

По умолчанию в VamShop 3 тесты написаны для модулей:

Blocks

Core

Nodes

Settings

Users

К примеру, можно запускать не сразу все тесты, а только для определённых модулей.

В папке /vendor/vamshop/vamshop-core выполните команду:

../../bin/phpunit Settings/tests

Выполнятся только тесты для модуля Settings.

Кроме того, можно запустить конкретный тест конкретного модуля, например:

phpunit --filter testHomeRoute Core/tests

Запустится только тест 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'),

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *