Docker и PHPUnit. Тестируем на нескольких версиях php.

Иногда возникает ситуация, когда необходимо убедиться, что созданный Вами код будет одинаково корректно работать в разных версиях окружения. Ниже я изложу простой вариант решения этой проблемы с помощью Docker. В наш прогрессивный век для решения этой проблемы прекрасно подойдет Travis. Но таки если есть необходимость сделать локальный прогон тестов, то читаем дальше.

Docker + PHPUnit

PHPUnit

Для начала нужно понять, что для прогона тестов нам понадобится версия PHPUnit, которая однозначно будет работать на любой версии php от 5.3 до 7.0, такой версией на данный момент является 3.7.*

Соответственно в composer.json стоит добавить именно эту версию

...
"require-dev": {
    "phpunit/phpunit": "3.7.*"
},
...

Docker

Чтобы не городить зоопарк из версий php на рабочей машине воспользуемся контейнерами. К черту подробности, вот сниппет:

#!/bin/bash                                                                                  

echo "$(tput setaf 16)$(tput setab 2)Run test for PHP 5.4$(tput sgr 0)"                      
docker run --rm -v "$PWD":/opt -w /opt php:5.4 php bin/phpunit                                

echo "$(tput setaf 16)$(tput setab 2)Run test for PHP 5.5$(tput sgr 0)"                      
docker run --rm -v "$PWD":/opt -w /opt php:5.5 php bin/phpunit                                

echo "$(tput setaf 16)$(tput setab 2)Run test for PHP 5.6$(tput sgr 0)"                      
docker run --rm -v "$PWD":/opt -w /opt php:5.6 php bin/phpunit                                

echo "$(tput setaf 16)$(tput setab 2)Run test for PHP 7.0$(tput sgr 0)"                      
docker run --rm -v "$PWD":/opt -w /opt php:7.0 php bin/phpunit

Этот сниппет можно закинуть в $PATH и вызывать в директории с тестируемым кодом.

Ну а теперь немного подробностей. Собственно в сниппете последовательно создаются контейнеры с необходимой версией php, которые после вызова phpunit благополучно удаляются из системы благодаря ключу —rm. Данный подход безусловно хорош тем, что после прогона тестов в системе не останется никакого мусора, ну за исключением образов, которые будут скачаны при первом запуске.

Я намеренно не затрагиваю вопрос установки Docker, так как в сети и без того полно статей на эту тему, впрочем контейнерная виртуализация тема довольно обширная и интересная, так что to be continued…

Docker и PHPUnit. Тестируем на нескольких версиях php.

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

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